Thema: Key abfrage

Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#10

Re: Key abfrage

  Alt 6. Okt 2008, 13:13
Hallo,
Zitat von Roachford:
Das ist nett - einfach programmieren, klappt derzeit. Schick. Und was die Funktion zurück gibt ist auch unbedeutend? Klasse, deine Programme sorgen bestimmt für Heiterkeit bei den Abnahmen...

Zur Klärung einfach mal die Dokumentation anschauen und nicht einfach nur kopieren...

MSDN: GetAsyncKeyState()
If the most significant bit is set, the key is down, and if the least significant bit is set, the key was pressed after the previous call to GetAsyncKeyState. However, you should not rely on this last behavior; for more information, see the Remarks.


Mit anderen Worten: Teste Bit 15 wenn du den aktuellen Tastenstatus haben willst, teste Bit 0, wenn du wissen willst, ob die Taste seit dem letzten Aufruf gedrückt wurde.

Aktueller Status:
if GetAsyncKeyState(VK_UP) and 128 = 128 then Status seit letztem Aufruf:
if GetAsyncKeyState(VK_UP) and 1 = 1 then Dein Code funktioniert bisher, weil du alle Bits des unteren Nibbles ausmaskiert hast und da ist Bit 0 mit drin. Da MSDN aber nur Bit 0 definiert, verlässt du dich auf das undokumentierte Verhalten, dass alle anderen Bits 0 sind.

Ansonsten kann natürlich bei einem AND 15 auch 1 rauskommen, ich war bei der Umrechnung mit der 16 verrutscht. Dezimale Angaben sind meist etwas schwerer handlebar bei Bitmasken, da gelobe ich mir lieber hexadezimale Angaben, da sieht man sowas eher.
mir ging es um nicht mehr, als festzustellen, dass die Funktion in Windows.pas definiert ist und somit für Delphi zur Verfügung steht und dass ein billiges "abschreiben" des im ersten Post geschriebenen Quelltextes zu einem Ergebnis führt, ob und in welchem Umfang dies jetzt für eine beliebige sinnvolle Verwendung geeignet ist, steht auf einem anderen Blatt.

Für die "erweiterte" Fragestellung von Emil scheint es jedenfalls nicht geeignet zu sein.

PS.: Mein Code bestand genau aus der hier geposteten Zeile, die Funktion habe ich ansonsten bisher noch nicht benötigt.
  Mit Zitat antworten Zitat