我在编写自定义控件时遇到过几次这个问题,但今天再次遇到它,我觉得有必要问一下。
基本上,例如捕获时:
procedure WMLMouseDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
要从过程中读取 X 和 Y 鼠标坐标,我们可以访问 Message.XPos
或 Message.Pos.x
,两者均声明为 smallint
.
是否有任何理由选择其中之一,或者它们基本上只是服务于相同的目的,因此归结为选择使用哪一个?
最佳答案
Message.XPos
和 Message.Pos.x
在用法和含义上完全可以互换,因为它们是相同的。
所有这些 Message
参数都是 TWMMouse
类型,它是使用 variant part 的记录类型。在其声明中:
TWMMouse = record
Msg: Cardinal;
MsgFiller: TDWordFiller;
Keys: Longint;
KeysFiller: TDWordFiller;
case Integer of
0: (
XPos: Smallint;
YPos: Smallint;
XYPosFiller: TDWordFiller;);
1: (
Pos: TSmallPoint;
PosFiller: TDWordFiller;
Result: LRESULT);
end;
因此,XPos
和 Pos.X
都从同一内存读取。使用其中之一取决于您的喜好。
关于delphi - 捕获鼠标消息 - Message.XPos 还是 Message.Pos.x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36605623/