AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia DirectX - Input ( DelphiX ) funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

DirectX - Input ( DelphiX ) funktioniert nicht

Ein Thema von Cicaro · begonnen am 11. Okt 2011 · letzter Beitrag vom 11. Okt 2011
Antwort Antwort
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#1

DirectX - Input ( DelphiX ) funktioniert nicht

  Alt 11. Okt 2011, 11:19
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.
Angehängte Dateien
Dateityp: zip DX-input_test.zip (219,4 KB, 8x aufgerufen)

Geändert von Cicaro (11. Okt 2011 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: DirectX - Input ( DelphiX ) funktioniert nicht

  Alt 11. Okt 2011, 14:09
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#3

AW: DirectX - Input ( DelphiX ) funktioniert nicht

  Alt 11. Okt 2011, 19:52
Und eine Lösung des Problems gibt's nicht ?
Kann doch nicht sein, dass DirectX Input immer nur halbwegs funktioniert hat ...
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: DirectX - Input ( DelphiX ) funktioniert nicht

  Alt 11. Okt 2011, 20:11
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
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Cicaro

Registriert seit: 9. Feb 2005
285 Beiträge
 
Delphi 7 Personal
 
#5

AW: DirectX - Input ( DelphiX ) funktioniert nicht

  Alt 11. Okt 2011, 20:33
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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