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

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
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
Merci Pour ces conseils trèèèèèèès utiles

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

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

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! 
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
