Page 1 sur 1

réduire dans le systray

Publié : jeu. 11/mars/2004 21:29
par Oliv
ça fait plusieurs jour que je cherche et je ne trouve pas, comment réduire une applicton dans le systemtray ?
Merci

Publié : jeu. 11/mars/2004 21:39
par Chris
Moi, je rends le fenêtre de l'application invisible, et je la fais réapparaître, soit en cliquant sur l'icône, soit par une option dans un pop-up menu.

Ca fonctionne bien, mais je ne sais pas si c'est comme ça qu'il faut faire normalement

Chris :)

Publié : jeu. 11/mars/2004 22:14
par Oliv
merci :d

Publié : jeu. 11/mars/2004 22:51
par Chris
Tiens, voilà un exemple: Il pourra toujours servir à quelqu'un d'autre :)

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
Pour le fichier *.ico, vous en trouverez bien un sur votre PC :lol:

Chris :)

Publié : ven. 12/mars/2004 0:50
par Invité
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 

Publié : ven. 12/mars/2004 0:52
par nico
c'était moi :lol:

Publié : ven. 12/mars/2004 12:23
par Oliv
Merci Nico, c'est exactement ce qu'il me fallait

Publié : ven. 12/mars/2004 13:13
par Chris
Merci Nico, c'est exactement ce qu'il me fallait
RROhhh!... Bon, ça va...! :cry:

:lol:

Chris :)

Publié : ven. 12/mars/2004 16:16
par Oliv
Tu aas toujours fait une bonne action chris, ça compte pour papa noël :D

Publié : ven. 12/mars/2004 16:23
par Chris
Non,non,non!!!

Pas la peine!!!

Je suis vexé, et puis c'est tout :lol:

(Qu'est-ce qu'on peut raconter comme anneries sur ce forum :roll: !)

Chris :)

Publié : ven. 12/mars/2004 18:07
par Oliv
j'ai un autre problème : savoir quel Menu a été selectionné dans le systray. j'utilise menuid() mais il me retourne tjrs 0 :cry: :cry:

Publié : ven. 12/mars/2004 18:34
par Le Soldat Inconnu
heu, comment ça "quel menu ?"
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
sinon, tu t'expliques mieux :wink: ou alors je prend des cours du soir pour devenir intelligent :mrgreen: (mais je croit pas que ça serve à grand chose)

Publié : ven. 12/mars/2004 19:03
par Oliv
oui pour le popup menu et ton cod est celui que j'ai fait (donc pas besoin de cours du soir :P ) et je me retrouve avec un EventMenu() = 0, dès que j'ai le tps je vous donne le code