gadget : pouvoir acceder à la gadgetlist d'un container

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Avatar de l’utilisateur
Guillot
Messages : 521
Inscription : jeu. 25/juin/2015 16:18

gadget : pouvoir acceder à la gadgetlist d'un container

Message par Guillot »

je sais pas si j'ai loupé quelque chose,
mais j'ai pas trouvé de fonction pour accéder à la liste des gadgets d'un container
(afin de les modifier, les supprimer ...)
ça me manque cruellement
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: gadget : pouvoir acceder à la gadgetlist d'un container

Message par Marc56 »

Tout container va créer une GadgetList, donc UseGadgetList() :?:
:wink:

C'est vrai que cette fonction n'est pas indiquée dans ContainerGadget() :|
(double emploi avec OpenGadgetList() ? )
Avatar de l’utilisateur
Guillot
Messages : 521
Inscription : jeu. 25/juin/2015 16:18

Re: gadget : pouvoir acceder à la gadgetlist d'un container

Message par Guillot »

non
UseGadgetList() et OpenGadgetList() permettent de selectionner le container (ou fenetre) dans lequel on va ajouter des gadgets
moi ce que je veux c'est la liste des identifiants des gadgets contenu afin de les modifier, les supprimer ...
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: gadget : pouvoir acceder à la gadgetlist d'un container

Message par Marc56 »

OK.
Pour ceux qui créent l'interface en manuel, je ne sais pas.
Pour ceux qui utilisent le FD interne, les objets sont hiérarchisés dans le deuxième onglet (Objets).
(Container, TabGadget etc)

Image

On ne peut pas les supprimer depuis cette liste, ni les déplacer, mais on peut les faire apparaitre au premier plan une fois sélectionné et alors les supprimer.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: gadget : pouvoir acceder à la gadgetlist d'un container

Message par Zorro »

Guillot a écrit :je sais pas si j'ai loupé quelque chose,
mais j'ai pas trouvé de fonction pour accéder à la liste des gadgets d'un container
(afin de les modifier, les supprimer ...)
ça me manque cruellement

je ne comprends pas trop ta question :)

en principe, lorsque tu creer un gadget, tu indiques un id , soit par un numero directement, (c'est le cas pour la majorité des exemples de la doc, et je le deplore !! )




soit par l'utilisation d'une constante par exemple : (et tel que les exemples de la doc devraient etre )

Code : Tout sélectionner


Enumeration
		#Win 
		#Container 
		#bouton1 
		#bouton2 
EndEnumeration


If OpenWindow(#Win , 0, 0, 322, 150, "ContainerGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
		ContainerGadget(#Container, 8, 8, 306, 133, #PB_Container_Raised) 
		ButtonGadget(#bouton1, 10, 15, 80, 24, "Bouton 1") 
		ButtonGadget(#bouton2, 95, 15, 80, 24, "Bouton 2") 
		CloseGadgetList() 
		Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf  


comme tu le vois, dans cette exemple les gadgets qu'ils soient dans un container ou pas, sont accessibles par leur numero d'ID (ici la constante )





, il existe aussi la possibilité d'utiliser une variable ou un tableau a la place de constantes : en utilisant #Pb_Any exemple :

Code : Tout sélectionner


Enumeration
		#Win 
EndEnumeration


If OpenWindow(#Win , 0, 0, 322, 150, "ContainerGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
		container=ContainerGadget(#pb_Any, 8, 8, 306, 133, #PB_Container_Raised) 
				bouton1=ButtonGadget(#pb_Any, 10, 15, 80, 24, "Bouton 1") ;>2
				bouton2=ButtonGadget(#pb_Any, 95, 15, 80, 24, "Bouton 2") ;>2
		CloseGadgetList() 
		
		debug "ID container ="+str(container)
		debug "ID bouton1 ="+str(bouton1)
		debug "ID bouton2 ="+str(bouton2)
		Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
EndIf  
; Epb


mais quoiqu'il en soit, on a toujours acces a l'id de chaque gadget, qu'ils soient dans ou hors un container







le container n'est qu'un gadget comme un autre .... on accede a chacun des gadgets qu'il englobe, par le numero , ou numero d'identification (ID) de chaque gadget


:)
Dernière modification par Zorro le jeu. 29/juin/2017 11:42, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Mesa
Messages : 1092
Inscription : mer. 14/sept./2011 16:59

Re: gadget : pouvoir acceder à la gadgetlist d'un container

Message par Mesa »

Pour cela, il faudrait utiliser des fonctions internes et non documentées de PB.
Voir ici viewtopic.php?f=6&t=5258
et là http://www.purebasic.fr/english/viewtop ... 12&t=64151

Sinon, il faut que tu gère toi même la liste des gadgets du container avec une liste, une map ou un tableau.

De plus, on gére les gadgets du container sans se soucier de la gadgetlist sauf pour le créer. On peut donc changer le texte, la couleur, etc d'un gadget du container, directement, comme n'importe quel gadget.

Exemple:

Code : Tout sélectionner


Global NewList ContainerListGadget.i()



Procedure EventBouton3()
  
  Debug "Bouton 3"
  Debug GadgetID(3)
EndProcedure


If OpenWindow(0, 0, 0, 372, 150, "ContainerGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
  ContainerGadget(0, 8, 8, 356, 133, #PB_Container_Raised) 
  ButtonGadget(1, 10, 15, 100, 24, "Supprimer Bouton 3") 
  ButtonGadget(2, 120, 15, 100, 24, "Créer Bouton 3") 
  ButtonGadget(3, 230, 15, 80, 24, "Bouton 3") 
  ButtonGadget(4, 10, 50, 100,24, "Renommer Bouton 3")
  ButtonGadget(5, 120, 50, 100, 24, "Liste Cont-Gadget")
  
  CloseGadgetList() 
  
  
  BindGadgetEvent(3,@EventBouton3())
  
  ;Gerer liste gadget du container
  AddElement(ContainerListGadget())
  ContainerListGadget() = GadgetID(1)
  AddElement(ContainerListGadget())
  ContainerListGadget() = GadgetID(2)
  AddElement(ContainerListGadget())
  ContainerListGadget() = GadgetID(3)
  AddElement(ContainerListGadget())
  ContainerListGadget() = GadgetID(4)
  AddElement(ContainerListGadget())
  ContainerListGadget() = GadgetID(5)
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1 ;Supprimer Bouton 3
            If IsGadget(3) <> 0
              UnbindGadgetEvent(3, @EventBouton3()) 
              FreeGadget(3)
              SelectElement(ContainerListGadget(), 3-1)
              ContainerListGadget() = -1
              
            EndIf
            
          Case 2 ;Créer Bouton 3
            If IsGadget(3) = 0
              OpenGadgetList(0)
              ButtonGadget(3, 230, 15, 80, 24, "Bouton 3") 
              BindGadgetEvent(3, @EventBouton3()) 
              SelectElement(ContainerListGadget(), 3-1)
              ContainerListGadget() = GadgetID(3)
            EndIf
            
          Case 4 ;Renommer Bouton 3
            If IsGadget(3) <> 0
              If GetGadgetText(3) = "OK"
                SetGadgetText(3, "Bouton 3")
                
              Else
                SetGadgetText(3, "OK")
              EndIf 
              ResizeGadget(3,#PB_Ignore ,#PB_Ignore ,GadgetWidth(3, #PB_Gadget_RequiredSize),#PB_Ignore )
            EndIf
            
          Case 5 ; Afficher liste
            i=1
            ForEach ContainerListGadget()
              tmp=ContainerListGadget()
              Debug "Gadget "+ Str(i) + " ID="+Str(tmp)
              If tmp <> -1
                type = GadgetType(i)
                Select type
                  Case #PB_GadgetType_Button 
                    Debug "C'est un bouton: Button"
                    
                EndSelect
              EndIf
              i=i+1
            Next
            
            
        EndSelect
        
    EndSelect
    
  Until Event = #PB_Event_CloseWindow
  
EndIf   
M.
Avatar de l’utilisateur
Guillot
Messages : 521
Inscription : jeu. 25/juin/2015 16:18

Re: gadget : pouvoir acceder à la gadgetlist d'un container

Message par Guillot »

à zorro:
bravo pour tes textes colorés (j'imagine que tu t'es fais un utilitaire pour ça)
merci pour tes explication, mais je connais tous ça
moi ce que je veux c'est la liste des identifiants des gadgets contenu dans un container afin de les modifier, les supprimer ...

à mesa:
tes liens semblent répondre à ma demande
(mais les derniers commentaires du 1er me motivent pas trop (de plus il date de 2006) et pour le 2eme, j'ai une constante introuvable (#Mac_Event_UpdateWindowList))
pour mes besoin immediat, je vais me gerer cette liste moi même
mais c'est un sacrée boulot si on veut prendre en compte tout les cas de figure ou la gadgetlist est modifiée
(toutes les fonctions de création de gadget + closewindow / OpenWindow / FreeGadget /CloseGadgetList / UseGadgetList / OpenGadgetList ...)
un peu con de réinventer la roue alors que cette liste existe déja en interne dans PB

je pense donc que cette demande est legitime et j'espêre que Fred va y répondre
ça me parrait indispenssable
(et également, une fonction pour connaitre le gadget parent (container))
Répondre