Seite 1 von 2

PopUp-Menu bei Systray

Verfasst: 14.08.2006 21:52
von Mok
Ganz kurz meine Frage: (Hab nämlich keine Zeit)
Wie kann ich das machen, wenn man rechtsklickt auf ein Systray-Symbol, dass sich dann ein PopUp-Menü öffnet :?:

Re: PopUp-Menu bei Systray

Verfasst: 14.08.2006 22:35
von Kiffi
Mok hat geschrieben:Ganz kurz meine Frage: (Hab nämlich keine Zeit)
ganz kurze Antwort (Ich habe nämlich auch keine Zeit): DisplayPopupMenu()

Grüße ... Kiffi

Verfasst: 15.08.2006 17:00
von Mok
Aber... (Ich hab jetz´ Zeit) DisplayPopupMenu() get doch nur bei Fnstern... oder?

Verfasst: 15.08.2006 17:16
von #NULL
systray-icons doch auch, oder ?

Verfasst: 15.08.2006 19:26
von Kiffi
Mok hat geschrieben:DisplayPopupMenu() get doch nur bei Fnstern... oder?
jepp, wieso? Habe ich in Deiner Ursprungsfrage ein nicht existentes "aber
ohne Fenster" überlesen?

Grüße ... Kiffi

Verfasst: 15.08.2006 20:52
von a14xerus
ich hide mein fenster und zeige stattdessen das systray.. dieses muss sowieso immer auf ein fenster bezogen sein.. weil da ja auch die menuitems reingeschrieben werden..
natürlich kannst du das icon auch die ganze zeit anzeigen
Such doch einfach mal in der hilfe nach popupup.. ich habe mir die ganze systray sache auch selber beigebracht

Verfasst: 15.08.2006 20:54
von ts-soft
a14xerus hat geschrieben:ich hide mein fenster udn zeieg stattdessen das systray.. dieses muss sowieso immer auf ein fenster bezogen sein.. weil da aj cu hdie menuitems reingeschreiben werden..
natürlich kannst du das icon auch die ganze zeit anzeigfen
Such doc heinfach mal in der hilfe nach popupup.. ich habe mir die ganze systray sache auc hseler beigebracht
Wäre nett, wenn Du Deine Beiträge in deutsch verfassen würdest :freak:

Verfasst: 19.08.2006 12:28
von JohnMC
Also des geht so:

du öffnest ein fenster und machst danach ein

Code: Alles auswählen

HideWindow(Windowid())
jetzt machst du ein systraysymbol mit

Code: Alles auswählen

 addsystrayicon()
dann machst du mit createpopupmenu() ein popupmenu auf die windowID des vorher gamacht fensters.

du fragst in einer schlaufe ganz normal ab, ob das systrayicon angeklickt wurde ( if windowevent()=#pb_event_systray). dann machst du openpopupmenu() auf das gehidete fenster und dann fragst du ab, welches menu geklickt wurde.....[/code]

Verfasst: 19.08.2006 13:24
von Jilocasin
JohnMC hat geschrieben: du öffnest ein fenster und machst danach ein

Code: Alles auswählen

HideWindow(Windowid())
boar wie umständlich :lol:
öffne es doch gleich mit #PB_Window_Invisible ^^

Verfasst: 19.08.2006 17:55
von mk-soft
Info:

Windows benötigt ein Menuhandle um dort das Systray einbinden zu können und die Menu Events an das Programm weiterleiten zu können.

Ohne Fenster gibt es aber kein Menuhandle.
In etwa war das so.

FF :wink:

EDIT: Hatte langeweile...

Code: Alles auswählen

Enumeration
  #Menu_New
  #Menu_Open
  #Menu_Save
  #Menu_Exit
EndEnumeration

;- Main
If OpenWindow(0, 0, 0, 640, 480, "Systray Test")

  HideWindow(0, 1)
  ;- Popup Menu anlegen
  CreatePopupMenu(0)
    MenuItem(#Menu_New,   "&Neu")
    MenuItem(#Menu_Open,  "Ö&ffnen")
    MenuItem(#Menu_Save,  "&Speichern")
    MenuBar()
    MenuItem(#Menu_Exit,  "Be&enden")
  ;- Systray anlegen aus Programm Icon
  hInst.l = GetWindowLong_(WindowID(0), #GWL_HINSTANCE)
  hIcon.l = LoadIcon_(hInst, 1)
  If hIcon = 0
    hIcon = LoadIcon_(0, #IDI_APPLICATION)
  EndIf
  AddSysTrayIcon(0, WindowID(0), hIcon)
  
  Exit = 0
  ;- Hauptschleife
  Repeat
    event = WaitWindowEvent()
    menu  = EventMenu()
    type  = EventType()
    Select event
      Case #PB_Event_Menu                       ; ein Menü wurde ausgewählt
        Select menu
          Case #Menu_Exit
            Exit = 1
        EndSelect
      Case #PB_Event_Gadget                     ; ein Gadget wurde gedrückt
      Case #PB_Event_CloseWindow                ; das Schließgadget vom Fenster wurde gedrückt
        Exit = 1
      Case #PB_Event_Repaint                    ; der Fensterinhalt wurde zerstört und muss neu gezeichnet werden (nützlich für 2D Grafik-Operationen) 
      Case #PB_Event_SizeWindow                 ; das Fenster wurde in der Größe verändert
      Case #PB_Event_MoveWindow                 ; das Fenster wurde verschoben
      Case #PB_Event_ActivateWindow             ; das Fenster wurde aktiviert (hat den Fokus erhalten)
      Case #PB_Event_SysTray                    ; das SysTray wurde aktiviert
        Select type
          Case #PB_EventType_LeftClick          ; Klick mit der linken Maustaste
            DisplayPopupMenu(0, WindowID(0))
          Case #PB_EventType_RightClick         ; Klick mit der rechten Maustaste
            DisplayPopupMenu(0, WindowID(0))
        EndSelect
    
    EndSelect
    
  Until Exit
EndIf