Page 1 sur 1

Compatibilité de deux ListIconGadgets dans une même boucle

Publié : lun. 13/mai/2019 15:25
par F6LYON
Bonjour,

Je ne comprends pas le nature du problème, ni mon erreur de logique.

Je crée deux ListIconGadgets strictement semblables et je souhaite les mettre à jour de la même façon dans une boucle.
La boucle est infinie, l'action commandée par un interrupteur logique.
Lorsque je lance l'appli le premier gadget (dans l'ordre de la création) se met à jour mais pas le second. A l'interruption du process ( interrupteur #Flase, la boucle fonctionnant toujours) le second gadget se met seulement à jour alors qu'il n'est logiquement plus sollicité.
Si je change l'ordre de déclaration des gadgets, (dé-commenter ligne 42 et commenter ligne 47), c'est bien le second déclaré qui ne répond pas.
Pouvez- vous n'indiquer où est l'erreur dans la logique de mon code ?
Merci de vos lumières.

Code : Tout sélectionner

EnableExplicit

  Declare Interrupteur()
  Declare Approvisionner()
  Declare IHM()
  Global Flag_Inter.b
  Global StokF.f = 5000, StokT.f =0
  
  IHM()
  
Repeat:WindowEvent():Approvisionner(): Delay(1): ForEver

Procedure QuitFen()
    End
EndProcedure

Procedure IHM()
    Enumeration
        #Fen
        #MenuFen
        #QuitFen
        #Bt_Marche_Arret
        #ListIcone1
        #ListIcone2
        #ProgrBar1
        #ProgrBar2
    EndEnumeration
    
    Define Flg.i, Fht.i, PosX.i , PosY.i, Options.i, Titre.s
    Flg.i = 600:Fht = 480 : PosX = 200: PosY = 200
    Options =  #PB_Window_SystemMenu|#PB_Window_BorderLess
    Titre.s ="Fenêtre principale"    
    OpenWindow(#Fen,PosX,PosY,Flg,Fht,Titre,Options)
    SetWindowColor(#Fen,$5F6638)
    AddKeyboardShortcut(#Fen,#PB_Shortcut_Escape,4);Quitte l'appli avec Escape
    CreateMenu(#MenuFen,WindowID(#Fen))
    MenuTitle("Fichier")
    MenuItem(4,"Quitter")
    ButtonGadget(#QuitFen,Flg-140,Fht-70,120,30,"Quitter")
    ButtonGadget(#Bt_Marche_Arret,Flg-500,Fht-70,120,30,"Marche / Arrêt")
    
   ; ListIconGadget(#ListIcone2,10,180,300,150,"Stock Transformateur",150)
    
    ListIconGadget(#ListIcone1,10,10,300,150,"Stock Fournisseur",150)
    AddGadgetColumn(#ListIcone1,1,"Quantité ",140)
    AddGadgetItem(#ListIcone1,1,"Minerai fer"+Chr(10)+StrF(StokF,2))
    ListIconGadget(#ListIcone2,10,180,300,150,"Stock Transformateur",150)
    AddGadgetColumn(#ListIcone2,1,"Quantité ",140)
    AddGadgetItem(#ListIcone2,0,"Minerai fer"+Chr(10)+StrF(StokT,2))
    ProgressBarGadget(#ProgrBar1,320,10, 30,150,0,5000,#PB_ProgressBar_Vertical)
    SetGadgetColor(#ProgrBar1,#PB_Gadget_FrontColor,$053D4C)
    SetGadgetState(#ProgrBar1,StokF.f)
    ProgressBarGadget(#ProgrBar2,320,180, 30,150,0,5000,#PB_ProgressBar_Vertical)
    SetGadgetColor(#ProgrBar2,#PB_Gadget_FrontColor,$053D4C)
    SetGadgetState(#ProgrBar2,StokT.f)
    
    BindEvent(#PB_Event_CloseWindow,@QuitFen())
    BindMenuEvent(#MenuFen,4,@QuitFen())
    BindGadgetEvent(#QuitFen,@QuitFen())
    BindGadgetEvent(#Bt_Marche_Arret,@Interrupteur())
EndProcedure

Procedure Interrupteur() 
    If  Flag_Inter = 1 :Flag_Inter = 0 : Else :Flag_Inter = 1 : EndIf 
EndProcedure

Procedure Approvisionner() 
    If Flag_Inter 
          StoKf-1
          StokT+1
          If StokT > 4999 : Flag_Inter =0 : EndIf
          SetGadgetItemText(#ListIcone1,0,StrF(StokF,2),1) : SetGadgetState(#ProgrBar1,StokF)          
          SetGadgetItemText(#ListIcone2,0,StrF(StokT,2),1) :  SetGadgetState(#ProgrBar2,StokT)   
    EndIf
EndProcedure
PB 5.70 LTS W7

Re: Compatibilité de deux ListIconGadgets dans une même bouc

Publié : lun. 13/mai/2019 15:37
par Marc56
C'est un classique du GadgetList qui n'est rafraîchi que dans certains cas.
Force la régénération de l'affichage de la liste 2 en ajoutant une boucle vide ligne 74
While WindowEvent() : Wend

Code : Tout sélectionner

Procedure Approvisionner() 
    If Flag_Inter 
        StoKf-1
        StokT+1
        If StokT > 4999 : Flag_Inter =0 : EndIf
        SetGadgetItemText(#ListIcone1,0,StrF(StokF,2),1) : SetGadgetState(#ProgrBar1,StokF) 
        SetGadgetItemText(#ListIcone2,0,StrF(StokT,2),1) : SetGadgetState(#ProgrBar2,StokT) 
        While WindowEvent() : Wend ; <--- Forcer le régénération de l'affichage de la liste
    EndIf
EndProcedure
:wink:

Re: Compatibilité de deux ListIconGadgets dans une même bouc

Publié : lun. 13/mai/2019 16:06
par F6LYON
Bonjour Marc56,

Merci de votre réponse. Le forçage du rafraichissement fonctionne bien.
Je n'ai donc pas d'erreur dans la logique de mon code.
Comme vous dites que c'est un classique du GadgetList, que OpenGadgetlist() est devenu obsolète, mais pas CloseGadgetList(), je prends l'astuce pour mon bréviaire!

Je m’aperçois que je me suis planté avec les balises du code, la prochaine fois...!

Cordialement

Re: Compatibilité de deux ListIconGadgets dans une même bouc

Publié : lun. 13/mai/2019 18:35
par Ar-S
Bonjour F6LYON.
J'ai édité ton post pour remettre les balises codes correctements.
Le plus simple est de mettre ton code en surbrillance et de cliquer sur la balise code plutôt de l'écrire manuellement. ça évite les erreurs ;)

Re: Compatibilité de deux ListIconGadgets dans une même bouc

Publié : lun. 13/mai/2019 19:52
par F6LYON
Bonsoir,

Merci Ar-s.
Cela a vraiment plus bel aspect.Je n'avais pas mis le code en surbrillance, ...
"forcement ça marche moins bien" (André bourvil). C'est moi "le corniaud" :wink:

Cordialement

Re: Compatibilité de deux ListIconGadgets dans une même bouc

Publié : mar. 14/mai/2019 16:51
par Marc56
Comme vous dites que c'est un classique du GadgetList, que OpenGadgetlist() est devenu obsolète, mais pas CloseGadgetList(),
Pas tout à fait: c'est CreateGadgetList qui est déprécié, car la GadgetList est créée implicitement par OpenWindow()

OpenGadgetList() quant à lui est toujours présent et est utilisé pour les gadgets qui en contiennent d'autres:

- ContainerGadget()
- PanelGadget()
- ScrollAreaGadget()

Il permet d'ajouter d'autres gadget dynamiquement dans une des listes.

https://www.purebasic.com/french/docume ... tlist.html

Les Gadgets dépréciés sont listés dans l'aide en anglais, mais pas dans celle en français.
https://www.purebasic.com/documentation ... index.html

:wink: