2010-01-06 37 views
2

我想通過使用鼠標將它移動到位置來對齊X和Y中的對象。我可以通過使用各種旋轉控件(或按鈕)來滾動一個解決方案,但它很混亂,我不得不想知道是否有一個控制器 - 例如操縱桿 - 它使用鼠標提供了2軸控制,並以不同的速率觸發事件它的位置?是否有德爾福的「操縱桿」控件?

+3

你有沒有考慮讓使用箭頭鍵來微調您的目標的位置(如在Word,Photoshop中,等等)? – 2010-01-06 09:45:33

+0

是的,這就是目前的做法,但當你靠近時,當然沒有「好」的動作。 – 2010-01-06 16:36:27

回答

3

Afaik Jedi(jedi apilib?)也有一個搖桿頭。它是winapi,而不是COM,所以沒有TLB參與

+0

這就是我一直在尋找的感謝。 – 2010-01-06 16:38:15

0

我谷歌搜索「操縱桿DLL」,發現無數。您可以將其中的一個引入到您的項目中,然後通過簡單地編寫一個TLIB頭文件(或者其它所謂的函數,暫時沒有這樣做)來訪問Delphi的C API。

+0

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

+0

對,你確定。我記得有一個用來在C代碼中聲明過程的Pascal頭文件,但我忘記了它們的正確名稱。 – 2010-01-06 13:28:33

0

您可以使用DelphiX組件。據我所知,它們是DirectX的包裝器,其中一個包裝DirectX操縱桿接口。它以Delphi風格包裝,因此易於使用。

1

也許你可以自己做類似的東西。

  1. 採取面板,並在鼠標註冊向上,向下和移動事件
  2. 上的MouseDown,設置一個布爾(fButtonDown),所以你知道mousebutton按下並保存X和的MousePointer的Y座標。
  3. 在MouseMove上,檢查按鈕是否關閉(fButtonDown)並移動對象。你的mousecursor從其保存的位置移動的越多,移動的速度就越快。
  4. 上的MouseUp,設置fButtonDown假

以上是非常簡陋,但應該工作。

+0

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

2

嘗試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;