réduire dans le systray
réduire dans le systray
ça fait plusieurs jour que je cherche et je ne trouve pas, comment réduire une applicton dans le systemtray ?
Merci
Merci
Tiens, voilà un exemple: Il pourra toujours servir à quelqu'un d'autre 
Pour le fichier *.ico, vous en trouverez bien un sur votre PC 
Chris

Code : Tout sélectionner
;- Constantes fenêtres
Enumeration
#Win_Main
EndEnumeration
;-Constantes diverses
Enumeration
#SysIcon
#Sytray
#PopUp
EndEnumeration
;- Variables globales
Global ScreenWidth, ScreenHeight, CurPos.POINT
;- Récupération des paramètres de l'écran
; Cette partie récupère les coordonnées de la zone de travail de l'écran,
; c'est à dire la largeur, et la hauteur sans la barre de tâches
;
SystemParametersInfo_(#SPI_GETWORKAREA,0,rect.RECT,0)
ScreenWidth = rect\right ; Largeur de l'écran
ScreenHeight = rect\bottom ; Hauteur de l'écran (Zone de travail)
;- Procedures
;- Ouverture de la fenêtre Principale
Procedure Open_Win_Main(ScrWidth.l, ScrHeight.l, WinWidth, WinHeight)
WinRect.RECT
If OpenWindow(#Win_Main, ScrWidth - WinWidth, ScrHeight-WinHeight, WinWidth, WinHeight, #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_Invisible , "SysTray-Test")
hwnd = WindowID(#Win_Main)
; Après avoir ouvert la fenêtre, on récupère ses dimensions réelles, c'est à dire
; celles qui incluent la barre de titre et les bordures
GetWindowRect_(hwnd, @WinRect)
W_Width = WinRect\right - WinRect\left ; Calcul de la largeur
W_Height = WinRect\bottom - WinRect\top ; Calcul de la hauteur
; On déplace ensuite la fenêtre pour qu'elle colle au coin bas/droite de l'écran
MoveWindow_(hwnd,ScrWidth-W_Width,ScrHeight-W_Height,W_Width,W_Height,#True)
ProcedureReturn hwnd
EndIf
EndProcedure
;/ Fermeture/Ouverture de la fenêtre des options
Procedure Minimize(flag.b)
If flag = 1
DisableMenuItem(1,1) ; Désactive le menu 1
DisableMenuItem(2,0) ; Active le menu 2
HideWindow(#Win_Main, 1) ; Réduit la fenêtre
Else
DisableMenuItem(1,0) ; Active le menu 1
DisableMenuItem(2,1) ; Désactive le menu 2
HideWindow(#Win_Main, 0) ; Affiche la fenêtre
EndIf
EndProcedure
;- Ouverture de la fenêtre, et création des menus et du SysTray
hwnd = Open_Win_Main(ScreenWidth, ScreenHeight, 200, 150) ; Ouvre la fenêtre
hIconSysTray = LoadImage(#SysIcon,"Test.ico") ; Charge l'icône
AddSysTrayIcon(#Sytray,hwnd,hIconSysTray) ; Ajoute l'icône dans le SysTray
CreatePopupMenu(#PopUp) ; Crée un menu Pop-Up
MenuItem(1,"Mettre en icône...") ; Ajout des menus
MenuItem(2,"Afficher...")
MenuBar()
MenuItem(3,"Quitter")
; Comme la fenêtre sera invisible à l'ouverture, le menu servant
; à la minimiser sera inactif, tandis que celui servant à l'agrandir
; sera actif
;
DisableMenuItem(1,1) ; Menu inactif à l'ouverture
DisableMenuItem(2,0) ; Menu actif à l'ouverture
;- Début de la boucle
Repeat
Select WaitWindowEvent()
Case #PB_Event_SysTray
Select EventType()
Case #PB_EventType_RightClick ; Un click droit fait apparaître le menu
DisplayPopupMenu(#PopUp, hwnd)
EndSelect
Case #PB_EventMenu
Select EventMenuID()
; Le flag envoyé sert à indiquer à la procédure si elle doit agrandir
; ou réduire la fenêtre: 1 = Réduire : 0 = Agrandir
Case 1 : Minimize(1) ; Ce menu cache la fenêtre
Case 2 : Minimize(0) ; Ce menu montre la fenêtre
Case 3 : quit = 1 ; Ce menu quitte l'application
EndSelect
Case #PB_EventGadget
Select EventGadgetID()
EndSelect
Case #PB_EventCloseWindow : Minimize(1) ; Un click sur la croix fait disparaître la fenêtre
EndSelect
Until quit = 1
End

Chris

J'ai ce code que je viens de terminer:
Code : Tout sélectionner
If OpenWindow(0, 100, 150, 300, 100, #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget, "PureBasic - SysTray Example")
AddSysTrayIcon(0, WindowID(), LoadImage(0, "Data\CdPlayer.ico"))
SysTrayIconToolTip(0, "Icon 1")
If CreatePopupMenu(0)
MenuItem(1, "Restaurer")
EndIf
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_SysTray
If EventType() = #PB_EventType_RightClick
DisplayPopupMenu(0, WindowID())
If IsIconic_(WindowID(0))
;cette ligne est utilisée pour l'effet d'agrandissement
ShowWindow_(WindowID(0),#sw_minimize)
;Une tempo est nécessaire sinon ça ne fonctionne pas à tous les coups
Delay(250)
ShowWindow_(WindowID(0),#sw_restore)
EndIf
EndIf
Case #WM_SIZE
If IsIconic_(WindowID(0))
ShowWindow_(WindowID(0),#sw_hide)
EndIf
EndSelect
Until Event = #PB_Event_CloseWindow
EndIf
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
heu, comment ça "quel menu ?"
tu as fais un popupmenu ?
si c'est ça, il faut passer par :
sinon, tu t'expliques mieux
ou alors je prend des cours du soir pour devenir intelligent
(mais je croit pas que ça serve à grand chose)
tu as fais un popupmenu ?
si c'est ça, il faut passer par :
Code : Tout sélectionner
If Event = #PB_EventMenu
Select EventMenuID() ; menu et barre d'outils
Case
Case
EndSelect
EndIf


Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]