Seite 1 von 1

Problem mit Scrollarea Gadget

Verfasst: 25.06.2011 13:34
von a14xerus
Hallo Leute, ich habe ein Problem mit dem Scrollaregadget...

Ich benutze UseGadgetList um im Programverlauf weitere Gadgets in die Scrollarea hinzuzufügen.
Allerdings kann ich diese Gadgets nicht benutzen (Ich kann die Stringgadgets nicht anklicken) und sobald die neuen erstellten Gadgets dann über den aktuell Sichtbaren bereich hinausgehen verschieben sich alle Gadgets in der Area wenn ich Scrolle....

Also auf jeden Fall mache ich anscheinend irgendetwas falsch.

Hier mal der Code

Code: Alles auswählen

EnableExplicit

Enumeration
  #W_Main
EndEnumeration
Enumeration
  #M_Open
  #M_Save
  #M_Close
EndEnumeration
Enumeration
  #G_ProgramScroll
EndEnumeration


Structure newline
  gadget1.i
  gadget2.i
  gadget3.i
EndStructure

Global NewList lines.newline()


Procedure Window()
  If OpenWindow(#W_Main, 0, 0, 800, 520, "", #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_Invisible)
    If CreateMenu(#W_Main,WindowID(#W_Main))
      MenuTitle("File")
      MenuItem(#M_Open,"Open")
      MenuItem(#M_Save,"Save")
      MenuBar()
      MenuItem(#M_Close,"Close")
      
      ScrollAreaGadget(#G_ProgramScroll, 10, 10, 230, 480, 210, 470)
        AddElement(lines())
        lines()\gadget1 = StringGadget(#PB_Any, 10, 20, 40, 20, "0")
        lines()\gadget2 = StringGadget(#PB_Any, 55, 20, 55, 20, "")
        lines()\gadget3 = StringGadget(#PB_Any, 115, 20, 60, 20, "")
      CloseGadgetList()
    EndIf
  EndIf
EndProcedure
Procedure init()
  Window()
  
  HideWindow(#W_Main,0)
EndProcedure
  
Procedure close()
  End
EndProcedure
  
Procedure loop()
  Protected event.l, gadget.l, menu.l
  Repeat
    event = WaitWindowEvent(20)
    
    Protected timer.i
    If ElapsedMilliseconds() > timer + 500
      timer = ElapsedMilliseconds()      
      
      AddElement(lines())
      
      ; Scrollarea bei bedarf erweitern
      If ListSize(lines())*25+20+20 > 470
        SetGadgetAttribute(#G_ProgramScroll,#PB_ScrollArea_InnerHeight,ListSize(lines())*25+20+20+10)
      Else
        SetGadgetAttribute(#G_ProgramScroll,#PB_ScrollArea_InnerHeight,470)
      EndIf
      
      UseGadgetList(GadgetID(#G_ProgramScroll))
      lines()\gadget1 = StringGadget(#PB_Any, 10, 20+25*ListIndex(lines()), 40, 20, Str(ListIndex(lines())))
      lines()\gadget2 = StringGadget(#PB_Any, 55, 20+25*ListIndex(lines()), 55, 20, "")
      lines()\gadget3 = StringGadget(#PB_Any, 115, 20+25*ListIndex(lines()), 60, 20, "")
      
    EndIf
    
    
    Select event
      Case #WM_PAINT
        Continue
      Case 0
        Continue
      Case #WM_CLOSE
        close()
      Case #PB_Event_Gadget
        gadget = EventGadget()
        Select gadget
            
        EndSelect
    EndSelect
  ForEver
EndProcedure
  
Procedure main()
  init()
  loop()
EndProcedure
  
  
main()

Re: Problem mit Scrollarea Gadget

Verfasst: 25.06.2011 13:39
von RSBasic
Hi a14xerus,


wenn du Gadgets nachträglich hinzufügen möchtest, musst du auch vorher die GadgetList von deinem ScrollAreaGadget öffnen:

Code: Alles auswählen

OpenGadgetList(#G_ProgramScroll)
      lines()\gadget1 = StringGadget(#PB_Any, 10, 20+25*ListIndex(lines()), 40, 20, Str(ListIndex(lines())))
      lines()\gadget2 = StringGadget(#PB_Any, 55, 20+25*ListIndex(lines()), 55, 20, "")
      lines()\gadget3 = StringGadget(#PB_Any, 115, 20+25*ListIndex(lines()), 60, 20, "")
      CloseGadgetList()
Sonst sind sie außerhalb der Gadgetliste.

Re: Problem mit Scrollarea Gadget

Verfasst: 25.06.2011 13:40
von a14xerus
achso ich dachte das würde mit "usegadgetlist" gehen, ich probier es eben aus

//edit: jap klappt alles, danke =)

Re: Problem mit Scrollarea Gadget

Verfasst: 25.06.2011 13:44
von RSBasic
Nein, UseGadgetList() ist nur für die Window-Gadgetliste zuständig, so dass du Gadgets nachträglich auf verschiedenen Fenstern erstellen kannst.
OpenGadgetList() ist für bestimmte Gadgets zuständig, wie PanelGadget, ContainerGadget u.ä.