我是否正确使用了鼠标功能?

时间:2019-04-27 11:09:10

标签: click mouseevent pascal

预计将显示与所选选项相对应的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 个答案:

答案 0 :(得分:1)

我认为您正在使用FPC + Lazarus。

我可以重现您所描述的问题,但承认我对其原因感到困惑。

尝试以下操作:

  • 确保正确设置Lazarus中的项目选项以包含mouse.pp及其路径 两个包含文件mouseh.incmouse.inc

  • 在Mouse.pp的b:=PendingMouseEvents的行SysGetMouseEvent上放置调试器断点

  • 编译并运行项目

当断点跳闸时,使用F8单步执行代码。

对我来说,b的值始终为零。这是有点神秘的地方:

如果您搜索Mouse.PP的源代码和两个inc文件进行任何分配 到PendingMouseEvents,唯一为其分配值的地方是SysInitMouseClearMouseEventQueue,在两种情况下,它都设置为零,即 这就是SysGetMouseEvent从不退出并返回您的代码的原因。这就是您的case语句从不执行的原因。

我不确定这是代码作者的疏忽还是什么。我认为 您应该尝试在拉撒路支持论坛https://forum.lazarus.freepascal.org/index.php

中提问

据我所知,您正确使用了鼠标功能,但是它们无法正常工作。