PopUp-Menu bei Systray

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

PopUp-Menu bei Systray

Beitrag 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 :?:
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: PopUp-Menu bei Systray

Beitrag 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
a²+b²=mc²
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Beitrag von Mok »

Aber... (Ich hab jetz´ Zeit) DisplayPopupMenu() get doch nur bei Fnstern... oder?
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

systray-icons doch auch, oder ?
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag 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
Zuletzt geändert von a14xerus am 15.08.2006 21:45, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
JohnMC
Beiträge: 85
Registriert: 06.01.2006 17:04
Wohnort: http://www.j-soft.de.ms
Kontaktdaten:

Beitrag 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]
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag 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 ^^
Bild
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten