jak dokladnie działa GetKeyState

1

Pisze sobie taką "gierkę" i mam taki problem:
w petli sprawdzam czy klawisze Up down Left down są wcisnięte. Z tego co wiem jesli GetKeyState(VK_UP)<>0 to klawisz jest wcisnięty i moge "ruszac sie do przodu" ale jak go puszcze GetKeyState powinien zwrocic zero a ja stac w miejscu a tak sie nie dzieje. Musze wcisnac klawisz i go puscic by sie zatrzymac. W pomocy pisza za wazna sa takze wartosci poszczegolnych bitow zwracanych przez GetKeyState ale nie znam na tyle angielskiego by sie w tym polapac.

0

If the function succeeds, the return value specifies the status of the given virtual key. If the high-order bit is 1, the key is down; otherwise, it is up.

no wiec musisz zdaje sie sprawdzac najstarszy bit

0
if GetKeyState(VK_UP) < 0 then // wcisniety :)

Działa na 100%

0

Dzięki
sprawdzanie czy jest mniejsze dziala na 100 %.
Tylko teraz jestem glupi bo jak szukalem wczesniej w necie to wszyscy oganiczali sie tylko do sprawdzania <>. Ciekawe czemu?

1

GetKeyState zwraca wartość typu Integer, a dokładniej liczbę 32-bitową zapisaną w systemie uzupełnień do dwóch, gdzie najstarszy bit jest bitem znaku (1 - minus, 0 - plus). Dlatego też Integer ma zakres –2147483648..2147483647, a nie jak Cardinal (który też ma 32 bity) 0..4294967295, ponieważ właśnie ten jeden bit przeznacza się na znak i dlatego liczby są o połowe mniejsze, ale za to mogą być także ujemne.
Więc, jak tu już ktoś wyżej napisał, jeśli najstarszy bit to 1 (liczba ujemna) to znaczy, że przycisk jest wciśnięty.
Mam nadzieję, że nie pokręciłem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1