预计将显示与所选选项相对应的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,依此类推,但是当我单击它时什么也没有显示。
答案 0 :(得分:1)
我认为您正在使用FPC + Lazarus。
我可以重现您所描述的问题,但承认我对其原因感到困惑。
尝试以下操作:
确保正确设置Lazarus中的项目选项以包含mouse.pp
及其路径
两个包含文件mouseh.inc
和mouse.inc
。
在Mouse.pp的b:=PendingMouseEvents
的行SysGetMouseEvent
上放置调试器断点
编译并运行项目
当断点跳闸时,使用F8单步执行代码。
对我来说,b
的值始终为零。这是有点神秘的地方:
如果您搜索Mouse.PP的源代码和两个inc文件进行任何分配
到PendingMouseEvents
,唯一为其分配值的地方是SysInitMouse
和ClearMouseEventQueue
,在两种情况下,它都设置为零,即
这就是SysGetMouseEvent
从不退出并返回您的代码的原因。这就是您的case
语句从不执行的原因。
我不确定这是代码作者的疏忽还是什么。我认为 您应该尝试在拉撒路支持论坛https://forum.lazarus.freepascal.org/index.php
中提问据我所知,您正确使用了鼠标功能,但是它们无法正常工作。