"Enter" im Windows-Fenster

Anfängerfragen zum Programmieren mit PureBasic.
Stromberg
Beiträge: 20
Registriert: 04.06.2006 22:35
Kontaktdaten:

"Enter" im Windows-Fenster

Beitrag 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!
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

über das Menü -> "AddKeyboardShortcut(#Window, Shortcut, Event)"
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Stromberg
Beiträge: 20
Registriert: 04.06.2006 22:35
Kontaktdaten:

Beitrag von Stromberg »

Danke Jilocasin und ts-soft!


Wäre ich alleine nicht drauf gekommen. :)
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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
Stromberg
Beiträge: 20
Registriert: 04.06.2006 22:35
Kontaktdaten:

Beitrag von Stromberg »

Danke für die Antwort, Shardik.

Darf ich fragen, welche Funktion die Konstante #WM_KEYUP erfüllt?
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

das WM_KEYUP Event wird durch das loslassen einer Taste ausgeloest.

siehe Win32 Api
Stromberg
Beiträge: 20
Registriert: 04.06.2006 22:35
Kontaktdaten:

Beitrag von Stromberg »

Ah, das macht natürlich Sinn. Ich habe bei KEYUP zuerst an die "PFEILHOCH"-Taste gedacht.

Danke. :)
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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.
Antworten