Systray mit PopUp verbinden

Anfängerfragen zum Programmieren mit PureBasic.
Tomarr Sovai
Beiträge: 39
Registriert: 18.11.2005 16:09

Systray mit PopUp verbinden

Beitrag 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.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag 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,...)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Tomarr Sovai
Beiträge: 39
Registriert: 18.11.2005 16:09

Beitrag von Tomarr Sovai »

Ah shit...

Also mit der Hälfte des Programmcodes weglassen geht es auch nicht ;)
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Habe (genau) dasselbe Problem (gelöst)

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Tomarr Sovai
Beiträge: 39
Registriert: 18.11.2005 16:09

Beitrag 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.
Antworten