delphi - 捕获鼠标消息 - Message.XPos 还是 Message.Pos.x?

标签 delphi delphi-xe7

我在编写自定义控件时遇到过几次这个问题,但今天再次遇到它,我觉得有必要问一下。

基本上,例如捕获时:

procedure WMLMouseDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;

要从过程中读取 X 和 Y 鼠标坐标,我们可以访问 Message.XPosMessage.Pos.x,两者均声明为 smallint.

是否有任何理由选择其中之一,或者它们基本上只是服务于相同的目的,因此归结为选择使用哪一个?

最佳答案

Message.XPosMessage.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;

因此,XPosPos.X 都从同一内存读取。使用其中之一取决于您的喜好。

关于delphi - 捕获鼠标消息 - Message.XPos 还是 Message.Pos.x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36605623/

相关文章:

delphi - 如何更改 ScrollBar 的宽度?

delphi - 允许多个子控件检测其父控件何时调整大小

Delphi VCL ShadowEffect 类似 FMX TShadowEffect

delphi - 将 TUnicodeString 转换为 TString?

delphi - 如何从特定文本中提取第一个字符串

delphi - 在运行时检测 GPU 是否支持 Pixel Shader 2.0 (Firemonkey)

delphi - 在代码编辑器中折叠 If-Then-Else 语句 (Delphi 2007)

delphi - 为什么我不能将过程变量与 nil 进行比较?

Delphi:找不到资源错误?

delphi - 将日期转换为年、月、日日期时间格式