GraphABC Обработчик событий нажатия кнопок мыши внутри цикла. Не работает - PascalABC.NET
Формулировка задачи:
Товарищи, подскажите. Уже весь мозг сломал. Проблема в следующем:
я использую модуль graphABC, который с помощью цикла (for, repeat, while - без разницы) выводит на экран какое-то изображение. Необходимо по нажатию либо клавиши с клавиатуры, либо кнопки мыши закончить этот цикл.
Чтобы было понятее, приведу тестовую программу:
То есть обработчик событий управляет процедурой MouseDown с 3 параметрами (x, y - координаты курсора, m - код нажатой кнопки мыши (0-не нажата, 1 - лкм, 2-пкм).
Если внутри данной процедуры нет цикла, то всё работает (например, если внутри этой процедуры будет какой-нибудь if m=2 then WriteLn('Нажата правая кнопка мыши'); То есть, программа запускается, срабатывает обработчик события нажатия кнопки мыши, который запускает процедуру MouseDown, внутри которой при условии, что нажата правая кнопка, будет выведено сообщение о нажатии правой кнопки). А вот если присутствует цикл, то пока он не завершится, не сможет сработать обработчик события нажатия кнопки мыши, и, соответственно, ничего не будет происходить.
И даже если внутри цикла добавить OnMouseDown := MouseDown, то это никак не изменит ситуацию...
Так как же мне сделать выход из цикла??
Решение задачи: «GraphABC Обработчик событий нажатия кнопок мыши внутри цикла. Не работает»
textual
Листинг программы
program Test; uses GraphABC; procedure Cicle(a, b, c:integer); begin halt; end; procedure MouseDown(x, y, m: integer); begin repeat MouseDown:=Cicle; SetPixel(round(random(600)), round(random(400)), clBlack); until false; end; begin OnMouseDown := MouseDown; end.
Объяснение кода листинга программы
- Объявлены три процедуры: Cicle, MouseDown, OnMouseDown.
- Cicle - не принимает аргументов, выполняет операцию
halt
. - MouseDown - принимает три аргумента (x, y, m), выполняет операцию
repeat
, которая зацикливает выполнение кода внутри себя, пока условие не станет ложным. - Внутри цикла
repeat
выполняется вызов функции Cicle с передачей ей аргументов (a, b, c). - После выполнения цикла
repeat
выполняется вывод пикселя на экран с помощью функции SetPixel, аргументами которой являются координаты x и y, а также цвет пикселя, заданный константой clBlack. - OnMouseDown - не принимает аргументов, устанавливает обработчик событий мыши на функцию MouseDown.
- Код не содержит вызовов функций Cicle, MouseDown, OnMouseDown, кроме их объявления.
- Значения переменных a, b, c, x, y, m не определены и не используются в коде.
- Значение переменной random не определено и не используется в коде.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д