PureBasic
https://www.purebasic.fr/french/

Compatibilité de deux ListIconGadgets dans une même boucle
https://www.purebasic.fr/french/viewtopic.php?f=1&t=17680
Page 1 sur 1

Auteur:  F6LYON [ Lun 13/Mai/2019 15:25 ]
Sujet du message:  Compatibilité de deux ListIconGadgets dans une même boucle

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:
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

Auteur:  Marc56 [ Lun 13/Mai/2019 15:37 ]
Sujet du message:  Re: Compatibilité de deux ListIconGadgets dans une même bouc

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:
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:

Auteur:  F6LYON [ Lun 13/Mai/2019 16:06 ]
Sujet du message:  Re: Compatibilité de deux ListIconGadgets dans une même bouc

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

Auteur:  Ar-S [ Lun 13/Mai/2019 18:35 ]
Sujet du message:  Re: Compatibilité de deux ListIconGadgets dans une même bouc

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 ;)

Auteur:  F6LYON [ Lun 13/Mai/2019 19:52 ]
Sujet du message:  Re: Compatibilité de deux ListIconGadgets dans une même bouc

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

Auteur:  Marc56 [ Mar 14/Mai/2019 16:51 ]
Sujet du message:  Re: Compatibilité de deux ListIconGadgets dans une même bouc

Citation:
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/documentation/gadget/opengadgetlist.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/gadget/index.html

:wink:

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/