Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   DirectX - Input ( DelphiX ) funktioniert nicht (https://www.delphipraxis.net/163677-directx-input-delphix-funktioniert-nicht.html)

Cicaro 11. Okt 2011 10:19

DirectX - Input ( DelphiX ) funktioniert nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo.

Also ich hab folgendes Problem: Solbald ich DirectInput initialisiere und abfrage, kann ich unter anderem die rechte Maustaste nicht abfragen. Linke Taste und Mausbewegung kann registiert werden jedoch nicht die rechte. Weiß jemand warum ? Ich teste das ganze gerade auf Win7 64bit und benutze DelphiX für Delphi 7. Ich tue mein test Projekt (extrem simpel) dazu damit ihr es euch anschauen könnt.

Falls jemand DirectX verwendet und die rechte Maustaste MIT DirectInput ohne Probleme abfragen kann, ein einfaches Beispielprojekt mit Angabe der DelphiX version (Quelle) oder der passenden Unit/Header-Datei für die DirectInput imports wäre sehr nett.

Siehe Anhang mein Beispielprojekt mit dem Problem. Das Fenster zeigt in der Überschrift (Caption) in welchem Zustand die Maus sich befindet.
// edit: X und Y sind die Bewegung der Maus, Z zeigt die Aktivität des Mausrads, Buttons: 1. Zahl zeigt die linke Maustaste an, der Rest bewegt sich nicht.

Medium 11. Okt 2011 13:09

AW: DirectX - Input ( DelphiX ) funktioniert nicht
 
Von der Verwendung von DI für Maus und Tastatureingaben wird seitens MS "höchstpersönlich" abgeraten, man solle besser auf die üblichen Messagegebundenen Events aufsetzen, bzw. mit GetAsyncKeystate() arbeiten. Die Quelle zu dieser Info ist leider schon aus meinem Fav-Ordner verschwunden, aber ich hatte das imho schon mal hier in der DP irgendwann verlinkt. Dort stand u.a. auch warum man davon abrät. DI sollte wenn überhaupt, ausschließlich für "exotischere" Inputmethoden wie Joysticks/-Pads usw. genommen werden.

Cicaro 11. Okt 2011 18:52

AW: DirectX - Input ( DelphiX ) funktioniert nicht
 
Und eine Lösung des Problems gibt's nicht ?
Kann doch nicht sein, dass DirectX Input immer nur halbwegs funktioniert hat ...

Medium 11. Okt 2011 19:11

AW: DirectX - Input ( DelphiX ) funktioniert nicht
 
Da ich DI schon immer eher ignoriert habe, kann ich das nicht sagen. Was ich ausdrücken wollte war: Steck die Zeit besser in einen Austausch zum "richtigen" System, statt sie auf die Problemlösung zu verwenden, die einen bekanntermaßen nicht optimalen Ansatz zur Folge hat. Und doch, DI war schon immer problembehaftet und eher ein Stiefkind in der DX API - verflixt ich find den Link nicht mehr! War imho ein Blogeintrag eines MS Mitarbeiters, der das näher ausgeführt hat :(

Cicaro 11. Okt 2011 19:33

AW: DirectX - Input ( DelphiX ) funktioniert nicht
 
Naja gut. Ich hab die Lösung gefunden. Die DI Programmierung scheint tatsächlich schlecht gewesen zu sein, da die Lösung des Problems wenig Sinn macht.

Also was falsch war (in DelphiX):
Code:
TMouseState = record
    X, Y, Z: Integer;
    Buttons: array[0..3] of Byte;
end;
Hier sind 16 Bytes in der Datenstruktur und die letzten 3 Bytes werden nicht gesetzt, wenn man diese durch das DI Objekt aktualisieren lässt (darunter das Byte für rechte Maustaste und mittlere Maustaste).

Richtig: (es sollte unter Umständen eine TMouseState2 zu finden sein, die könnte ebenfalls weiterhelfen)
Code:
TMouseState = record
    X, Y, Wheel: Integer;
    LButton, RButton, MButton: Byte;
    Reserved: array[0..4] of Byte;
end;
Hier sind es 20 Bytes, von denen die letzten 5 ignoriert werden können (bei 3 Tasten-Mäusen). Ich habe die Bytes auch etwas umbenannt. Aber die Änderung ist nur, dass sich 4 Bytes mehr in der Datenstruktur befinden. Wie gesagt, das ergibt keinen echten Sinn für mich. Also wer ebenfalls auf das Problem mit der Maus in DI stößt, das war die Lösung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz