Page 1 sur 2

info avec les systray

Publié : sam. 26/nov./2005 17:50
par gadjet35
bonjour je voudrai quelque info sur les systray :

comment fait on pour créer un menu qui intervient si l'on clique sur l'icone
du programme dans la barre systray ???

je supose que AddSysTrayIcon(#SysTrayIcon, WindowID, ImageID)
le windowid() veut dire qu'elle fenetre doit-il ouvrir.

8O 8O :?: :?: :?: :?: :?: :?: :?:

Re: info avec les systray

Publié : sam. 26/nov./2005 17:59
par Chris
gadjet35 a écrit :bonjour je voudrai quelque info sur les systray :

comment fait on pour créer un menu qui intervient si l'on clique sur l'icone
du programme dans la barre systray ???

je supose que AddSysTrayIcon(#SysTrayIcon, WindowID, ImageID)
le windowid() veut dire qu'elle fenetre doit-il ouvrir.

8O 8O :?: :?: :?: :?: :?: :?: :?:
touche "rechercher"

Publié : sam. 26/nov./2005 18:01
par gadjet35
bon ce probleme est regler mais voici un code et sa ne marche pas
bien sur il fait rien ce n'est pas terminer :

Code : Tout sélectionner

;- Window Constante
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_1
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 146, 154, 481, 258,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_TitleBar , "test avec les systray")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_0, 130, 50, 180, 40, "fermer la fenetre")
      ButtonGadget(#Button_1, 130, 150, 180, 40, "quitter le programme ")
    EndIf
  EndIf
EndProcedure

open_window_0()
image$ = OpenFileRequester("","","",0)
LoadImage(0,image$)
AddSysTrayIcon(1,WindowID(#window_0),ImageID())

 Repeat
  Select WaitWindowEvent() 
   Case #PB_EventCloseWindow
    quit = 1
  EndSelect
 Until quit = 1
mon addsystrayicon() ne marche pas il n'ajoute aucune icone en bas !!!

Publié : sam. 26/nov./2005 18:32
par Backup
mon addsystrayicon() ne marche pas il n'ajoute aucune icone en bas
si! mais pour ça il faut choisir une image au format "*.ICO"

Publié : sam. 26/nov./2005 19:34
par Chris
C'est marqué en toutes lettres dans l'aide. C'est pour ça que je n'ai pas répondu. Faut quand même pas pousser :?

Publié : dim. 27/nov./2005 7:18
par gadjet35
mais pourtant j'avait une image au format *.ico mais sa na pas marcher !

Publié : dim. 27/nov./2005 7:22
par Chris
Si, avec un fichier *.ico, ça marche.

Ton fichier n'était peut-être pas un vrai *.ico. Essaye avec un autre.

Publié : dim. 27/nov./2005 8:05
par gadjet35
mais si c'était un *.ico meme que je l'ai créer avec un de mes programmes :

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_0
EndEnumeration

Enumeration
  #MENU_0
  #MENU_1
  #MENU_2
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Image_0
  #Button_0
  #Button_1
EndEnumeration

 UseJPEGImageEncoder()
 UsePNGImageDecoder()
 UseJPEGImageDecoder()

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 0, 0, 1018, 707,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Fichier *.cur   *.ico   v4.5")
    If CreateMenu(#MenuBar_0, WindowID())
      MenuTitle("Images")
      MenuItem(#MENU_0, "Charger image")
      MenuTitle("Fichiers")
      MenuItem(#MENU_1, "Nouveau  fichier (*.cur)")
      MenuItem(#MENU_2, "Nouveau fichier (*.ico)")
      EndIf

      If CreateGadgetList(WindowID())
        ImageGadget(#Image_0, 20, 80, 980, 590, Image0, #PB_Image_Border)
        ButtonGadget(#Button_0, 80, 20, 190, 40, "Créer un fichier  *.ico")
        ButtonGadget(#Button_1, 740, 30, 180, 40, "Créer un fichier  *.cur")
      EndIf
    EndIf
EndProcedure

 open_window_0()

 Repeat
  Select WaitWindowEvent()
   Case #PB_EventGadget
    Select EventGadgetID()
     Case #button_0
      fichier$ = SaveFileRequester("Enregistrer sous...","","*.ico|*.ico",0)
      SaveImage(0,fichier$+".ico")
     Case #button_1
      fichier$ = SaveFileRequester("Enregistrer sous...","","*.cur|*.cur",0)
      SaveImage(0,fichier$+".cur")
    EndSelect
   Case #PB_EventMenu
    Select EventMenuID() 
     Case #menu_0
      image$ = OpenFileRequester("charger...","","fichier image|*.bmp;*.jpeg;*.gif;*.jpg;*.png;*.dib",0)
      LoadImage(0,image$)
      SetGadgetState(#image_0,ImageID())
     Case #menu_1
      fichier$ = OpenFileRequester("Enregistrer sous...","","*.cur|*.cur",0)
      SaveImage(0,fichier$+".cur")
     Case #menu_2
      fichier$ = OpenFileRequester("Enregistrer sous...","","*.ico|*.ico",0)
      SaveImage(0,fichier$+".ico")
    EndSelect
   Case #PB_EventCloseWindow
    quit = 1
  EndSelect
 Until quit = 1
et maintenant ne me sort pas que c'est mon programme qui ne fait pas de vrai *.ico car j'ai ouvert mon explorateur et il m'a bien dit que c'est un *.ico

Publié : dim. 27/nov./2005 8:11
par gadjet35
et voici le code de mon programme que j'essaie de mettre dans la barre systray (peut-être que le problême est dans mon code) :

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_1
  #Button_2
  #Systray_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 130, 91, 648, 391,  #PB_Window_TitleBar , "systray")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_1, 160, 90, 260, 70, "Rabaisser")
      ButtonGadget(#Button_2, 160, 200, 260, 90, "Quitter")
    EndIf
  EndIf
EndProcedure

open_window_0()

 Repeat
  Select WaitWindowEvent()
   Case #PB_EventGadget
    Select EventGadgetID()
     Case #button_1
      image$ = OpenFileRequester("image","","*.ico|*.ico",0)
      LoadImage(0,image$)
      AddSysTrayIcon(#systray_0,WindowID(),ImageID())
     Case #button_2
      quit = 1
    EndSelect
  EndSelect
 Until quit = 1

Publié : dim. 27/nov./2005 8:12
par Chris
Tu prends n'importe quel fichier, tu lui donnes une extension *.ico, et l'explorateur te dira que c'est un fichier icone.
L'explorateur se base sur l'extension pour donner le type de fichier.

Le code que tu postes ne crée pas un fichier icone. Un bitmap, tout au plus. Le format icone est un format special, et ton programme ne sait pas le créer.

Publié : dim. 27/nov./2005 8:21
par gadjet35
merci t'avait raison maintenant sa marche autre probleme
enfait j'utilise cette fonction pour que la ´fenetre disparaisse
mais le probleme c'est que j'ai utilser closewindow() mais l'icone par en meme temps après j'ai voulu cacher la fenetre qu'on ne la voit plus sa marche mais elle reste dans la barre en bas qui peut m'aider ???

Publié : dim. 27/nov./2005 8:24
par Chris
Un moyen très simple de savoir si un fichier est une icone ou pas, c'est de regarder sa représentation dans l'explorateur.

Si tu vois l'image contenue dans l'icone, c'est une icone. Sinon, tu vois une image qui représente le programme qui sert à ouvrir le fichier ou l'image standard si il n'y a pas de programme associé.

Image

Dans cette image, Icone_1 est une image normale renommée en .Ico, Icone_2 est une vraie icone

Publié : dim. 27/nov./2005 8:28
par Chris
gadjet35 a écrit :merci t'avait raison maintenant sa marche autre probleme
enfait j'utilise cette fonction pour que la ´fenetre disparaisse
mais le probleme c'est que j'ai utilser closewindow() mais l'icone par en meme temps après j'ai voulu cacher la fenetre qu'on ne la voit plus sa marche mais elle reste dans la barre en bas qui peut m'aider ???
Il faut utiliser HideWindow((#Fenetre, 1) pour cacher la fenêtre et HideWindow(#Fenetre, 0) pour la cacher.

Si tu fermes la fenêtre avec CloseWindow(), tu supprime aussi l'icône puisque l'icône est associée à la fenêtre

Publié : dim. 27/nov./2005 8:45
par gadjet35
mille merci attend deux dernières question :
dans l'aide il y a marqué quelque part pour recuperer un evenement sur une icone utiliser eventgadgetid() mais alors les icones de la barre systray son gadget !
et comment faire pour faire apparetre un menu quand on clique sur l'icone ??? j'ai essayer popumenu() mais il faut que sa apparesse dans une fenetre alors que moi je le veut a coter de l'icone !!!

Publié : dim. 27/nov./2005 9:00
par Chris
Rhoooo!!!!
T'est chiant quand même ! :lol:

Tiens, un code qui affiche une icône dans le systray.
Quand tu cliques sur l'icône avec le bouton droit, ça affiche un pop-up.

Modifie le chemin pour l'icone

Code : Tout sélectionner

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

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


hIconSysTray = LoadImage(#SysIcon, "D:\PureBasic\MesProgs\ClearScreen\ClearScreen.ico")

Procedure Minimize(Flag.b) 
  DisableMenuItem(1,Flag)          ; Active/Désactive le menu 1 - Enable/Disable menu 1 
  DisableMenuItem(2, Flag!1)       ; Active/Désactive le menu 2 - Enable/Disable menu 2 
  HideWindow(#Win_Main, Flag)      ; Réduit la fenêtre   , Minimize window 
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") 

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