Seite 1 von 1
Tastenstatus im Fenster
Verfasst: 13.11.2006 20:38
von #NULL
ich will wissen ob eine taste zu einem bestimten zeitpunkt gedrückt ist, in meinem fall
Strg. was ist da der richtige weg?
ist das so akzeptabel, oder gibt es da eine Konstante, um auch wirklich nur den momentanen status zu erhalten?
[ja, ich könnte über #WM_KEYDOWN/UP-ereignisse auch ne flag benutzen.]
Verfasst: 13.11.2006 21:42
von Fluid Byte
ich will wissen ob eine taste zu einem bestimten zeitpunkt gedrückt ist, in meinem fall Strg. was ist da der richtige weg?
Es gibt keinen richtigen oder falschen Weg. Nimm das was am besten für dich funktioniert.
Die zwei naheliegendsten sind zum einem, wie du schon gesagt hast, GetAsyncKeyState_() oder die #WM_KEYDOWN Nachricht zu bearbeiten.
Code: Alles auswählen
OpenWindow(0,0,0,400,300,"untitled",#WS_OVERLAPPEDWINDOW | 1)
Repeat
EventID = WaitWindowEvent()
If #WM_KEYDOWN And EventwParam() = #VK_CONTROL
Debug "#WM_KEYDOWN"
EndIf
Until EventID = 16
Verfasst: 13.11.2006 22:01
von ts-soft
Fluid Byte hat geschrieben:
Es gibt keinen richtigen oder falschen Weg. Nimm das was am besten für dich funktioniert.
GetAsyncKeyState_() löst aber kein Ereignis aus, ist also in einem
vernünftigen EventLoop nicht zu gebrauchen.
Verfasst: 13.11.2006 23:31
von Fluid Byte
ts-soft hat geschrieben:GetAsyncKeyState_() löst aber kein Ereignis aus, ist also in einem vernünftigen EventLoop nicht zu gebrauchen.
Code: Alles auswählen
OpenWindow(0,0,0,400,300,"untitled",#WS_OVERLAPPEDWINDOW | 1)
Repeat
EventID = WaitWindowEvent()
If GetAsyncKeyState_(#VK_CONTROL)
Debug "#VK_CONTROL"
EndIf
Until EventID = 16
Wo ist das Problem?
Verfasst: 13.11.2006 23:36
von ts-soft
>> Wo ist das Problem?
Okay

, wußte nicht das WaitWindowEvent davon durchbrochen wird.
// Nachtrag:
Das Problem ist, das das Ereignis mehrfach angezeigt wird, besser wäre:
Code: Alles auswählen
OpenWindow(0,0,0,400,300,"untitled",#WS_OVERLAPPEDWINDOW | 1)
Repeat
EventID = WaitWindowEvent()
If EventID = #WM_KEYDOWN
If GetAsyncKeyState_(#VK_CONTROL)
Debug "#VK_CONTROL"
EndIf
EndIf
Until EventID = 16
So wird nur ein Ereignis angezeigt, aber man könnte gleich den ersten
Code nehmen

Verfasst: 14.11.2006 07:56
von #NULL
es ging mir nur darum, dass GetAsyncKeyState_(#VK_CONTROL) auch #true gibt, wenn die taste zwar nicht gedrückt ist, aber seit dem letzten aufruf der funktion gedrückt wurde. mich interessiert nur ersteres, also das most significant bit, und war nur unsicher, ob das mit dem 1<<16 zuverlässig ist.
danke euch.