Page 1 sur 1

Problème rafraichissement ScrollArea

Publié : ven. 01/juin/2007 16:02
par popstatic
Bonjour à tous!
j'ai un probleme de rafraichissement de scrollarea: je crée des gadgets à la volée dans une scroll area, mais lorsque je fait défiler celle ci , ça les efface, du moins en partie!
Genant.

Code : Tout sélectionner

Enumeration
  #Window_0
  #Button_0
  #ScrollArea_0
EndEnumeration


Structure Gadget
Id.l
Nom.s
idnom.l
Taille.s
idtaille.l
Vitesse.s
idvitesse.l
Progress.l
idprogress.l
Frame.s
idframe.l
EndStructure

Global NewList Gadgets.Gadget()


Procedure AddGadget()
    nbgadgets.l=CountList(Gadgets())
    AddElement(Gadgets())
    If nbgadgets= 0
        dec.b=0
        Else
        dec.b=7
    EndIf
    If CreateGadgetList(WindowID(#Window_0))
      Gadgets()\idnom=TextGadget(#PB_Any, 10, 15+nbgadgets*90+dec, 320, 15, "Nom;")
      Gadgets()\idtaille=TextGadget(#PB_Any, 10, 35+nbgadgets*90+dec, 100, 15, "Taille:")
      Gadgets()\idvitesse=TextGadget(#PB_Any, 10, 55+nbgadgets*90+dec, 110, 15, "Vitesse:")
      Gadgets()\idprogress=ProgressBarGadget(#PB_Any, 10, 75+nbgadgets*90+dec, 325, 15, 0, 100)
      Gadgets()\idframe=Frame3DGadget(#PB_Any, 5, 5+nbgadgets*90+dec, 335, 90, "")
      If nbgadgets*(90+dec)> 515
        SetGadgetAttribute(#ScrollArea_0,#PB_ScrollArea_InnerHeight,nbgadgets*(90+dec))
      EndIf
    EndIf

EndProcedure


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 215, 137, 601, 534, "test",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
     If CreateGadgetList(WindowID(#Window_0))
        
        ScrollAreaGadget(#ScrollArea_0, 0, 0, 601,534, 580, 515, 30)
        ButtonGadget(#Button_0, 460, 470, 60, 20, "Ajouter")
     
     EndIf
   EndIf
   
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType()
  If Event = #PB_Event_Gadget
    If GadgetID = #Button_0
        AddGadget()
    EndIf
  EndIf
  Until Event = #PB_Event_CloseWindow ; End of the event loop

End
il faut cliquer environ 6 fois sur le bouton "ajouter" pour que la scrollarea "apparaisse"

Je ne sais vraiment pas comment permettre un redraw() de la fenetre... maintenant ce probleme m'a l'air si grossier que c'est tres ^robablement moi qui ai fait une faute....

merci d'avance à vous!

Publié : ven. 01/juin/2007 17:47
par Flype
oui effectivement tu t'y prend mal.

il faut faire plusieurs choses pour que çà fonctionne
mais ca reste simple quand meme, regardes.

1/ referme ton scrollareagadget() avec closegadgetlist()
2/ utilise opengadgetlist() et non creategadgetlist() et referme le aussi.
3/ voilà le resultat (2 ou 3 lignes modifiées) :

Code : Tout sélectionner

Enumeration
  #Window_0
  #Button_0
  #ScrollArea_0
EndEnumeration


Structure Gadget
  id.l
  nom.s
  idnom.l
  Taille.s
  idtaille.l
  Vitesse.s
  idvitesse.l
  Progress.l
  idprogress.l
  frame.s
  idframe.l
EndStructure

Global NewList Gadgets.Gadget()


Procedure AddGadget()
  nbgadgets.l=CountList(Gadgets())
  AddElement(Gadgets())
  If nbgadgets= 0
    dec.b=0
  Else
    dec.b=7
  EndIf
  If OpenGadgetList(#ScrollArea_0)
    Gadgets()\idnom=TextGadget(#PB_Any, 10, 15+nbgadgets*90+dec, 320, 15, "Nom;")
    Gadgets()\idtaille=TextGadget(#PB_Any, 10, 35+nbgadgets*90+dec, 100, 15, "Taille:")
    Gadgets()\idvitesse=TextGadget(#PB_Any, 10, 55+nbgadgets*90+dec, 110, 15, "Vitesse:")
    Gadgets()\idprogress=ProgressBarGadget(#PB_Any, 10, 75+nbgadgets*90+dec, 325, 15, 0, 100)
    Gadgets()\idframe=Frame3DGadget(#PB_Any, 5, 5+nbgadgets*90+dec, 335, 90, "")
    If nbgadgets*(90+dec)> 515
      SetGadgetAttribute(#ScrollArea_0,#PB_ScrollArea_InnerHeight,nbgadgets*(90+dec))
    EndIf
    CloseGadgetList()
  EndIf
  
EndProcedure


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 215, 137, 601, 534, "test",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
    If CreateGadgetList(WindowID(#Window_0))
      If ScrollAreaGadget(#ScrollArea_0, 0, 0, 601,534, 580, 515, 30)
        ButtonGadget(#Button_0, 460, 470, 60, 20, "Ajouter")
      EndIf
      CloseGadgetList() 
    EndIf
  EndIf
  
EndProcedure

Open_Window_0()

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  
  GadgetID = EventGadget() ; Is it a gadget event?
  
  EventType = EventType()
  If Event = #PB_Event_Gadget
    If GadgetID = #Button_0
      AddGadget()
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop

End
à part çà honnetement c'est très bien... c'est comme çà qu'on fait :wink:

Publié : sam. 02/juin/2007 22:40
par popstatic
Merciiiiiiiiiiiiii ^^
c'est génial, merci pour la rapidité et la pertinence!