是否有德尔福的“操纵杆”控件?

问题描述:

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

+3

你有没有考虑让使用箭头键来微调您的目标的位置(如在Word,Photoshop中,等等)? – 2010-01-06 09:45:33

+0

是的,这就是目前的做法,但当你靠近时,当然没有“好”的动作。 – 2010-01-06 16:36:27

Afaik Jedi(jedi apilib?)也有一个摇杆头。它是winapi,而不是COM,所以没有TLB参与

+0

这就是我一直在寻找的感谢。 – 2010-01-06 16:38:15

我谷歌搜索“操纵杆DLL”,发现无数。您可以将其中的一个引入到您的项目中,然后通过简单地编写一个TLIB头文件(或者其它所谓的函数,暂时没有这样做)来访问Delphi的C API。

+0

TLB用于COM,而不是普通的程序winapi。 – 2010-01-06 12:57:49

+0

对,你确定。我记得有一个用来在C代码中声明过程的Pascal头文件,但我忘记了它们的正确名称。 – 2010-01-06 13:28:33

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

也许你可以自己做类似的东西。

  1. 采取面板,并在鼠标注册向上,向下和移动事件
  2. 上的MouseDown,设置一个布尔(fButtonDown),所以你知道mousebutton按下并保存X和的MousePointer的Y坐标。
  3. 在MouseMove上,检查按钮是否关闭(fButtonDown)并移动对象。你的mousecursor从其保存的位置移动的越多,移动的速度就越快。
  4. 上的MouseUp,设置fButtonDown假

以上是非常简陋,但应该工作。

+0

是的,它很诱人,谢谢。 – 2010-01-06 16:37:43

尝试NLDJoystick,我写的基于纯WinAPI(MMSystem.pas)的开源组件。它可以从SVN服务器here下载。

接口:

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;