Einzelnen Beitrag anzeigen

Benutzerbild von LDericher
LDericher

Registriert seit: 29. Jan 2007
Ort: Erkelenz
224 Beiträge
 
Delphi 7 Enterprise
 
#1

JoyStick - Position des Sticks "sensibel" abfragen

  Alt 2. Mai 2009, 15:24
Also,

Ich brauche eine JoyStick-Unterstützung für mein Programm, wie laut SuFu schon einige vor mir...
Habe mich mal ans MMSystem rangemacht und bin angenehm berrascht von der Einfachheit der Lösung. Hab mir auch gleich mal eine Klasse geschrieben, die alles kann, was ich brauche.

Na ja, FAST alles

Problem: Folgendermaßen lädt sich meine Klasse alle Stati von Buttons/Achsen rein:
Delphi-Quellcode:
function GetState(JoyID:Cardinal; Device:TJoyInfoEx; DeviceInfo:TJoyCaps; Mode:integer):TAllState;
begin
if(DeviceInfo.wCaps and JOYCAPS_HASZ) <> 0
  then Device.dwSize := sizeof(TJoyInfoEx);
Device.dwFlags := Mode;
JoygetposEx(JoyID, @Device);
Result.AxisState:=GetAllAxis(Device, DeviceInfo);
Result.ButtonState:=GetAllButtons(Device, DeviceInfo);
end;
Allerdings sind meine Achsenstati immer nur 0, 32267 oder 65535; diese Ergebnisse muss ich dann ja als vollen Ausschlag interpretieren.

Nun hätte ich aber gern eine Lösung, die die Achsen etwas sensibler abfragt, und z.B. das volle Spektrum 0..65535 ausnutzt. wobei die "Grundpositionen" Links, Mitte, Rechts gleichbleiben, oder eben vergleichbar.

(Am Ende will ich die Rückgabewerte auf den Bereich -100..100 begrenzen, sodass ich den Mauszeiger anhand der Fensterbreite und -höhe und des Rückgabewerts setzen kann, den Part übernehme dann aber ich )

Wenn irgendwie möglich, will ich auf weitere DLLs/Module in meinem Programm verzichten, lasse mich aber auch umstimmen, falls unmöglich.

BTW: Ich weiß, dass die von mir gewollte Abfrage möglich ist; siehe dazu Systemsteuerung/Gamecontroller: Da wird das Kreuz auch relativ zum Stickausschlag gesetzt.

Falls es Unklarheiten an der Fragestellung geben sollte, postet das als Feedback, damit ich mich genauer ausdrücken kann.

Danke im Voraus,
Euer LDer.

Edit: Zur Belohnung gibts hier dann meine - fertige - Klasse als Open-Source !
  Mit Zitat antworten Zitat