Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 01.08.2018
Сообщений: 121
GraphABC

Создание выбора варианта мышью

04.03.2019, 16:52. Показов 2438. Ответов 30

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
uses GraphABC;
label restart;
type
masdata = array [1..2] of array [1..10000] of string; 
function incdat(kol:integer):masdata; // ввод баз перевода
var i:integer;
t:text;
begin
assign(t, 'rus.txt');
reset(t);
for i:=1 to kol do 
  readln(t, result[1][i]);
  close(t);
  assign(t, 'eng.txt');
reset(t);
for i:=1 to kol do 
  readln(t, result[2][i]);
  close(t);
  end;
function kolbase():integer;
var t:text;
begin
assign(t, 'kolbase.txt');
reset(t);
readln(t,result);
close(t);
end; 
procedure rusdobbase(kolword:integer;clowar:masdata);//процедура дбавления данных в базу
var
 t:text;
i:integer;
begin
assign(t, 'kolbase.txt');
rewrite(t);
kolword:=kolword+1;
writeln(t,kolword);//изменение размера базы
close(t);
clearwindow;
textout(0,0,'введите слово для добавления в базу');
readln(clowar[1][kolword]);
assign(t, 'rus.txt'); //слово русское
rewrite(t);
for i:=1 to kolword do writeln(t,clowar[1][i]);
close(t);//перезапись русской части
clearwindow;
textout(0,0,'введите перевод слова');
readln(clowar[2][kolword]);
assign(t, 'eng.txt'); //слово английское
rewrite(t);
for i:=1 to kolword do writeln(t,clowar[2][i]);
close(t);//перезапись английской части
clearwindow;
textout(0,0,'добавление выполнено. Для продожения работы с программой нажмите "ввод"');
readln();
clearwindow;
end;
 
procedure engdobbase(kolword:integer;clowar:masdata);//процедура дбавления данных в базу
var
 t:text;
i:integer;
begin
assign(t, 'kolbase.txt');
rewrite(t);
kolword:=kolword+1;
writeln(t,kolword);//изменение размера базы
close(t);
clearwindow;
textout(0,0,'введите слово для добавления в базу');
readln(clowar[2][kolword]);
assign(t, 'eng.txt'); //слово русское
rewrite(t);
for i:=1 to kolword do writeln(t,clowar[2][i]);
close(t);//перезапись английской части
clearwindow;
textout(0,0,'введите перевод слова');
readln(clowar[1][kolword]);
assign(t, 'rus.txt'); //слово русское
rewrite(t);
for i:=1 to kolword do writeln(t,clowar[1][i]);
close(t);//перезапись английской части
clearwindow;
textout(0,0,'добавление выполнено. Для продожения работы с программой нажмите "ввод"');
readln();
clearwindow;
end;
 
procedure eng_rus(clowar:masdata;kolwords:integer);
var
words:string;
i,y:integer;
q:boolean;
begin
q:=true;
textout(0,0,'введите компьтерное слово для перевода');
readln(words);
clearwindow;
y:=0;
for i:=1 to kolwords do 
if clowar[2][i]=words then begin textout(0,y,clowar[1][i]); q:=false;y:=y+34;end; // поиск совпвдений в базе
if q=true then begin 
textout(0,0,'ничего не найдено!!!вы хотите дополнить базу приложения(да/нет)');
readln(words);
if words='да' then engdobbase(kolwords,clowar);
end else readln();
clearwindow;
end;
 
procedure rus_eng(clowar:masdata;kolword:integer);
var
words:string;
i,y:integer;
q:boolean;
begin
q:=true;
textout(0,0,'введите компьтерное слово для перевода');
readln(words);
clearwindow;
y:=0;
for i:=1 to kolword do 
if clowar[1][i]=words then begin textout(0,y,clowar[2][i]); q:=false;y:=y+34;end; // поиск совпвдений в базе
if q=true then begin 
textout(0,0,'ничего не найдено!!!вы хотите дополнить базу приложения(да/нет)');
readln(words);
if words='да' then rusdobbase(kolword,clowar);
end else readln();
clearwindow;
end;
 
  var
clowar:masdata;
words:string;
i,y,kolword:integer;
q: boolean;
begin
restart:
clearwindow;
q:=true;
kolword:=kolbase;
setwindowsize(1200,500); // установление размеров окна
setwindowcaption('словарь v1.0');
clowar:=incdat(kolword); //передача базы перевода в прогорамму
setfontsize(24);
textout(0,0,'язык общения(русский\английский)');     //надо этот код заменить кодом выбора с помошью мыши
readln(words);
if words='русский' then rus_eng(clowar,kolword) else eng_rus(clowar,kolword);
 
clearwindow;
textout(0,0,'вы хотите продолжить работу с программой(да\нет)');
readln(words);
if words='да' then goto restart;
closewindow;
end.
как это сделать я без понятия
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2019, 16:52
Ответы с готовыми решениями:

Создание объектов ABCObjects и работа с мышью
Работа идёт в PascalABC.NET с модулями GraphABC для работы с мышью и ABCObjects для создания объектов. Необходимо: 1) на клик левой...

После выбора варианта загрузки система виснет - Windows XP . загрузка идет тока с выбора безопасного режима
вот видио Кто знает что такое ?

Оператор варианта (выбора)
. Мастям игральных карт условно присвоены следующие порядковые номера: масти "пики" — 1, масти "трефы" — 2, масти...

30
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
10.03.2019, 16:45
Студворк — интернет-сервис помощи студентам
Нажмите на экране в любой точке. -> это лямбда, по сути сокращённое описание подпрограммы.

Компилятор разворачивает эту программу в следующее:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
uses GraphABC;
 
procedure MouseDown(x,y,b: integer);
begin
  ReadlnString;
end;
 
begin
  OnMouseDown += MouseDown;
  
  ReadlnString;
end.
Только вместо MouseDown - компилятор придумает какое то уникальное имя для этой процедуры.

Цитата Сообщение от андрей богатыре Посмотреть сообщение
что он днлает
Это упрощённый пример, что необходимо чтоб вызвать эту ошибку. У вас в программе тоже самое происходит, но только с кучей не относящегося к ошибке кода.
1
1 / 1 / 0
Регистрация: 01.08.2018
Сообщений: 121
10.03.2019, 16:46  [ТС]
На замену GraphABC сейчас пришёл GraphWPF. Он быстрее и основан на более продвинутых технологиях. Кроме всего прочего, с ним стал возможен модуль Graph3D. (сообщение от пользователя)
ну и тупые разрабы судя пос правне graphWDF в плане вывода текста хуже чем ABC
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
10.03.2019, 16:49
Цитата Сообщение от андрей богатыре Посмотреть сообщение
ну и тупые разрабы судя пос правне graphWDF в плане вывода текста хуже чем ABC
1. Стоит хотя бы пробовать перечитывать что написал, перед отправкой, это не читабельно.
2. Что именно не так с текстом. В отличии от GraphABC - этот модуль поддерживается, а значит если что то неправильно - исправят.
0
1 / 1 / 0
Регистрация: 01.08.2018
Сообщений: 121
11.03.2019, 17:24  [ТС]
хорошо а как эту программу переделать под WPF
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
11.03.2019, 17:33
Я вас не буду с 0 учить всему что там есть. Для этого есть справка и примеры. Всего в
C:\PABCWork.NET\Samples\Graphics\GraphWPF
Должно быть достаточно, чтоб понять основные моменты.

А далее - спрашивайте отдельные вещи. Потому что, опять же, полностью переписывать огромную программу за вас никто не будет.
0
1 / 1 / 0
Регистрация: 01.08.2018
Сообщений: 121
11.03.2019, 19:03  [ТС]
как сделать ввод данных в WPF

Добавлено через 22 секунды
readln не работает
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
11.03.2019, 20:11
У меня работает. Как вы делаете?
0
1 / 1 / 0
Регистрация: 01.08.2018
Сообщений: 121
12.03.2019, 17:00  [ТС]
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
uses GraphWPF;
 
type
  masdata = array [1..2] of array [1..10000] of string;// обьявления типа данных
 
var
  clowar: masdata;
  kolword:integer;
 
  
 
 
 
function incdat(kol: integer): masdata;// ввод баз перевода
var
  i: integer;
  t: text;
begin
  assign(t, 'rus.txt');
  reset(t);
  for i := 1 to kol do 
    readln(t, result[1][i]);
  close(t);
  assign(t, 'eng.txt');
  reset(t);
  for i := 1 to kol do 
    readln(t, result[2][i]);
  close(t);
end;
 
function kolbase(): integer;
var
  t: text;
begin
  assign(t, 'kolbase.txt');
  reset(t);
  readln(t, result);
  close(t);
end;
 
procedure rusdobbase(kolword: integer; clowar: masdata);//процедура дбавления данных в базу
var
  t: text;
  i: integer;
begin
  assign(t, 'kolbase.txt');
  rewrite(t);
  kolword := kolword + 1;
  writeln(t, kolword);//изменение размера базы
  close(t);
 Window.Clear;
  textout(0, 0, 'введите слово для добавления в базу',Alignment.LeftTop);
  readln(clowar[1][kolword]);
  assign(t, 'rus.txt'); //слово русское
  rewrite(t);
  for i := 1 to kolword do writeln(t, clowar[1][i]);
  close(t);//перезапись русской части
  Window.Clear;
  textout(0, 0, 'введите перевод слова',Alignment.LeftTop);
  readln(clowar[2][kolword]);
  assign(t, 'eng.txt'); //слово английское
  rewrite(t);
  for i := 1 to kolword do writeln(t, clowar[2][i]);
  close(t);//перезапись английской части
   Window.Clear;
  textout(0, 0, 'добавление выполнено. Для продожения работы с программой нажмите "ввод"',Alignment.LeftTop);
  readln();
   Window.Clear;
end;
 
procedure engdobbase(kolword: integer; clowar: masdata);//процедура дбавления данных в базу
var
  t: text;
  i: integer;
begin
  assign(t, 'kolbase.txt');
  rewrite(t);
  kolword := kolword + 1;
  writeln(t, kolword);//изменение размера базы
  close(t);
   Window.Clear;
  textout(0, 0, 'введите слово для добавления в базу',Alignment.LeftTop);
  readln(clowar[2][kolword]);
  assign(t, 'eng.txt'); //слово русское
  rewrite(t);
  for i := 1 to kolword do writeln(t, clowar[2][i]);
  close(t);//перезапись английской части
   Window.Clear;
  textout(0, 0, 'введите перевод слова',Alignment.LeftTop);
  readln(clowar[1][kolword]);
  assign(t, 'rus.txt'); //слово русское
  rewrite(t);
  for i := 1 to kolword do writeln(t, clowar[1][i]);
  close(t);//перезапись английской части
   Window.Clear;
  textout(0, 0, 'добавление выполнено. Для продожения работы с программой нажмите "ввод"',Alignment.LeftTop);
  readln();
   Window.Clear;
end;
 
procedure eng_rus(clowar: masdata; kolwords: integer);
var
  words: string;
  i, y: integer;
  q: boolean;
begin
 Window.Clear;
  q := true;
  textout(0, 0, 'введите компьтерное слово для перевода',Alignment.LeftTop);
  readln(words);
   Window.Clear;
  y := 0;
  for i := 1 to kolwords do 
    if clowar[2][i] = words then begin textout(0, y, clowar[1][i]); q := false; y := y + 34; end; // поиск совпвдений в базе
  if q = true then begin
    textout(0, 0, 'ничего не найдено!!!вы хотите дополнить базу приложения(да/нет)',Alignment.LeftTop);
    readln(words);
    if words = 'да' then engdobbase(kolwords, clowar);
  end else readln();
   Window.Clear;
end;
 
 
procedure rus_eng(clowar: masdata; kolword: integer);
var
  words: string;
  i, y: integer;
  q: boolean;
begin
  Window.Clear;
  q := true;
  textout(0, 0, 'введите компьтерное слово для перевода',Alignment.LeftTop);
  readln(words);
   Window.Clear;
  y := 0;
  for i := 1 to kolword do 
    if clowar[1][i] = words then begin textout(0, y, clowar[2][i]); q := false; y := y + 34; end; // поиск совпвдений в базе
  if q = true then begin
    textout(0, 0, 'ничего не найдено!!!вы хотите дополнить базу приложения(да/нет)',Alignment.LeftTop);
    readln(words);
    if words = 'да' then rusdobbase(kolword, clowar);
  end else readln();
   Window.Clear;
end;
 
 
procedure obrmouse(x, y:real; mb: integer); //обработчик мыши
begin
 
  if (y > 34) and (y < 68) and (mb=1) then begin rus_eng(clowar, kolword); end;
  if (y > 68) and (y < 102) and (mb=1) then begin eng_rus(clowar, kolword); end;
end;
 
var
  words: string;
  i, y: integer;
  q: boolean;
 
begin
  kolword := kolbase;
 // установление размеров окна
  Window.Title:='словарь v1.1';
  Font.Size := 24;
  window.Height:=500;
  window.Width:=1200;
  
  clowar := incdat(kolword); //передача базы перевода в прогорамму
  textout(0, 0, 'язык общения',Alignment.LeftTop);
  textout(0,34,'русский',Alignment.LeftTop);
  textout(0,68,'английский',Alignment.LeftTop);
  onmousedown:=obrmouse;//обработчик мыши
  sleep(999000);
  window.close;
end.
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
12.03.2019, 17:11
Ну, у меня всё вводится. Конечно, надо перевести фокус на консоль (или окно ввода, если запускать в связке с оболочкой)

Добавлено через 7 минут
Ну и, чтоб форма не зависала пока вы вводите что то в readln - лучше запускать обработчик в таске. Для этого замените это:
Pascal
1
  onmousedown:=obrmouse;//обработчик мыши
На:
Pascal
1
2
  OnMouseDown += (x,y,b)->
  System.Threading.Tasks.Task.Run(()->obrmouse(x,y,b));
OnMouseDown вызывается в потоке формы, а это значит что пока этот поток стоит на паузе из за readln - перерисовка и т.п. будет тоже стоять на паузе.
Таски выполняются паралельно потому потоку, которых из вызвал, поэтому readln ставит на паузу не поток формы, а только этот таск.
0
1 / 1 / 0
Регистрация: 01.08.2018
Сообщений: 121
12.03.2019, 17:41  [ТС]
а как сделать так чтобы не приходилось переключать внимание(в ABC открывалась строка снизу
0
 Аватар для Sun Serega
2357 / 1460 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
12.03.2019, 20:21
Лучший ответ Сообщение было отмечено андрей богатыре как решение

Решение

Рисуйте прямоугольник и ловите нажатие букв на клавиатуре, когда курсор стоит на этом прямоугольнике. Это самый простой способ, если хотите ввод в том же окне.

А в идеале, если вы делаете словарь - используйте чистую консоль (и System.Console чтоб выжать из неё максимум функционала). Если это будет что то вроде игры, то есть без графики никак - лучше взять что то типа OpenGL. В принципе, можно ещё рисовать картинки в консоли, через System.Drawing, но если попытаться написать что то поверх них - они частично стираются.

А все стандартные модули, с Graph в названии - это боловство, необходимое только чтоб научится азам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2019, 20:21

Сообщение для выбора варианта
Мне нужно вызвать сообщение в котором будут две кнопочки Да или Нет по нажатию на одну из которых выполниться определённая функция...

Задача выбора варианта раскроя
На заготовительный участок мебельной фабрики поступили листы фанеры размером 152х152 см. Необходимо разрезать их на заготовки по 105х31,...

Проверка выбора варианта ответа на тест.
В тесте нужно сделать, чтобы проверялось выбрал пользователь какой-нибудь вариант ответа или нет. if (RadioButton1.cheked = false) and...

Использование перечисления для выбора варианта
Здравствуйте. Решил вот сесть за изучение с++, мой первый яп. Мне всегда было трудно с логикой и математикой и первые же упражнения,...

Реализация выбора пользователем варианта действий
Здравствуйте, надо написать программу для заполнения массива и выбора типа сортировки. При запросе у пользователя как отсортировать и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru