Page 1 sur 1

Panelgadget() et gadget dynamiques, possible?

Publié : mer. 04/oct./2006 20:18
par Jacobus
Hello, j'essaie un panel pouvant ajouter des onglets à la volée avec des gadgets dynamiques. le problème c'est pour redonner le focus aux gadgets des onglets précédents.

Explication : ajout de plusieurs onglets, au besoin. C'est toujours le dernier onglet ajouté (ou créé) qui conserve leurs fonctions aux gadgets. Dès que l'on veut retourner sur un onglet précédent, les fonctions restent sur le dernier onglet créé.

exemple: Cliquez plusieurs fois sur le bouton ONGLET ajoutera un onglet comportant les mêmes gadgets, mais en revenant à un onglet précédent, vous ne le pourrez plus.

Code : Tout sélectionner

;CODE EN PB V4
Enumeration 
#Win_
#PANEL
EndEnumeration
If OpenWindow(#Win_,0,0, 400, 200,"Panel dynamique test", #PB_Window_SystemMenu |#PB_Window_WindowCentered |#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#Win_))=0  
    End 
  EndIf 
  PanelGadget(#PANEL,0,30,400,150) 
    AddGadgetItem(#PANEL, -1, "Onglet")
      btnCreate = ButtonGadget(#PB_Any,40,85,100,25,"ONGLET")      
      btnClose  = ButtonGadget(#PB_Any,145,85,100,25,"FERMER")     
  CloseGadgetList()
Repeat
    Event = WaitWindowEvent() 
    If Event = #PB_Event_Gadget
      Select EventGadget() 
      
        Case btnCreate
         AddGadgetItem (#PANEL, -1, "Onglet")
          btnCreate = ButtonGadget(#PB_Any,40,85,100,25,"ONGLET")
          btnClose  = ButtonGadget(#PB_Any,145,85,100,25,"FERMER")
          
        Case btnClose
         RemoveGadgetItem(#PANEL, GetGadgetState(#PANEL))

      EndSelect  
    EndIf 
  Until Event= #PB_Event_CloseWindow         
End 
Ma question est comment rendre les fonctions aux onglets précédents en mode dynamique? car je n'y parviens pas même avec GetGadgetState()

Si je me suis bien fais comprendre, auriez-vous une idée? si la chose est réalisable...
@+

Publié : jeu. 05/oct./2006 10:10
par brossden
Que pense tu de cela :

Code : Tout sélectionner


;CODE EN PB V4
Enumeration
  #Win_
  #PANEL
EndEnumeration
Global Dim btnClose(100),Dim btnCreate(100),n

If OpenWindow(#Win_,0,0, 400, 200,"Panel dynamique test", #PB_Window_SystemMenu |#PB_Window_WindowCentered |#PB_Window_TitleBar)=0 Or CreateGadgetList(WindowID(#Win_))=0 
  End
EndIf
PanelGadget(#PANEL,0,30,400,150)
AddGadgetItem(#PANEL, -1, "Onglet")
btnCreate(n) = ButtonGadget(#PB_Any,40,85,100,25,"ONGLET")     
btnClose(n)  = ButtonGadget(#PB_Any,145,85,100,25,"FERMER")     
Debug Str(btnCreate(x))+"Cr"
Debug Str(btnClose(x))+"Cl"
n+1
Debug n
CloseGadgetList()
Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_Gadget
    EvGadget=EventGadget()
    Debug Str(EvGadget) +"Ev"

    For x=0 To n-1

    Select EvGadget
      Case btnCreate(x)
        AddGadgetItem (#PANEL, -1, "Onglet"+Str(n))
        btnCreate(n) = ButtonGadget(#PB_Any,40,85,100,25,"ONGLET")
        btnClose(n)  = ButtonGadget(#PB_Any,145,85,100,25,"FERMER")
        n+1
      Case btnClose(x)
  RemoveGadgetItem(#PANEL, GetGadgetState(#PANEL))
        
    EndSelect

    Debug Str(btnCreate(x))+"Cr"
    Debug Str(btnClose(x))+"Cl"
    Debug x
    Next
  EndIf
Until Event= #PB_Event_CloseWindow         
End

Publié : jeu. 05/oct./2006 19:49
par Jacobus
:D Nickel, ça fonctionne très bien!
J'ai pu l'adapter facilement pour mon projet, quelques bricoles à régler et ça roule. Le dynamisme est très intéressant à ce niveau.

Merci encore et @+

Publié : ven. 06/oct./2006 7:03
par brossden
Je suis content que tu es pu régler ton problème.