Seite 1 von 1

Minimieren in SysTray über Taste in der Titelleiste

Verfasst: 19.11.2008 17:41
von ThoPie
Hallo,
bei manchen Anwendungen gibt es in der Titelleiste neben den drei Standardsymbolen eine Taste (mit Punktsymbol) mit der ein Minimieren in den SysTray möglich ist.
Kann mir bitte jemand einen Tipp geben, wie ich das hinkriege.
Vielen Dank.

Verfasst: 19.11.2008 20:12
von Andesdaf
Ist zwar nicht ganz das was du suchst aber eine Lösung
Damit kannst du dir eigene Schaltflächen erstellen:
http://www.purebasic.fr/german/viewtopi ... 40&start=3
Da kannst du dir nen Punkt machen und wenn du draufklickst, wird einfach das Fenster geschlossen. Im Systray kannste ja dann ein Menü machen, mit Menuitem "Öffnen", und das Fenster geht wieder auf

Verfasst: 19.11.2008 20:12
von Dare Devil
Ich wuesste einen Weg, wie du das Programm in das Systray 'minimierst' - allerdings weiss ich nicht wie man diesen "punkt" oben rechts am fenster erscheinen laesst. Falls du wissen willst, wie du dein Programm in den Systray minimieren laesst, habe ich eine Loesung fuer dich - allerdings ueber einen ButtonGadget() anstelle des "Punktes":

In der Mainloop ueberpruefst du einfach per #PB_Event_Gadget ob der Button gedrueckt wurde... wenn ja, fuegst du der systray mittels AddSysTrayIcon() nen Icon hinzu. Anschliessend schliesst ("versteckst") das Fenster, solange, bis auf das Icon in der Systray geklickt wurde...

Ich habe hierzu einen Code gebastelt, der auch funktioniert!

Code: Alles auswählen

OpenWindow(0, 0, 0, 200, 200, "Systray-Minimierung", #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SystemMenu)

CreateGadgetList(WindowID(0))
ButtonGadget(0, 80, 80, 40, 20, "Min!") ;Button

LoadImage(0, "icon.ico") ;irgendein Icon

Repeat
  EventID = WindowEvent()
  
  If EventID = #PB_Event_Gadget
    If EventGadget() = 0                            ;wenn der Button gedrueckt wurde...
      AddSysTrayIcon(0, WindowID(0), ImageID(0))    ;...erstelle ein Icon...
      HideWindow(0, 1)                              ;...und verstecke das Fenster
    EndIf
  ElseIf EventID = #PB_Event_SysTray                ;wenn auf das Icon geklickt wurde...
    RemoveSysTrayIcon(0)                            ;...entferne das Icon...
    HideWindow(0, 0)                                ;und zeige das fenster!
  EndIf
  
  Delay(1)
Until EventID = #PB_Event_CloseWindow
Zusaetzliches kannst du ja nach Bedarf aendern... (z.B. wenn du willst, dass das Icon IMMER angezeigtg wird, einfach die Funktion RemoveSysTrayIcon() entfernen und die Funktion AddSysTrayIcon() vor Beginn der Mainloop setzen)...

Ich hoffe ich konnte helfen...

Verfasst: 19.11.2008 20:14
von Andesdaf
Hupps, 2 Sekunden zu langsam! <)

Verfasst: 19.11.2008 20:15
von Dare Devil
Andesdaf hat geschrieben:Hupps, 2 Sekunden zu langsam! <)
ja, das kann echt aufregen.. :mrgreen: