Seite 1 von 1

Sys Tray

Verfasst: 09.03.2010 20:08
von netzcoder
Hallo, ich sitze gerade an einem Mini-Tool und hab mir gedacht das ich SysTray dafür gut nutzen kann. Hab mir in der Hilfe das Beispiel angeschaut und dann überlegt wie ich es hinkriegen wenn ich einen Rechtsklick auf das Icon mache das dann ein Popup-Menu. Muss ich für Sys Tray nen Fenster aufhaben? hab es auf Invisiable gesetzt weil eigentlich will ich nur nen Icon wo wenn ich draufklicke Start und Ende kommen soll und ich muss wissen was geklickt wurde.
Gibt es dafür Beispiele?

Euer netzcoder

Re: Sys Tray

Verfasst: 09.03.2010 20:26
von TomS
Ja. Du musst ein Fenster haben, wenn du Systray-Icons verwenden willst.
Du hast das Problem ja eigentlich schon alleine gelöst.
Das Fenster einfach mit #PB_Window_Invisible öffnen.
Zum Thema 'was geklickt wurde' wirst du in der Hilfe zum Popupmenü fündig.

Ein Beispiel habe ich gerade in 2 Minuten gebastelt. Streng dich ein bißchen an, schau in der Hilfe nach, dann kriegst du es auch ganz leicht hin.

Re: Sys Tray

Verfasst: 09.03.2010 20:34
von netzcoder
Jo das hab ich ja alles gemacht. Bloß irgendwie passt da was noch nicht... Nun ja ich schau nochmal

Re: Sys Tray

Verfasst: 09.03.2010 20:39
von mk-soft
Hab gerade etwas Zeit. Aus den PB-Beispiele zusammen geschustert.
Für das Icon habe ich eine API genommen.

Code: Alles auswählen


Enumeration
  #Menu
EndEnumeration

Enumeration
  #Menu_Start
  #Menu_Stop
  #Menu_Exit
EndEnumeration

If OpenWindow(0, 100, 150, 300, 100, "PureBasic - SysTray Example", #PB_Window_SystemMenu | #PB_Window_Invisible)

  hIcon1 = LoadIcon_(0, #IDI_APPLICATION)
  
  AddSysTrayIcon(1, WindowID(0), hIcon1)
  SysTrayIconToolTip(1, "Icon 1")

  If CreatePopupMenu(#Menu)
    MenuItem(#Menu_Start, "Start")
    MenuItem(#Menu_Stop, "Stop")
    MenuBar()
    MenuItem(#Menu_Exit, "Beenden")
  EndIf
  
  exit = 0
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
      Case #PB_Event_SysTray
        If EventType() = #PB_EventType_LeftClick
          DisplayPopupMenu(#Menu, WindowID(0))
        EndIf
      
      Case #PB_Event_Menu
        Select EventMenu()
          Case #Menu_Start
            MessageRequester("Info", "Start...")
          Case #Menu_Stop
            MessageRequester("Info", "Stopp...")
          Case #Menu_Exit
            exit = 1
              
        EndSelect
        
      Case #PB_Event_CloseWindow
        exit = 1
        
    EndSelect
    
  Until exit
  
EndIf
FF :wink:

Re: Sys Tray

Verfasst: 09.03.2010 20:40
von netzcoder
Nun klappt es! Danke! Fehler lag dadrin das ich eine falsche Reinfolge hatte und Event niemals da wo ich es abgefragt habe irgendeinen Inhalt hatte!

EDIT: Thanks für den beispielcode!