2

我想用鼠标将一个对象在 X 和 Y 中对齐,以将其移动到位。我可以通过使用各种旋转控件(或按钮)来滚动解决方案,但它很混乱,我想知道是否有一个控件(如操纵杆)使用鼠标提供 2 轴控制并以不同的速率触发事件它的位置?

4

5 回答 5

3

Afaik Jedi(jedi apilib?)也有一个操纵杆头。是winapi,不是COM,所以不涉及TLB

于 2010-01-06T12:56:55.997 回答
3

试试NLDJoystick,这是我编写的一个基于纯 WinAPI (MMSystem.pas) 的开源组件。它可以从GitHub下载。

界面:

public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
published
  property AbsCenter;
  property AbsMax;
  property AbsMin;
  property Active default False;
  property Advanced default False;
  property AxisCount;
  property Axises;
  property ButtonCount;
  property HasPOV;
  property ID;
  property OnButtonDown;
  property OnButtonUp;
  property OnMove;
  property OnPOVChanged;
  property PollingInterval default 40;
  property RepeatButtonDelay default 350;
  property RepeatMoveDelay default 350;
  property SuspendScreensaver default False;
  property ThresholdFactor;
于 2011-10-25T14:29:52.637 回答
1

也许您可以自己制作类似的东西。

  1. 拿一个面板,并注册鼠标上、下和移动事件
  2. 在 MouseDown 上,设置一个布尔值 (fButtonDown),以便您知道鼠标按钮被按下并保存鼠标指针的 X 和 Y 坐标。
  3. 在 MouseMove 上,检查按钮是否按下 (fButtonDown) 并移动您的对象。您的鼠标光标从其保存的位置移动得越多,您移动的速度就越快。
  4. 在 MouseUp 上,将 fButtonDown 设置为 false

以上是非常原始的,但应该工作。

于 2010-01-06T15:18:26.070 回答
0

我在谷歌上搜索“操纵杆 dll”,发现无数。您可能可以将其中一个放入您的项目中,然后通过简单地为它编写一个 TLIB 标头(或任何它被称为的,有一段时间没有这样做)从 Delphi 访问它的 C API。

于 2010-01-06T09:58:29.527 回答
0

你可以使用一个 DelphiX 组件。据我所知,它们是 DirectX 的包装器,其中一个包装了 DirectX 操纵杆界面。它以 Delphi 风格包装,因此易于使用。

于 2010-01-06T10:25:02.637 回答