Есть ли у Delphi джойстик? - PullRequest
2 голосов
/ 06 января 2010

Я бы хотел выровнять объект по осям X и Y, используя мышь, чтобы переместить его в нужное положение. Я могу свернуть решение, используя различные элементы управления вращением (или кнопки), но это грязно, и мне стало интересно, есть ли элемент управления - например, джойстик - который обеспечивает 2-осевое управление с помощью мыши и запускает события со скоростью, которая варьируется в зависимости от его позиция?

Ответы [ 5 ]

3 голосов
/ 06 января 2010

Афайк Джедай (джедай апилиб?) Тоже имел заголовок джойстика. Это winapi, а не COM, поэтому TLB не задействован

2 голосов
/ 25 октября 2011

Попробуйте NLDJoystick , компонент с открытым исходным кодом, написанный мной и основанный на чистом WinAPI (MMSystem.pas). Его можно загрузить с сервера SVN здесь .

Интерфейс:

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;
1 голос
/ 06 января 2010

Может быть, вы можете сделать что-то подобное самостоятельно.

  1. Возьмите панель и зарегистрируйте мышь вверх, вниз и переместите события
  2. В MouseDown установите логическое значение (fButtonDown), чтобы вы знали, что нажата кнопка мыши, и сохраните координаты X и Y указателя мыши.
  3. В MouseMove проверьте, нажата ли кнопка (fButtonDown), и переместите ваш объект. Чем больше курсор мыши перемещается из сохраненного положения, тем быстрее вы двигаетесь.
  4. В MouseUp установите для fButtonDown значение false

Вышеприведенное очень примитивно, но должно работать.

0 голосов
/ 06 января 2010

Вы можете использовать компоненты DelphiX. Они - обертки для DirectX, и один из них, насколько я помню, оборачивается вокруг интерфейса джойстика DirectX. Он упакован в стиле Delphi, поэтому его легко использовать.

0 голосов
/ 06 января 2010

Я гуглил по "джойстику dll" и нашел бесчисленное множество. Вы, вероятно, можете добавить один из них в свой проект, а затем получить доступ к его C API из Delphi, просто написав для него заголовок TLIB (или как он там еще не назывался)

...