Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#21
  Alt 20. Jun 2003, 12:10
Moin Stefano,

Zitat von Stefano:
Wenn die Taste gedrückt wird, kommt ganz normal 0, aber wenn man sie loslässt 128. Warum?
Bei dem Feld Flags handelt es sich um ein Bitfield, dass heisst:
Um an die verschiedenen enthaltenen Informationen zu gelangen, muss man die jeweils interessanten Bits ausmaskieren.
Ausmaskieren heisst: Alle Bits bis auf das zu prüfende (oder die zu prüfenden) werden auf 0 gesetzt.

Zitat von MSDN:
7
Specifies the transition state. The value is 0 if the key is pressed and 1 if it is being released.
Bit 7 (die Bits werden von rechts nach links, nullbasiert, durchnummeriert) gibt den Transistion State wieder.
Um nur dieses zu erhalten, und die anderen auf 0 zu setzen, muss das Feld Flags mit einem Wert logisch und (AND) verknüpft werden, der nur an dieser Stelle eine 1 enthält (Hex: 00000080).
Da LLKHF_UP dieses tun soll, gehe ich mal davon aus, dass es den genannte Wert enthält.

Delphi-Quellcode:
if (flag and LLKHF_UP) = LLKHF_UP then // Taste wurde losgelassen
                                  else // Taste wurde gedrückt
Jetzt klärt sich wohl auch das pendeln zwischen 0 und 128. 80 Hex ist 128 Dezimal (16*8)

Dieses ausmaskieren von Bits findest Du an vielen Stellen, z.B. auch bei den FileAttributes wenn Du FindFirst verwendest (faDirectory wäre beispielsweise so eine Maske).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat