Seite 1 von 1
"Enter" im Windows-Fenster
Verfasst: 19.06.2006 21:19
von Stromberg
Hi,
vorher: ich habe die Suche im Forum benutzt, da ich ziemlich sicher war, dass die Frage schon mehrfach geklärt wurde, aber ich bin einfach nicht fündig geworden - habe sicher was überlesen.
Wie dem auch sei, ich habe folgendes Problem: Ich habe ein Window, in dem ich mehrere Elemente habe. Über einen Button wird eine bestimmte Aktion ausgelöst - was auch funktioniert. Nun möchte ich, dass diese Aktion auch über einen Druck auf die Enter-Taste gestartet wird.
Gibt es eine Möglichkeit das Drücken einer bestimmten Taste mit dem Mausklick auf einen bestimmten Button gleichzusetzen?
Danke im Voraus!
Verfasst: 19.06.2006 21:25
von Jilocasin
über das Menü -> "AddKeyboardShortcut(#Window, Shortcut, Event)"
Verfasst: 19.06.2006 21:29
von ts-soft
Code: Alles auswählen
AddKeyboardShortcut(#Window, #PB_Shortcut_Return, MenuItemID)
löst aber ein MenuEvent und kein GadgetEvent aus, aber wenn dort dasselbe steht, ist der effekt gleich. Ansonsten reagieren nur Dialogfenster auf Return, die man in PB nicht unmittelbar erstellen kann.
Verfasst: 19.06.2006 21:37
von Stromberg
Danke Jilocasin und ts-soft!
Wäre ich alleine nicht drauf gekommen.

Verfasst: 20.06.2006 08:57
von Shardik
Im folgenden Beispielprogramm kann eine Schaltfläche sowohl durch Anklicken mit der linken Maustaste als auch durch Drücken der <Enter>-Taste ausgewählt werden. Der Wechsel zwischen verschiedenen Schaltflächen über die Tastatur kann mit der <Tab>-Taste vorgenommen werden.
Code: Alles auswählen
#WindowHeight = 100
#WindowWidth = 200
If OpenWindow(1, 0, 0, #WindowWidth, #WindowHeight, "Button-Auswahl mit <Enter>", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
If CreateGadgetList(WindowID(1))
For i = 1 To 3
ButtonGadget(i, 30, i * 30 - 20, #WindowWidth - 60, 20, "Button " + Str(i))
Next i
SetActiveGadget(1)
Repeat
WindowEventID = WaitWindowEvent()
Select WindowEventID
Case #PB_Event_Gadget
Debug "Button " + Str(EventGadget()) + " wurde angeklickt."
Case #WM_KEYUP
If EventwParam() = 13
Debug "Button " + Str(GetActiveGadget()) + " wurde mit <Enter> ausgewählt."
EndIf
EndSelect
Until WindowEventID = #PB_Event_CloseWindow
EndIf
EndIf
Verfasst: 20.06.2006 15:27
von Stromberg
Danke für die Antwort, Shardik.
Darf ich fragen, welche Funktion die Konstante #WM_KEYUP erfüllt?
Verfasst: 20.06.2006 15:38
von edel
das WM_KEYUP Event wird durch das loslassen einer Taste ausgeloest.
siehe Win32 Api
Verfasst: 20.06.2006 15:42
von Stromberg
Ah, das macht natürlich Sinn. Ich habe bei KEYUP zuerst an die "PFEILHOCH"-Taste gedacht.
Danke.

Verfasst: 20.06.2006 15:42
von Shardik
Darf ich fragen, welche Funktion die Konstante #WM_KEYUP erfüllt?
#WM_KEYUP ist ein Konstantenwert für ein Windows-Ereignis, das durch das Loslassen einer Taste ausgelöst wird.
Diese Aktion kann über WindowEvent() oder WaitWindowEvent() entdeckt und ausgewertet werden. Genauso wie das Anklicken eines Gadgets das Ereignis #PB_Event_Gadget auslöst, wonach dann mittels EventGadget() das angeklickte Gadget ermittelt werden kann, kann das Loslassen einer Taste mit #WM_KEYUP entdeckt werden, wobei dann der ASCII-Code der losgelassenen Taste in EventwParam() übergeben wird.
Der Nachteil der Verwendung von Windows-Konstanten und Windows-Programmierschnittstellen liegt darin, daß der Code nicht mehr ohne weiteres nach Linux oder MAC OS X portiert werden kann.