Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
GraphABC

Как при вводе определенной фразы закончить рисование мышью в GraphABC?

02.05.2019, 07:58. Показов 3358. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! С другом делаем проект, в который необходимо добавить рисование мышью с помощью OnMouseMove и OnMouseDown. После того, как пользователь введет фразу или нажмет на кнопку, рисунки должны исчезнуть и надо сделать так, чтобы НЕЛЬЗЯ БЫЛО РИСОВАТЬ ПОСЛЕ. Если кто-нибудь починит код, буду чрезмерно благодарен.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
uses graphabc; //создает командную строку и окно ввода
var d,p,w,s,m,t:real; h,g,l,k,q,b,c:String; a:integer; //переменные (Real:все числа. И дробные и целые с противоположными) и (String: слова и буквы). Про остальные можно прочитать в справке. А эти самые полезные.
begin //начало общей программы.
        Window.Title := 'Paint'; //создает или меняет  название окна ввода
        if (k='/') then Writeln (t);  //если знак это / то вывести на экран переменную t.
        sleep(1500); //создает задержку.
        TextOut (1,1,'Запуск Paint'); //заставляет появиться надпись в скобках в определенном месте.
        sleep (1000); //создает задержку.
        TextOut (1,30,'Версия 0.2'); //заставляет появиться надпись в скобках в определенном месте.
        sleep (1000); //создает задержку.
        TextOut (1,60,'Запуск прошел успешно. Также напоминаем,что программа еще не готова.'); //заставляет появиться надпись в скобках в определенном месте.
        TextOut (1,90,'Какую вы хотите задать ширину кисти?'); //заставляет появиться надпись в скобках в определенном месте.
        readln (a); //задает переменной  a введенное значение.
        setpenwidth (a); //устанавливает ширину кисти равной переменной a.
        setpencolor (clred); //задает введенный цвет (сейчас красный).
        OnMouseDown := (x,y,mb) -> MoveTo(x,y); // устанавливает точку начала рисования при нажатии ЛКМ.
        OnMouseMove := (x,y,mb) -> if mb=1 then LineTo(x,y); //рисует линию с точки начала рисования при нажатии ЛКМ.
        TextOut (1,150,'Если хотите закончить, нажмите "Enter".'); //заставляет появиться надпись в скобках в определенном месте.
        readln (q); //задает переменной  q введенное значение.
        if (q<>'exit') or (q<>'Exit') then ClearWindow; //если переменная q равна слову в скобках то делать все на следующей строчке. Иначе очистить все рисунки.
        textOut (1,1,c); //заставляет появиться надпись в скобках в определенном месте.
        textOut (1,1,'Вот такая проблема...'); 
        end.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.05.2019, 07:58
Ответы с готовыми решениями:

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

Как сделать выполнение определенной части кода python, при вводе определенного значения
Как сделать выполнение определенной части кода python, при вводе определенного значения Нужно, чтобы было примерно так: После запуска...

Рисование на форме как в GraphABC
Почему-то процедура _InitInterface не ресует линию. А вот _InitGraphix рисует! Вопрос, а как сделать рисование на форме как в GraphABC? ...

16
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
02.05.2019, 08:41
Pascal
5
if (k='/') then Writeln (t);
А от куда в переменной k взялся этот знак?
0
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
02.05.2019, 21:02  [ТС]
Извините, вроде проверял перед отправкой, этой строки не должно быть. Точнее она из другой части программы.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
03.05.2019, 04:15
Ну, дык, приведите рабочую программу!
0
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
03.05.2019, 06:58  [ТС]
Вот:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
uses graphabc; //создает командную строку и окно ввода
var d,p,w,s,m,t:real; h,g,l,k,q,b,c:String; a:integer; //переменные (Real:все числа. И дробные и целые с противоположными) и (String: слова и буквы). Про остальные можно прочитать в справке. А эти самые полезные.
begin //начало общей программы.
        Window.Title := 'Paint'; //создает или меняет  название окна ввода
        TextOut (1,1,'Запуск Paint'); //заставляет появиться надпись в скобках в определенном месте.
        sleep (1000); //создает задержку.
        TextOut (1,30,'Версия 0.2'); //заставляет появиться надпись в скобках в определенном месте.
        sleep (1000); //создает задержку.
        TextOut (1,60,'Запуск прошел успешно. Также напоминаем,что программа еще не готова.'); //заставляет появиться надпись в скобках в определенном месте.
        TextOut (1,90,'Какую вы хотите задать ширину кисти?'); //заставляет появиться надпись в скобках в определенном месте.
        readln (a); //задает переменной  a введенное значение.
        setpenwidth (a); //устанавливает ширину кисти равной переменной a.
        setpencolor (clred); //задает введенный цвет (сейчас красный).
        OnMouseDown := (x,y,mb) -> MoveTo(x,y); // устанавливает точку начала рисования при нажатии ЛКМ.
        OnMouseMove := (x,y,mb) -> if mb=1 then LineTo(x,y); //рисует линию с точки начала рисования при нажатии ЛКМ.
        TextOut (1,150,'Если хотите закончить, нажмите "Enter".'); //заставляет появиться надпись в скобках в определенном месте.
        readln (q); //задает переменной  q введенное значение.
        if (q<>'exit') or (q<>'Exit') then ClearWindow; //если переменная q равна слову в скобках то делать все на следующей строчке. Иначе очистить все рисунки.
        textOut (1,1,c); //заставляет появиться надпись в скобках в определенном месте.
        textOut (1,1,'Вот такая проблема...'); 
        end.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
03.05.2019, 07:57
Лучший ответ Сообщение было отмечено ThePowerDan как решение

Решение

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
uses GraphABC;
 
var
  x, y : Integer;
  thePaint := True;
 
procedure Init;
begin
  Window.Title := 'Paint';
  TextOut (1,1,'Запуск Paint');
  Sleep(1000);
  Window.Clear;
  TextOut (1,1,'Версия 0.2');
  Sleep(1000);
  Window.Clear;
  TextOut(1,10,'Запуск прошел успешно. Также напоминаем,что программа еще не готова.');
  
  TextOut(1,90,'Какую вы хотите задать ширину кисти?');
  SetPenWidth( ReadLnInteger );
  SetPenColor(clRed);
  Window.Clear;
  
  Window.Title := 'Если нажать на колёсико, то рисование прекратится';
end;
 
procedure MouseDown(x, y, mb : Integer);
const
  status : array [Boolean] of String = ('начнётся заново', 'прекратится');
begin
  if mb = 0 then
    begin
      thePaint := Not thePaint;
      Window.Title := $'Если нажать на колёсико, то рисование {status[thePaint]}';
      if thePaint then
        Window.Clear;
    end
  else
    MoveTo(x, y);
end;
 
begin
  Init;
  OnMouseDown := MouseDown;
  OnMouseMove := (x,y,mb) -> if (mb = 1) and thePaint then LineTo(x,y);
end.
1
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
03.05.2019, 09:03  [ТС]
Большое спасибо, но можно ли как-то сделать, чтобы пользователь вводил именно слово, а не нажимал на колесико?

P.S. Если не сложно, сделайте пожалуйста комментарии с объяснениями некоторых операторов и процедур.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
03.05.2019, 14:32
Типа так:
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
uses GraphABC;
 
var
  x, y : Integer;
  thePaint := True;
  theCheat : String := '';
 
procedure Init;
begin
  Window.Title := 'Paint';
  TextOut (1,1,'Запуск Paint');
  Sleep(1000);
  Window.Clear;
  TextOut (1,1,'Версия 0.2');
  Sleep(1000);
  Window.Clear;
  TextOut(1,10,'Запуск прошел успешно. Также напоминаем,что программа еще не готова.');
  
  TextOut(1,90,'Какую вы хотите задать ширину кисти?');
  SetPenWidth( ReadLnInteger );
  SetPenColor(clRed);
  Window.Clear;
end;
 
procedure KeyDown(key : Integer);
begin
  theCheat += Chr(key);
  if theCheat.Contains('EXIT') then Window.Close
  else if theCheat.Contains('CLEAR') then begin Window.Clear; theCheat := ''; end
  else if theCheat.Contains('DRAW') then begin thePaint := Not thePaint; theCheat := ''; end;
end;
 
begin
  Init;
  OnMouseDown := (x,y,mb)->MoveTo(x,y);
  OnMouseMove := (x,y,mb) -> if (mb = 1) and thePaint then LineTo(x,y);
  OnKeyDown := KeyDown;
end.
Команды: clear, draw и exit.

Добавлено через 5 часов 13 минут
Для тех, кто просит сам не зная что: нужно ввести «clear», «draw» или «exit» и будет вам счастье!
0
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
03.05.2019, 17:26  [ТС]
Этот способ не работает. Может кто-нибудь еще посидеть над этой программой?
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
03.05.2019, 17:30
Что значит „не работает“?
Объясните.
0
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
03.05.2019, 17:53  [ТС]
При добавлении этой части в целую программу, происходит куча ошибок. Если хотите посмотреть, могу скинуть в лс программу целиком.

Добавлено через 18 минут
На всякий случай, если скучно станет, программа.

uses graphabc;//создает командную строку и окно ввода

var
d, p, w, s, m, t: real;
h, g, l, k, q, b, c: String;
a: integer;//переменные (Real:все числа. И дробные и целые с противоположными) и (String: слова и буквы). Про остальные можно прочитать в справке. А эти самые полезные.

begin//начало общей программы.
MaximizeWindow; //разворачивает окно на полный экран.
SetFontSize(15); //устанавливает размер шрифта.
Window.Title := 'Упрощенная версия компьютера'; //создает или меняет название окна ввода
//setwindowsize (1280,720); //устанавливает разрешение 1280 на 720 точек, что равно HD разрешению.
writeln('Запуск упрощенной версии компьютера.'); //заставляет появиться надпись в скобках.
sleep(3000); //создает задержку.
writeln('Запуск прошел успешно.'); //заставляет появиться надпись в скобках.
sleep(1000); //создает задержку.
writeln('Версия 0.3'); //заставляет появиться надпись в скобках.
sleep(1000); //создает задержку.
writeln('Введите имя пользователя.'); //заставляет появиться надпись в скобках.
readln(h); //задает переменной h введеное значение.
writeln('Хорошо, ', h, ', создайте пароль.'); //заставляет появиться надпись в скобках.
readln(g); //задает переменной g введеное значение.
clearwindow;
c := ('Выбери программу: калькулятор(кальк), браузер, paint (ранний доступ), помощь, выход.');
repeat//повторять.
textOut(1, 1, c); //написать текст в определенном месте.
readln(l); //задает переменной l веденое значение.

///Калькулятор

if (l = 'кальк') or (l = 'Кальк') then //если переменная l равна слову в скобках то
begin//создание программы внутри общей программы.
clearwindow; //стереть весь экран.
Window.Title := 'Калькулятор'; //создает или меняет название окна ввода
sleep(1500); //создает задержку.
textOut(1, 1, 'Запуск программы "калькулятор"'); //заставляет появиться надпись в скобках в определенном месте.
sleep(1000); //создает задержку.
textOut(1, 30, 'Запуск прошел успешно.'); //заставляет появиться надпись в скобках в определенном месте.
sleep(1000); //создает задержку.
textOut(1, 60, 'Версия 1.1'); //заставляет появиться надпись в скобках в определенном месте.
sleep(1000); //создает задержку.
textOut(1, 90, 'Введите два числа'); //заставляет появиться надпись в скобках в определенном месте.
readln(d, p); //задает переменным d и p веденое значение.
textOut(1, 120, 'Что вам нужно с ними сделать? Напишите знак. (Примеры:+,-,*,/)'); //заставляет появиться надпись в скобках в определенном месте.
readln(k); //задает переменной k веденое значение.
w := d * p; // данная переменная равна введеному выражению.
s := d + p; // данная переменная равна введеному выражению.
m := d - p; // данная переменная равна введеному выражению.
t := d / p; // данная переменная равна введеному выражению.
if (k = '+') then TextOut(1, 150, s); //если знак это + то вывести на экран переменую s.
if (k = '-') then TextOut(1, 150, m); //если знак это - то вывести на экран переменую m.
if (k = '*') then TextOut(1, 150, w); //если знак это * то вывести на экран переменую w.
if (k = '/') then TextOut(1, 150, t); //если знак это + то вывести на экран переменую t.
textOut(1, 180, 'Если хотите перейти в меню, нажмите "Enter".'); //заставляет появиться надпись в скобках.
readln(b); //заставляет появиться надпись в скобках.
ClearWindow; //стирает все рисунки.
textOut(1, 1, c); //заставляет появиться надпись в скобках в определенном месте.
end; //конец программы созданной внутри общей программы.

///Paint

if (l = 'Paint') or (l = 'paint') then //если переменная l равна слову в скобках то
begin//создание программы внутри общей программы.
clearwindow; //стереть весь экран.
Window.Title := 'Paint'; //создает или меняет название окна ввода
sleep(1500); //создает задержку.
TextOut(1, 1, 'Запуск Paint'); //заставляет появиться надпись в скобках в определенном месте.
sleep(1000); //создает задержку.
TextOut(1, 30, 'Версия 0.2'); //заставляет появиться надпись в скобках в определенном месте.
sleep(1000); //создает задержку.
TextOut(1, 60, 'Запуск прошел успешно. Также напоминаем,что программа еще не готова.'); //заставляет появиться надпись в скобках в определенном месте.
TextOut(1, 90, 'Какую вы хотите задать ширину кисти?'); //заставляет появиться надпись в скобках в определенном месте.
readln(a); //задает переменной a введеное значение.
setpenwidth(a); //устанавливает ширину кисти равной переменной a.
setpencolor(clred); //задает введеный цвет (сейчас красный).
OnMouseDown := (x, y, mb) -> MoveTo(x, y); // устанавливает точку начала рисования при нажатии ЛКМ.
OnMouseMove := (x, y, mb) -> if mb = 1 then LineTo(x, y); //рисует линию с точки начала рисования при нажатии ЛКМ.
TextOut(1, 150, 'Если хотите закончить, нажмите "Enter".'); //заставляет появиться надпись в скобках в определенном месте.
readln(q); //задает переменной q введеное значение.
if (q <> 'exit') or (q <> 'Exit') then ClearWindow; //если переменная q равна слову в скобках то делать все на следующей строчке. Иначе очистить все рисунки.
textOut(1, 1, c); //заставляет появиться надпись в скобках в определенном месте.
end; //заканчивает программу созданной внутри общей программы.

///Помощь

if (l = 'помощь') or (l = 'Помощь') then //если переменная l равна слову в скобках то
begin//создание программы внутри общей программы.
ClearWindow; //стирает все окно.
Window.Title := 'Помощь'; //создает или меняет название окна ввода.
sleep(1500); //создает задержку.
textOut(1, 1, 'Упрощенная версия компьютера.'); //заставляет появиться надпись в скобках в определенном месте.
textOut(1, 30, 'Версия 0.3'); //заставляет появиться надпись в скобках в определенном месте.
textOut(1, 60, 'Обратная Связь: weareprogrammists@gmail.com'); //заставляет появиться надпись в скобках в определенном месте.
textOut(1, 90, '©2019. Все права защищены.'); //заставляет появиться надпись в скобках в определенном месте.
textOut(1, 120, 'Если хотите перейти в меню, нажмите "Enter".'); //заставляет появиться надпись в скобках в определенном месте.
readln(b); //задает переменной b введеное значение.
if (b <> 'pascal') then ClearWindow; //если переменная b равна слову в скобках то стирает все рисунки.
textOut(1, 1, c); //заставляет появиться надпись в скобках в определенном месте.
end; //конец программы созданной внутри общей программы.
until l = ('выход'); //до тех пора пока переменная l не будет равна слову в скобках.
if (l = 'выход') then CloseWindow; //если переменная l является словом в скобках то закрыть программу.
end. //конец общей программы.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
04.05.2019, 07:45
Ну, дык, это вашу программу нужно добавлять в мою, а не мою в вашу!
0
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
04.05.2019, 18:49  [ТС]
Тогда, будьте добры, вмонтируйте ее сами (если не трудно и не заняты)
0
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
06.05.2019, 09:06  [ТС]
Пожалуйста встройте вашу программу с колесиком в нашу программу сами. У нас не получилось из-за Procedure. Одни ошибки. Плиз.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
06.05.2019, 09:07
Для начала, разбейте свою программу на отдельные блоки с помощью процедур.
0
0 / 0 / 0
Регистрация: 30.04.2019
Сообщений: 10
06.05.2019, 09:13  [ТС]
Мы (нас двое) не понимаем вас. Мы пока новички.

Добавлено через 1 минуту
Ладно, мы напишем часа через 4
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
06.05.2019, 09:21
Я тем более не понимаю вашу ерунду!
20 строк кода захламлённых никому не нужными комментариями…

Дайте нормальное техзадание. Иначе ни чего не получится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.05.2019, 09:21
Помогаю со студенческими работами здесь

Вычислить количество и среднее арифметическое вводимых четных и нечетных чисел.При вводе нуля закончить работу
2.)Вычислить количество и среднее арифметическое вводимых четных и нечетных чисел.При вводе нуля закончить работу.

Рисование Canvas, при наведении мышью - изменить цвет
Вот так рисую окружности на Image1: void risuem(int x, int y, int R) { Form1-&gt;Image1-&gt;Canvas-&gt;Pen-&gt;Color=clGreen; ...

Корректное закрытие окна, при вводе определенной команды от пользователя
Всем привет! У меня есть обработчик, который слушает команды от пользователя: class CommandListener implements KeyListener{ ...

при вводе пользователем строки определенной(заданой) выводился массив привязанный к ней
Ребят, добрый день. Подошел к уроку массивов. Прочитал его. Вроде более менее стало понятно. Поставил перед собой такую задачку: создаю...

При вводе определенной буквы или символа-выводится какое-либо сообщение
Необходимо ввести допустим букву &quot;s&quot; после чего, вывод какого-либо сообщение


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru