Я правильно использую функции мыши? - PullRequest
1 голос
/ 27 апреля 2019

Ожидается, что будет отображаться 1/2/3, соответствующая выбранной опции, но при нажатии на нее ничего не отображается. Это проблема кодирования или что-то еще?

Я пытался использовать getmouseY . Тем не менее, ничего не появляется.

uses
  mouse;
var
  event : tmouseevent;
  check : boolean;
begin
  initmouse;
  write('Option 1 ');
  write('Option 2 ');
  writeln('Option 3');
  check := true;
  repeat
    getmouseevent(event);
    if (event.buttons=mouseleftbutton) and (event.action=mouseactiondown) then
      case getmouseX of
        0..8 : writeln('1');
        10..17 : writeln('2');
        19..26 : writeln('3');
      end;
  until not(check);
end.

Должен отображаться 1 при нажатии на опцию 1 и 2 при нажатии на опцию 2 и т. Д., Но при нажатии на нее ничего не отображается.

1 Ответ

1 голос
/ 27 апреля 2019

Я предполагаю, что вы используете FPC + Lazarus.

Я могу воспроизвести описанную вами проблему, но, признаюсь, я озадачен ее причиной.

Попробуйте следующее:

  • Убедитесь, что параметры проекта в Lazarus установлены правильно и включают пути к mouse.pp и двум его файлам включения mouseh.inc и mouse.inc.

  • Putточка останова отладчика на линии b:=PendingMouseEvents из SysGetMouseEvent в Mouse.pp

  • Скомпилируйте и запустите проект

Когда срабатывает точка останова, используйте F8, чтобы пошагово пройти по коду.

Для меня значение b всегда равно нулю.Вот где он становится немного загадочным:

Если вы ищете исходный код Mouse.PP и два файла inc для любого присвоения PendingMouseEvents, единственное место, которому присваивается значение, это SysInitMouseи ClearMouseEventQueue, и в обоих случаях его значение равно нулю, поэтому SysGetMouseEvent никогда не завершается и не возвращается к вашему коду.Вот почему ваш оператор case никогда не выполняется.

Я не уверен, является ли это упущением со стороны авторов кода или как.Я думаю, вы должны попытаться спросить на форуме поддержки Lazarus, https://forum.lazarus.freepascal.org/index.php

Насколько я понимаю, вы используете функции мыши правильно, но они просто не работают должным образом.

...