Klick auf MenuTitle detektieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Klick auf MenuTitle detektieren

Beitrag von Daffy0815 »

Hallo,

wie kann man einen Klick auf einen Menütitel wie im folgenden Beispiel detektieren?
Ein rein horizontales Menü ohne "MenuItems".
Mit EventMenu gings irgendwie nicht.

Code: Alles auswählen

If OpenWindow(0, 200, 200, 300, 200, "Test")
    If CreateMenu(0, WindowID(0))
      MenuTitle("Erster Eintrag")
      MenuTitle("Zweiter Eintrag")
      MenuTitle("Dritter Eintrag")
    EndIf
    Repeat 
      
      
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Klick auf MenuTitle detektieren

Beitrag von RSBasic »

Ganz einfach:

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateMenu(0, WindowID(0))
    MenuItem(1, "Erster Eintrag")
    MenuItem(2, "Zweiter Eintrag")
    MenuItem(3, "Dritter Eintrag")
  EndIf
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Menu
      Select EventMenu()
        Case 1
          Debug "Erster Eintrag"
        Case 2
          Debug "Zweiter Eintrag"
        Case 3
          Debug "Dritter Eintrag"
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Klick auf MenuTitle detektieren

Beitrag von Daffy0815 »

Danke!

Die Verknüpfung mit dem Window in dem das Menü sich befindet muss man also in die Schleife "selbst" einbauen falls es mehrere Fenster mit solchen Menüs gibt.
Ich dachte man würde die Referenz über die ID des Menüs herstellen.

Also praktisch so:

Code: Alles auswählen

EnableExplicit

Define EventID
#WindowNum = 10
#MenuNum=20

If OpenWindow(#WindowNum, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateMenu(#MenuNum, WindowID(#WindowNum))
    MenuItem(1, "Erster Eintrag")
    MenuItem(2, "Zweiter Eintrag")
    MenuItem(3, "Dritter Eintrag")
  EndIf
 
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Menu
        If GetActiveWindow() = #WindowNum
          Select EventMenu()
            Case 1
              Debug "Erster Eintrag"
            Case 2
              Debug "Zweiter Eintrag"
            Case 3
            Debug "Dritter Eintrag"
        EndSelect
      EndIf
    EndIf  
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
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

Re: Klick auf MenuTitle detektieren

Beitrag von ts-soft »

Daffy0815 hat geschrieben:Ich dachte man würde die Referenz über die ID des Menüs herstellen.
Nein, über die WindowID() dahinter :wink:
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
Benutzeravatar
Daffy0815
Beiträge: 390
Registriert: 15.06.2005 00:44
Wohnort: 65719 Hofheim
Kontaktdaten:

Re: Klick auf MenuTitle detektieren

Beitrag von Daffy0815 »

Kann man in ein solches, rein horizontales Menü eigentlich auch einen Trenner einfügen?
MenuBar() zeigt hier keine Wirkung!

Gruß

Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Klick auf MenuTitle detektieren

Beitrag von RSBasic »

MenuBar() erstellt eine horizontale Linie zwischen zwei MenuItems in einem aufgeklappten Menü.
Bild

Ansonsten wenn kein MenuTitle() angegeben wird, dann wird ein Zwischenraum (vertikal) eingefügt.
Bild

Wie sieht dein Code aus und was möchtest du genau?
Wo soll ein Trenner eingefügt werden? Im aufgeklappten Menü oder direkt in der Menüzeile zwischen zwei MenuItems/MenuTitles?

PS: Das nächste Mal bitte einfach ein neues Thema eröffnen. Es hat nichts mehr mit dem Thema "Klick auf MenuTitle" zu tun! Denk bitte daran! Sonst wirds einfach unüberslichlich, wenn jemand im Forum was suchen möchte.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten