【问题标题】:Setting the mouseposition in a crossplatform way with Firemonkey 2 (FMX2)使用 Firemonkey 2 (FMX2) 以跨平台方式设置鼠标位置
【发布时间】:2012-10-17 23:30:46
【问题描述】:

在 Firemonkey 2 (FMX2) 中有接口

IFMXMouseService = 接口(IInterface) ['{2370205F-CF27-4DF6-9B1F-5EBC27271D5A}']

界面只有一个 GetMousePos 函数。 但是如何以跨平台方式设置鼠标位置? 有什么想法吗?

我想出的最好的想法是进行有条件的编译,直到 FMX 中存在这种可能性 - 但我不知道如何通过 Delphi 为 MACOSX 设置鼠标位置。 如有任何帮助,我将不胜感激。

【问题讨论】:

  • 我一辈子都想不通你为什么要设置鼠标的位置。如果您尝试单击另一个应用程序中的某些控件,则有一些方法可以这样做,而不会弄乱用户的鼠标位置。 (例如查找/获取控件的句柄并向其发送 Windows 消息。)
  • 嗨,马里安。 GUI自动化不是我想设置鼠标位置的原因。嘿 - 甚至 winapi 也有这样做的功能 - 所以我显然不是唯一想要它的人。我想在控件以动画方式关闭和打开时调整鼠标位置。例如:如果我将鼠标移出控件 1,它的宽度会减小,并且所有其他控件都向左移动。如果我无法将鼠标位置设置为宽度增量的左侧,则用户将始终必须手动将鼠标移回左侧。所以我真的很想在win和mac上设置鼠标位置。
  • 啊,好吧,我从来没有想到过这种情况。一定是因为我倾向于避免动画(和声音)。可能是老式的,但是嘿,我喜欢我的东西放在一个地方:-)
  • 我明白你的意思。我哥哥告诉我的第一件事是一样的。确实是必须作为选项提供的功能之一。我的第一印象也是它可能会在一开始就打扰用户。但特别是在较小分辨率的屏幕上,它提供了很大的好处。

标签: macos delphi firemonkey


【解决方案1】:

这是您需要的程序。您必须将 macapi.coregraphics 和 macapi.cocoatypes 添加到您的 uses 子句中。

procedure setmousepos(x,y:single);

var aNSPoint:NSPoint;

begin
  aNSPoint.x:=x;
  aNSPoint.y:=y;
  CGWarpMouseCursorPosition(aNSPoint);
end;

您当然可以传递一个 TPointF 来代替 X,Y,但您仍然需要分别设置 NSPoint X 和 Y,因为 NSPoint 与 TPointF 不同。

问候

戴夫·彼得斯
DP 软件
www.dpsoftware.com/firemonkey

【讨论】:

  • 嗨 - 我接受这个答案,因为它解决了 MAC-native 方式的问题 - 但在 FMX2 中实现功能的正确方法是使用 IFMXCursorrService 。有一个 setcursor 函数。这可能是因为不能通过鼠标设备设置光标。
  • @RolandKossow 你做了所有艰苦的工作来引用接口名称和查找函数名称,但完全忽略了那里使用的类型是 TCursor 的事实:它获取并设置光标(图标) ... 鼠标光标。不是职位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多