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?

Code: Alles auswählen

If GetAsyncKeyState_(#VK_CONTROL) & 1<<16
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 :oops: , 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 :mrgreen:

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.