Page 1 sur 2

Systray Icon

Publié : dim. 07/nov./2004 20:15
par le_pro_du_pure
J'ai créé un utilitaire qui s'affiche dans la barre de taches.
Comment on fait le menu déroulant quand on fait un clic droit sur l'icone?

Publié : dim. 07/nov./2004 20:25
par nico
Extrait de l'aide:

Code : Tout sélectionner

Quand un événement intervient sur une icone de la zone SysTray, l'événement #PB_Event_SysTray est renvoyé. EventGadgetID() peut alors être utilisé pour connaître l'icone cliquée. La fonctions EventType() est également mise à jour par cette fonction. 

Publié : dim. 07/nov./2004 20:44
par Chris
Il y a dejà eu des codes la-dessus sur le forum, il me semble.

En voilà un que j'avais posté, avec un menu pop-up.
Il utilise l'icône du programme que tu définis dans les options du projet.

Code : Tout sélectionner

;- Constantes fenêtres , Window Constant 
Enumeration 
  #Win_Main 
EndEnumeration 

;-Constantes diverses , Miscellaneous Constant 
Enumeration 
  #SysIcon 
  #Sytray 
  #PopUp 
EndEnumeration 

;- *********** Extraction de l'icône ************** 
;-************    Icon Extraction    ************** 

;- 
Procedure GetIcone(WinHandle) 
  hInstance = GetWindowLong_(WinHandle,#GWL_HINSTANCE) 
  app.s = Space(255) 
  GetModuleFileName_(0,@app,255) 
  ProcedureReturn ExtractIcon_(hInstance, app, 0) 
EndProcedure 

;- ************************************************ 

Procedure Minimize(Flag.b) 
  If Flag = 1 
    DisableMenuItem(1,1)          ; Désactive le menu 1 , Disable menu 1 
    DisableMenuItem(2,0)          ; Active le menu 2    , Enable menu 2 
    HideWindow(#Win_Main, 1)      ; Réduit la fenêtre   , Minimize window 
  Else 
    DisableMenuItem(1,0)          ; Active le menu 1    , Enable menu 1 
    DisableMenuItem(2,1)          ; Désactive le menu 2 , Disable menu 2 
    HideWindow(#Win_Main, 0)      ; Affiche la fenêtre  , Display the window 
  EndIf 
EndProcedure 

;- Ouverture de la fenêtre, et création des menus et du SysTray 
;- Opening of the window, and creation of the menu and SysTray 
hwnd = OpenWindow(#Win_Main, 300, 300, 100, 100,  #PB_Window_SystemMenu | #PB_Window_Invisible , "SysTray-Test") 

hIconSysTray = GetIcone(hwnd) 

AddSysTrayIcon(#Sytray,hwnd,hIconSysTray)  ; Ajoute l'icône dans le SysTray , Add the icon on the SysTray 
CreatePopupMenu(#PopUp)                    ; Crée un menu Pop-Up            , CreatePopUp menu 
MenuItem(1,"Mettre en icône...")           ; Ajout des menus                , add items 
MenuItem(2,"Afficher...") 
MenuBar() 
MenuItem(3,"Quitter") 

DisableMenuItem(1,1)                       ; Menu inactif,    Item disabled 
DisableMenuItem(2,0)                       ; Menu actif       Item enabled 

;- Début de la boucle 
;- Starting the loop 
Repeat 
  
  Select WaitWindowEvent() 
    Case #PB_Event_SysTray 
      Select EventType() 
        Case #PB_EventType_RightClick         ; Un click droit affiche le menu  , Right click display menu        
          DisplayPopupMenu(#PopUp, hwnd) 
      EndSelect 
      
    Case #PB_EventMenu 
      Select EventMenuID() 
        
        Case 1 : Minimize(1)                  
        Case 2 : Minimize(0)                  
          
        Case 3 : Quit = 1 : End 
      EndSelect 
      
    Case #PB_EventGadget 
      Select EventGadgetID() 
      EndSelect 
    Case #PB_EventCloseWindow : Minimize(1)    
  EndSelect 
Until Quit = 1 
End 
PS: Une recherche dans le forum donne 17 résultat avec le mot-clé "SysTray"

Publié : dim. 07/nov./2004 20:44
par le_pro_du_pure
Le problème c'est pas le déclencheur, c'est le menu déroulant...
Merci quand même :wink:

Publié : dim. 07/nov./2004 20:51
par le_pro_du_pure
Merci pour le code
Je crois que je vais pas mal pomper dedans ;)

Publié : dim. 07/nov./2004 20:57
par Chris
Il est fait pour ça :)

Publié : lun. 08/nov./2004 14:26
par Le Soldat Inconnu
le menu déroulant, c'est un PopupMenu, regarde dans l'aide à CreatePopupMenu(

Publié : ven. 12/nov./2004 12:53
par le_pro_du_pure
J'ai pas assez cherché, dsl :oops:
Je me mettrai a l'ouvrage dès que possible (mon ordi est 1 peu endommagé... inutilisable)...
En fait là j'écris du cdi du lycée :wink:
Merci Pour ces conseils trèèèèèèès utiles 8)

Publié : ven. 21/mars/2008 13:47
par Backup
; mis en V4.10 par Dobro

Code : Tout sélectionner


; mis en V4.10 par Dobro

;- Constantes fenêtres , Window Constant
Enumeration
    #Win_Main
EndEnumeration

;-Constantes diverses , Miscellaneous Constant
Enumeration
    #SysIcon
    #Sytray
    #PopUp
EndEnumeration

;- *********** Extraction de l'icône **************
;-************    Icon Extraction    **************

;-
Procedure GetIcone(WinHandle)
    hInstance = GetWindowLong_(WinHandle,#GWL_HINSTANCE)
    app.s = Space(255)
    GetModuleFileName_(0,@app,255)
    ProcedureReturn ExtractIcon_(hInstance, app, 0)
EndProcedure

;- ************************************************

Procedure Minimize(Flag.b)
    If Flag = 1
        DisableMenuItem(#PopUp,1,1)          ; Désactive le menu 1 , Disable menu 1
        DisableMenuItem(#PopUp,2,0)          ; Active le menu 2    , Enable menu 2
        HideWindow(#Win_Main, 1)      ; Réduit la fenêtre   , Minimize window
    Else
        DisableMenuItem(#PopUp,1,0)          ; Active le menu 1    , Enable menu 1
        DisableMenuItem(#PopUp,2,1)          ; Désactive le menu 2 , Disable menu 2
        HideWindow(#Win_Main, 0)      ; Affiche la fenêtre  , Display the window
    EndIf
EndProcedure

;- Ouverture de la fenêtre, et création des menus et du SysTray
;- Opening of the window, and creation of the menu and SysTray
hwnd = OpenWindow(#Win_Main, 300, 300, 100, 100,  "SysTray-Test",#PB_Window_SystemMenu | #PB_Window_Invisible )

hIconSysTray = GetIcone(hwnd)
; il faut choisir un icone dans Projet option de compilation
AddSysTrayIcon(#Sytray,hwnd,hIconSysTray)  ; Ajoute l'icône dans le SysTray , Add the icon on the SysTray
CreatePopupMenu(#PopUp)                    ; Crée un menu Pop-Up            , CreatePopUp menu
MenuItem(1,"Mettre en icône...")           ; Ajout des menus                , add items
MenuItem(2,"Afficher...")
MenuBar()
MenuItem(3,"Quitter")

DisableMenuItem(#PopUp,1,1)                       ; Menu inactif,    Item disabled
DisableMenuItem(#PopUp,2,0)                       ; Menu actif       Item enabled

;- Début de la boucle
;- Starting the loop
Repeat
    
    Select WaitWindowEvent()
        Case #PB_Event_SysTray
            Select EventType()
                Case #PB_EventType_RightClick         ; Un click droit affiche le menu  , Right click display menu       
                    DisplayPopupMenu(#PopUp, hwnd)
            EndSelect
            
        Case #PB_Event_Menu
            Select EventMenu()              ; MenuID(#PopUp)
                    
                Case 1 : Minimize(1)                 
                Case 2 : Minimize(0)                 
                    
                Case 3 : Quit = 1 : End
            EndSelect 
            
        Case #PB_Event_Gadget
            ; Select GadgetID()
            ; EndSelect
        Case #PB_Event_CloseWindow : Minimize(1)   
    EndSelect
Until Quit = 1
End

Publié : ven. 21/mars/2008 14:47
par Chris
Quitte à mettre des codes en version 4.10, assure toi au moins qu'ils fonctionnent correctement!! :?

Code : Tout sélectionner

    Case #PB_Event_Menu
      Select EventMenu()              ; MenuID(#PopUp)
        
        Case 1 : Minimize(1)                 
        Case 2 : Minimize(0)                 
          
        Case 3 : Quit = 1 : End
      EndSelect

Publié : ven. 21/mars/2008 17:14
par Backup
Chris a écrit :Quitte à mettre des codes en version 4.10, assure toi au moins qu'ils fonctionnent correctement!! :?
j'ai modifié , mais chez moi ça marchait quand meme 8O

Publié : ven. 21/mars/2008 18:41
par Chris
Dobro a écrit :
Chris a écrit :Quitte à mettre des codes en version 4.10, assure toi au moins qu'ils fonctionnent correctement!! :?
j'ai modifié , mais chez moi ça marchait quand meme 8O
Chez moi, non!

L'icône apparaissait bien dans la barre de tâches, mais le clic sur le menu n'avait aucun effet. :)

Publié : ven. 21/mars/2008 18:55
par Ar-S
Aucune icone n'apparait dans le systray chez moi...

si je lance le debugger j'ai une gros surlignage rouge à

Code : Tout sélectionner

AddSysTrayIcon(#Sytray,hwnd,hIconSysTray)  ; Ajoute l'icône dans le SysTray , Add the icon on the SysTray

Publié : ven. 21/mars/2008 19:09
par Chris
Il faut choisir une icone dans les options du projet.

"Compilateur" -> "Options du compilateur" -> cocher "Utiliser une icône" sous l'éditeur de PB

"Projet" -> "Options du projet" sous jaPBe.

Et évidemment, il faut choisir une icône! :lol:

Publié : ven. 21/mars/2008 19:55
par Backup
Ar-S a écrit :Aucune icone n'apparait dans le systray chez moi...

a quoi ça sert ce que j'ecris a la ligne 45
(soit la ligne directement superieur a l'erreur)
; il faut choisir un icone dans Projet option de compilation
:? :? :lol: :lol: :lol: