[RESOLU] ListIconGadget dynamiquement

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

[RESOLU] ListIconGadget dynamiquement

Message par micam »

Bonjour,
Je cherche le moyen de créer des ListIconGadget dynamiquement.
J'ai réussi pour des panelgadget, mais la je bloque.
Ci joint un code rapide pour être plus clair.
Mon code exemple n'est pas parfait, c'est juste pour essayer de vous faire comprendre mon besoin.
Je passe par une base de données sqlite pour gérer certains gadgets dynamique (plus pratique pour moi),
et pour l'exemple ci-joint j'ai remplacé les "GetDatabaseString(Bdd_Onglets, 1))" et "GetDatabaseString(Bdd_ListIcon, 2))"
par les variables "NomTab.s" et "NouveauListIcon.s".
Si une âme charitable a une idée...
Merci d'avance.

Code : Tout sélectionner

Global Window_1

Global Panel_0, ListIcon_0, Frame3D_Tab, Button_Tab, Frame3D_List, Button_List, Frame3D_Tab_Variable, Button_Tab_Variable, Frame3D_List_variable, Button_List_variable, String_Nom, Text_0
Global NouveauListIcon.s, NomTab.s

Procedure OpenWindow_1(x = 0, y = 0, width = 710, height = 460)
  Window_1 = OpenWindow(#PB_Any, x, y, width, height, "Ajouter Tab et ListIcon Dynamique", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  Panel_0 = PanelGadget(#PB_Any, 10, 10, 650, 200)
  AddGadgetItem(Panel_0, -1, "Tab 1")
  ListIcon_0 = ListIconGadget(#PB_Any, 0, 0, 650, 180, "Column 1", 100)
  SetGadgetColor(ListIcon_0, #PB_Gadget_BackColor,RGB(216,254,254))
  SetGadgetAttribute(ListIcon_0, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon)
  CloseGadgetList()
  Frame3D_Tab = FrameGadget(#PB_Any, 20, 270, 280, 70, "Ajouter Tab dynamiquement")
  Button_Tab = ButtonGadget(#PB_Any, 120, 300, 100, 25, "Ajouter Tab")
  Frame3D_List = FrameGadget(#PB_Any, 330, 270, 330, 70, "Ajouter ListIconGadget dynamiquement")
  Button_List = ButtonGadget(#PB_Any, 450, 300, 100, 25, "Ajouter LisIcon")
  Frame3D_Tab_Variable = FrameGadget(#PB_Any, 20, 350, 280, 70, "Ajouter Tab dynamiquement à partir d'une variable")
  Button_Tab_Variable = ButtonGadget(#PB_Any, 80, 380, 180, 25, "Ajouter Tab à partir d'une variable")
  Frame3D_List_variable = FrameGadget(#PB_Any, 330, 350, 330, 70, "Ajouter ListIconGadget dynamiquement à partir d'une variable")
  Button_List_variable = ButtonGadget(#PB_Any, 400, 380, 210, 25, "Ajouter LisIcon à partir d'une variable")
  String_Nom = StringGadget(#PB_Any, 110, 230, 140, 25, "")
  Text_0 = TextGadget(#PB_Any, 20, 240, 80, 25, "Nom du Tab")
EndProcedure

Procedure AjouteTab()
    OpenGadgetList(Panel_0)
  AddGadgetItem(Panel_0, -1, GetGadgetText(String_Nom))
EndProcedure

Procedure Ajoute_Tab_Depuis_Une_Variable()
  ;Cette variable provient d'une base de donnée
  NomTab = GetGadgetText(String_Nom)
    OpenGadgetList(Panel_0)
  AddGadgetItem(Panel_0, -1, NomTab )
EndProcedure

Procedure AjouteListIcon()
Global ListIcon_1 : If UseGadgetList(WindowID(Window_1)) : ListIcon_1 = ListIconGadget(#PB_Any, 0, 0, 585, 144, "Nom_Panel" , 585) : SetGadgetColor(ListIcon_1, #PB_Gadget_BackColor,RGB(46, 244, 216)) : SetGadgetAttribute(ListIcon_1, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon) : EndIf

EndProcedure

Procedure Ajoute_ListIcon_Depuis_Une_Variable()
  ;Cette variable provient d'une base de donnée, je suis obligé de faire comme ça.
  NouveauListIcon = "Global ListIcon_2 : If UseGadgetList(WindowID(Window_1)) : ListIcon_2 = ListIconGadget(#PB_Any, 0, 0, 585, 144," + Chr(34) + "Nom_Panel" + Chr(34) + " , 585) : SetGadgetColor(ListIcon_0, #PB_Gadget_BackColor,RGB(204, 156, 251)) : SetGadgetAttribute(ListIcon_0, #PB_ListIcon_DisplayMode, #PB_ListIcon_LargeIcon) : EndIf"
  ; C'est à partir de là que je ne sais pas quoi faire.
  ; Ajouter le panelgadget c'est facile puisque j'ai le "AddGadgetItem(Panel_0, -1, NomTab )",
  ;mais pour le "ListIcon" je n'ai rien trouvé.
EndProcedure

Procedure Window_1_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
        Case Button_Tab
          AjouteTab()
          
        Case Button_Tab_Variable
          Ajoute_Tab_Depuis_Une_Variable()
          
        Case Button_List
          AjouteListIcon()
          
        Case Button_List_variable
          Ajoute_ListIcon_Depuis_Une_Variable()
          
          Debug NouveauListIcon
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

OpenWindow_1()

Repeat
  event = WaitWindowEvent()
  WEvent = EventWindow()
Until Window_1_Events(event) = #False

End
Dernière modification par micam le dim. 30/juil./2017 14:21, modifié 1 fois.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: ListIconGadget dynamiquement

Message par microdevweb »

Bonjour,

Tu dois utiliser OpenGadgetList(Panel,Element)
Panel -->exemple: ton panel gadget
Element -->L'onglet du panel ou tu veux ajouter la liste

Exemple de code :

Code : Tout sélectionner

Enumeration 
  #MainForm
  #Panel
  #BtAdd
EndEnumeration
Global Dim  myLst.l(3)
Procedure EventBtAdd()
  ; Ici je regarde quel panel est actif
  Protected TabActif=GetGadgetState(#Panel)
  ; Je regarde si la liste n'existe pas déjà
  If Not IsGadget(myLst(TabActif))
    ; j'ouvre le gadget list
    OpenGadgetList(#Panel,TabActif)
    ; Je crée le list icon
    myLst(TabActif)=ListIconGadget(#PB_Any,0,0,GadgetWidth(#Panel),GadgetHeight(#Panel),"List dans Tab "+Str(TabActif+1),GadgetWidth(#Panel))
    ; je referme le gadget list
    CloseGadgetList()
  EndIf
EndProcedure
Procedure Open()
  OpenWindow(#MainForm,0,0,800,600,"Teste",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ; Ajout du Panel
  PanelGadget(#Panel,0,0,800,500)
  ; Ajout de 3 onglets
  AddGadgetItem(#Panel,-1,"Tab 1")
  AddGadgetItem(#Panel,-1,"Tab 2")
  AddGadgetItem(#Panel,-1,"Tab 3")
  ; Je ferme le gadget list
  CloseGadgetList()
  ; Ajout d'un bouton ajout d'une liste icon
  ButtonGadget(#BtAdd,10,510,100,30,"Ajouter une liste")
  ; Mise en place des callback
  BindGadgetEvent(#BtAdd,@EventBtAdd())
EndProcedure

Open()

Repeat:WaitWindowEvent():Until Event()=#PB_Event_CloseWindow

Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
micam
Messages : 46
Inscription : ven. 27/avr./2012 15:29

Re: ListIconGadget dynamiquement

Message par micam »

Bonjour

C'est parfait.
J'ai pu l'adapter facilement à mes besoins.
Merci de ton aide.
Répondre