预计显示对应于已选择的选项的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,依此类推,但单击它时没有显示任何内容。
我假设你正在使用FPC + Lazarus。
我可以重现你描述的问题,但承认我对它的原因感到困惑。
请尝试以下方法:
mouse.pp
及其两个包含文件mouseh.inc
和mouse.inc
的路径。b:=PendingMouseEvents
行SysGetMouseEvent
上放置一个调试器断点当断点跳闸时,使用F8单步执行代码。
对我来说,b
的值始终为零。这是有点神秘的地方:
如果您搜索Mouse.PP的源代码和两个inc文件以获得PendingMouseEvents
的任何赋值,则为其分配值的唯一位置是SysInitMouse
和ClearMouseEventQueue
,在这两种情况下,它设置的值为零,这就是为什么SysGetMouseEvent
永远不会退出并返回您的代码。这就是你的case
声明永远不会执行的原因。
我不确定这是否是代码作者的疏忽或者是什么。我想你应该尝试在Lazarus支持论坛上问https://forum.lazarus.freepascal.org/index.php
据我所知,您正在使用鼠标功能,但它们无法正常工作。