Problem mit Scrollarea Gadget

Für allgemeine Fragen zur Programmierung mit PureBasic.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Problem mit Scrollarea Gadget

Beitrag 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()
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Problem mit Scrollarea Gadget

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Re: Problem mit Scrollarea Gadget

Beitrag von a14xerus »

achso ich dachte das würde mit "usegadgetlist" gehen, ich probier es eben aus

//edit: jap klappt alles, danke =)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Problem mit Scrollarea Gadget

Beitrag 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.ä.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten