Seite 1 von 1

[GELÖST] ScrollAreaGadget alle Gadget entfernt

Verfasst: 26.01.2018 12:20
von marcelx
Hallo,

gibt es eine Möglichkeit alle Gadget in ein ScrollAreaGadget zu entfernen ohne in eine Schleifen mit FreeGadget?

Code: Alles auswählen

Enumeration
  #button
  #area
  #Preview
EndEnumeration

Procedure setArea()
  TextGadget(#PB_Any, 10,  10, 250, 20, "TextGadget")
  StringGadget(#PB_Any, 10,  40, 250, 20, "StringGadget...")
  ; und noch viel mehr ...  
EndProcedure

Procedure deleteArea()
  Debug "deleteArea"
EndProcedure

If OpenWindow(0, 0, 0, 350, 300, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(#button, 100, 20, 90, 20, "delete")

  ScrollAreaGadget(#area, 10, 50, 300,200, 470, 400, #PB_Ignore, #PB_ScrollArea_Flat )
  setArea()
  CloseGadgetList()

  Repeat
    event = WaitWindowEvent()
    Select event
      Case  #PB_Event_Gadget
        EventGadget = EventGadget()
        Select EventGadget
          Case #button
            deleteArea()
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
Danke und Gruß
MarcelX

Re: ScrollAreaGadget alle Gadget entfernt

Verfasst: 26.01.2018 12:48
von Bisonte
Ich habe da ein wenig experimentiert....

Anscheinend werden alle Gadgets entfernt, wenn man das "ParentGadget" per FreeGadget() entfernt.

Also würde es reichen, das ScrollAreaGadget per FreeGadget zu löschen und alles wieder neu zu erstellen.

Hier um meine These zu beweisen :

Code: Alles auswählen

 Enumeration
  #button
  #area
  #Preview
EndEnumeration
Global t1, s1
Procedure setArea()

    t1 = TextGadget(#PB_Any, 10,  10, 250, 20, "TextGadget")
    s1 = StringGadget(#PB_Any, 10,  40, 250, 20, "StringGadget...")


  ; und noch viel mehr ... 
EndProcedure

Procedure deleteArea()
  Debug "deleteArea"
  FreeGadget(#area)
  If IsGadget(t1)
    Debug "Gadgets sind noch Da!"
  EndIf
  ScrollAreaGadget(#area, 10, 50, 300,200, 470, 400, #PB_Ignore, #PB_ScrollArea_Flat )
  setArea()
  CloseGadgetList()
  
EndProcedure

If OpenWindow(0, 0, 0, 350, 300, "Test", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ButtonGadget(#button, 100, 20, 90, 20, "delete")

  ScrollAreaGadget(#area, 10, 50, 300,200, 470, 400, #PB_Ignore, #PB_ScrollArea_Flat )
  setArea()
  CloseGadgetList()

  Repeat
    event = WaitWindowEvent()
    Select event
      Case  #PB_Event_Gadget
        EventGadget = EventGadget()
        Select EventGadget
          Case #button
            deleteArea()
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf 
Da das : " Debug "Gadgets sind noch Da!" " nicht aufgerufen wird.... verlass ich mich mal darauf ;)

Re: ScrollAreaGadget alle Gadget entfernt

Verfasst: 26.01.2018 13:59
von marcelx
Danke Bisonte,

es war mir nicht klar dass FreeGadget auf ScrollAreaGadget anwendbar ist.
Ist die Abfrage IsGadget(t1) im Grund genommen überflüssig.

Auf jedenfalls eine super Lösung.

Re: ScrollAreaGadget alle Gadget entfernt

Verfasst: 26.01.2018 14:05
von Bisonte
Das Beispiel soll nur meine Vermutung beweisen, das die erstellten Gadgets wirklich nicht mehr vorhanden sind...
Daher können meine "Änderungen" an deinem Code komplett ignoriert werden... bis auf das FreeGadget(#area) !

Re: [GELÖST] ScrollAreaGadget alle Gadget entfernt

Verfasst: 26.01.2018 15:18
von marcelx
War mir schon klar