Compatibilité de deux ListIconGadgets dans une même boucle

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
F6LYON
Messages : 6
Inscription : lun. 06/avr./2009 20:08

Compatibilité de deux ListIconGadgets dans une même boucle

Message 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
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
F6LYON
Messages : 6
Inscription : lun. 06/avr./2009 20:08

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

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

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

Message 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 ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
F6LYON
Messages : 6
Inscription : lun. 06/avr./2009 20:08

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

Message 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
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

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

Message 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:
Répondre