Seite 1 von 3
AddGadgetItem
Verfasst: 03.11.2005 19:24
von DataMiner
Hallöle Zusammen,
ich hätte da mal zwei Fragen:
Warum wird der Text bei AddGadgetItem nicht sofort angezeigt?
Code: Alles auswählen
hwnd = OpenWindow(0,100,100,400,400,#PB_Window_SystemMenu,"ListView")
CreateGadgetList(hwnd)
ListViewGadget(0,10,10,380,380)
;- add ListView entries
For a = 1 To 10000
AddGadgetItem(0,-1,"ListView Line "+Str(a))
Next a
;- Event loop
While WaitWindowEvent() <> #PB_EventCloseWindow : Wend
End
Und wie bekomme ich es hin, dass er sofort angezeigt wird?

Verfasst: 03.11.2005 19:34
von ts-soft
zu 2:
Code: Alles auswählen
hwnd = OpenWindow(0,100,100,400,400,#PB_Window_Invisible | #PB_Window_SystemMenu,"ListView")
CreateGadgetList(hwnd)
ListViewGadget(0,10,10,380,380)
;- add ListView entries
For a = 1 To 10000
AddGadgetItem(0,-1,"ListView Line "+Str(a))
Next a
While WindowEvent() : Wend
HideWindow(0, #False)
;- Event loop
While WaitWindowEvent() <> #PB_EventCloseWindow : Wend
End
zu 1: Weil Windows erst bei erreichen der Mainloop Gelegenheit kriegt, das zu refreshen!
Verfasst: 03.11.2005 19:46
von DataMiner
Verstecken ist ja ein netter Trick, aber nicht unbedingt praktikabel.
Gibt es den einen Weg das Refresh zu "erzwingen"?
Verfasst: 03.11.2005 19:50
von nicolaus
Und wenn du das ohne die WindowEvent moglichkeit machen möchtest wie TS es gezeigt hat geht auch noch die möglichkeit per API und der Funktion UpdateWindow_().
Beispiel:
Code: Alles auswählen
hwnd = OpenWindow(0,100,100,400,400,#PB_Window_SystemMenu,"ListView")
CreateGadgetList(hwnd)
ListViewGadget(0,10,10,380,380)
;- add ListView entries
For a = 1 To 10000
AddGadgetItem(0,-1,"ListView Line "+Str(a))
UpdateWindow_(GadgetID(0))
Next a
;- Event loop
While WaitWindowEvent() <> #PB_EventCloseWindow : Wend
End
Ich persönlich habe die möglichkeit von mir lieber da die sache mit dem WindowEvent eher so ne art Notlösung ist wobei UpdateWindow_() ja dafür direkt gedacht ist.
Ist natürlich jedem selber überlassen.
Gruß,
Nico
Verfasst: 03.11.2005 19:51
von ts-soft
DataMiner hat geschrieben:Verstecken ist ja ein netter Trick, aber nicht unbedingt praktikabel.
Ist aber der normale Weg
DataMiner hat geschrieben:
Gibt es den einen Weg das Refresh zu "erzwingen"?
Ja,
Alles andere Funktioniert ja auch erst, nachdem eine Event-Schleife exisitiert, ohne diese kann Windows nichts aktualisieren.
//Nachtrag: Nicos Möglichkeit hab ich nicht bedacht, bringt aber auch keine Vorteile, sondern erfordert API und ist nicht Plattformübergreifend
Verfasst: 03.11.2005 19:58
von DataMiner
Hej, danke für die Antworten!
Eine Kombination aus beiden bringt´s:
Code: Alles auswählen
hwnd = OpenWindow(0,100,100,400,400,#PB_Window_SystemMenu,"ListView")
CreateGadgetList(hwnd)
ListViewGadget(0,10,10,380,380)
;- add ListView entries
For a = 1 To 1000000
AddGadgetItem(0,-1,"ListView Line "+Str(a))
UpdateWindow_(GadgetID(0))
WindowEvent()
Next a
;- Event loop
While WaitWindowEvent() <> #PB_EventCloseWindow : Wend
End

Verfasst: 03.11.2005 20:02
von nicolaus
das WindowEvent() kannst du eigentlich weg lassen.
Verfasst: 03.11.2005 20:28
von ts-soft
genau, und bei meiner ersten Lösung ist die CPU Last von 100% am kürzesten!
Verfasst: 03.11.2005 20:41
von DataMiner
Hmpf!
Dann halt so:
Code: Alles auswählen
hwnd = OpenWindow(0,100,100,400,400,#PB_Window_SystemMenu,"ListView")
CreateGadgetList(hwnd)
ListViewGadget(0,10,10,380,380)
;- add ListView entries
For a = 1 To 100000
AddGadgetItem(0,-1,"ListView Line "+Str(a))
UpdateWindow_(GadgetID(0))
WindowEvent()
Sleep_(1)
Next a
;- Event loop, nur damit das Fenster geöffnet bleibt.
While WaitWindowEvent() <> #PB_EventCloseWindow : Wend
End

Verfasst: 03.11.2005 20:50
von ts-soft
Oder so, entspricht aber fast der ersten Lösung
Code: Alles auswählen
ExamineDesktops()
hwnd = OpenWindow(0,DesktopWidth(0),100,400,400, #PB_Window_SystemMenu,"ListView")
CreateGadgetList(hwnd)
ListViewGadget(0,10,10,380,380)
;- add ListView entries
For a = 1 To 10000
AddGadgetItem(0,-1,"ListView Line "+Str(a))
Next a
While WindowEvent() : Wend
MoveWindow(100, 100)
;- Event loop
While WaitWindowEvent() <> #PB_EventCloseWindow : Wend
End