是否有德尔福的“操纵杆”控件?
我想通过使用鼠标将它移动到位置来对齐X和Y中的对象。我可以通过使用各种旋转控件(或按钮)来滚动一个解决方案,但它很混乱,我不得不想知道是否有一个控制器 - 例如操纵杆 - 它使用鼠标提供了2轴控制,并以不同的速率触发事件它的位置?是否有德尔福的“操纵杆”控件?
Afaik Jedi(jedi apilib?)也有一个摇杆头。它是winapi,而不是COM,所以没有TLB参与
这就是我一直在寻找的感谢。 – 2010-01-06 16:38:15
我谷歌搜索“操纵杆DLL”,发现无数。您可以将其中的一个引入到您的项目中,然后通过简单地编写一个TLIB头文件(或者其它所谓的函数,暂时没有这样做)来访问Delphi的C API。
TLB用于COM,而不是普通的程序winapi。 – 2010-01-06 12:57:49
对,你确定。我记得有一个用来在C代码中声明过程的Pascal头文件,但我忘记了它们的正确名称。 – 2010-01-06 13:28:33
您可以使用DelphiX组件。据我所知,它们是DirectX的包装器,其中一个包装DirectX操纵杆接口。它以Delphi风格包装,因此易于使用。
也许你可以自己做类似的东西。
- 采取面板,并在鼠标注册向上,向下和移动事件
- 上的MouseDown,设置一个布尔(fButtonDown),所以你知道mousebutton按下并保存X和的MousePointer的Y坐标。
- 在MouseMove上,检查按钮是否关闭(fButtonDown)并移动对象。你的mousecursor从其保存的位置移动的越多,移动的速度就越快。
- 上的MouseUp,设置fButtonDown假
以上是非常简陋,但应该工作。
是的,它很诱人,谢谢。 – 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;
你有没有考虑让使用箭头键来微调您的目标的位置(如在Word,Photoshop中,等等)? – 2010-01-06 09:45:33
是的,这就是目前的做法,但当你靠近时,当然没有“好”的动作。 – 2010-01-06 16:36:27