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.

Объяснение кода листинга программы

  1. Объявлены три процедуры: Cicle, MouseDown, OnMouseDown.
  2. Cicle - не принимает аргументов, выполняет операцию halt.
  3. MouseDown - принимает три аргумента (x, y, m), выполняет операцию repeat, которая зацикливает выполнение кода внутри себя, пока условие не станет ложным.
  4. Внутри цикла repeat выполняется вызов функции Cicle с передачей ей аргументов (a, b, c).
  5. После выполнения цикла repeat выполняется вывод пикселя на экран с помощью функции SetPixel, аргументами которой являются координаты x и y, а также цвет пикселя, заданный константой clBlack.
  6. OnMouseDown - не принимает аргументов, устанавливает обработчик событий мыши на функцию MouseDown.
  7. Код не содержит вызовов функций Cicle, MouseDown, OnMouseDown, кроме их объявления.
  8. Значения переменных a, b, c, x, y, m не определены и не используются в коде.
  9. Значение переменной random не определено и не используется в коде.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5