我正确使用鼠标功能吗?

问题描述 投票:1回答:1

预计显示对应于已选择的选项的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,依此类推,但单击它时没有显示任何内容。

click mouseevent pascal
1个回答
1
投票

我假设你正在使用FPC + Lazarus。

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

请尝试以下方法:

  • 确保Lazarus中的项目选项设置正确,以包括mouse.pp及其两个包含文件mouseh.incmouse.inc的路径。
  • 在Mouse.pp中的b:=PendingMouseEventsSysGetMouseEvent上放置一个调试器断点
  • 编译并运行项目

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

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

如果您搜索Mouse.PP的源代码和两个inc文件以获得PendingMouseEvents的任何赋值,则为其分配值的唯一位置是SysInitMouseClearMouseEventQueue,在这两种情况下,它设置的值为零,这就是为什么SysGetMouseEvent永远不会退出并返回您的代码。这就是你的case声明永远不会执行的原因。

我不确定这是否是代码作者的疏忽或者是什么。我想你应该尝试在Lazarus支持论坛上问https://forum.lazarus.freepascal.org/index.php

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

© www.soinside.com 2019 - 2024. All rights reserved.