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).