Seite 1 von 1

Systray mit PopUp verbinden

Verfasst: 14.12.2005 13:20
von Tomarr Sovai
Hallo zusammen.

Ich kämpfe noch immer ein bischen mit der Syntax und der Vielfalt von PB.

Ich versuche nämlich gerade meinem SystrayIcon beizubringen ein Popupmenü anzuzeigen wenn ich mit Rechts drauf klicke.

Ich bin nun wie folgt vorgegangen. Ich habe ein Systray erstellt, ganz klar... Menü erstellt, auchklar.

Nun habe ich eine Eventschleife mit Event = WaitWindowEvent()

Und danach habe ich die Abfrage

Code: Alles auswählen

  If event=#WM_RBUTTONDOWN
    DisplayPopupMenu(0,WindowID(#SysTrayIcon))
  EndIf
Ich habe als WindowsID einfach mal die ID des Systrayicons angegeben. So einfach komme ich aus der Sache aber wohl doch nicht raus, denn das Popup öffnet sich tatsächlich nur wenn ich auf das eigentliche Fenster klicke mit dem das Systray verknüpft ist, ich nehme mal an dass das Zufall ist weil beide die gleiche ID haben oder so, aber beim Rechtsklick auf das Trayicon tut sich nichts.

Verfasst: 14.12.2005 13:32
von bobobo
da fehlt ja auch was..

guck Dir mal das Beispiel in der Hilfe zum Systray an. (das ist auch im
Purebasic Example\sources-Ordner und heisst systray.pb)

Beachte dort mal die Abfolge der MessageAbfragen (Event,EventType,...)

Verfasst: 14.12.2005 13:53
von Tomarr Sovai
Ah shit...

Also mit der Hälfte des Programmcodes weglassen geht es auch nicht ;)

Habe (genau) dasselbe Problem (gelöst)

Verfasst: 14.12.2005 15:55
von AND51
Genau dasselbe Problem habe ich auch, ich habe es aber so gelöst:

Code: Alles auswählen

programm_name$="Multi Clipboard"

Enumeration 
	#sysicon
	#fenster
EndEnumeration

OpenWindow(#fenster, 0, 0, 200, 200, #PB_Window_Invisible|#PB_Window_BorderLess, programm_name$)

AddSysTrayIcon(#sysicon, WindowID(#fenster), UseImage(CatchImage(#PB_Any, ?icon)))
SysTrayIconToolTip(#sysicon, programm_name$)

Repeat
event_w=WindowEvent()
event_g=EventGadgetID()
event_t=EventType()
event_m=EventMenuID()

If event_w = #PB_EventSysTray
	If event_t = #PB_EventType_LeftClick Or event_t = #PB_EventType_RightClick
			DisplayPopupMenu(#popupmenu, WindowID(#fenster))
	EndIf
EndIf

Until Quit = 1
Dieser Code stammt aus meinem Projekt, an dem ich gerdae arbeite, ich habe ihn nur sehr, sehr, leicht abgeändert und gekürzt.
hinter #popupmenu verbigt sich ein bereits erstelltes PoprupMenü, welches bereitsteht, um angezeigt zu werden. Bei AddSysTrayIcon() muss man als letzten Parameter ja UseImage() zusammen mit einer ImageID angeben; da schreibt ihr/schreibst du einfach ein anderes Bild rein, beachte meinen Code einfach nicht (außer, du weißt, was ich da gemacht habe). Das Icon sollte 16x16 Pixel groß sein, es gehen zwar auch 32x32 Pixel Icons, diese werden aber dann verkleinert; bei einigen Icons sieht das nicht mehr schön aus. Außerdem dürfen die, glaube ich, nicht mehr als 256 Farben haben.
Mein PopupMenu wird halt mit Links- oder Rechtsklick aufgerufen, das kannst du entsprechend abändern.

Viel Spaß und gutes Gelingen mit diesem Code.

Verfasst: 14.12.2005 16:29
von Tomarr Sovai
Ja danke, der Hinweis von bobobo hat eigentlich schon gereicht, nämlich das ich (mal wieder) den kürzesten, und somit den falschen Weg benutzt habe.

Habe das nun so gelöst.

Code: Alles auswählen

 If event = #PB_Event_SysTray
    If EventType() = #PB_EventType_RightClick
      DisplayPopupMenu(0,WindowID(#SysTrayIcon))
    EndIf
  EndIf
  
  If event = #PB_Event_Menu
    Select EventMenuID()
      Case 1: HideWindow(#Win_log,0)
      Case 2: HideWindow(#Optionen,0)
      Case 3: End
     EndSelect
  EndIf
Funktioniert, also scheint es richtig zu sein.