Как я могу проверить, отпущена ли кнопка мыши, и ЗАТЕМ выполнить процедуру один раз в Borland Pascal 7.0?

Я использую Borland Pascal 7.0, и я хотел бы сделать игру в слоты (если 3 случайных числа совпадают, вы выиграли). Проблема в том, что когда я нажимаю кнопку запуска (Inditas) в меню, процедура выполняется много раз, пока я не отпущу кнопку мыши. Мне сказали, что я должен проверить, отпущена ли кнопка мыши, прежде чем выполнять процедуру один раз. Как я могу это сделать? Вот как выглядит меню:

procedure eger;
begin;
  mouseinit;
  mouseon;
  menu;
  repeat  
    getmouse(m);
    if (m.left) and (m.x>60) AND (m.x<130) and (m.y>120) and (m.y<150) then
      teglalap(90,90,300,300,blue);
    if (m.left) and (m.x>60) AND (m.x<130) and (m.y>160) and (m.y<190) then
      jatek(a,b,c,coin,coins);     

  until ((m.left) and (m.x>60) AND (m.x<130) and (m.y>240) and (m.y<270));
end;

Спасибо, Роберт


person Robert    schedule 04.04.2010    source источник
comment
Роберт, какие поля записи m?   -  person Nick Dandoulakis    schedule 04.04.2010
comment
Нас учили использовать его таким образом, я не знаю. Я предполагаю, что m.left и m.right являются логическими значениями, а m.x и m.y являются целыми числами или что-то в этом роде. Мы используем файл в программе с именем mymouse.tpu   -  person Robert    schedule 06.04.2010


Ответы (1)


Если модуль мыши не поддерживает ожидание щелчка мыши или что-то подобное,
вы можете имитировать поведение "кнопка отпущена" с помощью нескольких переменных-флагов.

Пример:

button_down := false; // 1
repeat
   button_released := false; // 2
   getmouse(m);
   // 3
   If m.left and not button_down Then button_down := true;
   If not m.left and button_down Then
   Begin
      button_released = true; 
      button_down := false;
   End;
   //
  if button_released and ... then ...
  if button_released and ... then ...
until (...);

(Я не знаю, что такое m.left, но я предполагаю, что это указывает на то, нажата левая кнопка или нет)

person Nick Dandoulakis    schedule 04.04.2010