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,

Code: Alles auswählen

While WindowEvent()  : Wend
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
:allright:

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
:mrgreen:

Verfasst: 03.11.2005 20:50
von ts-soft
Oder so, entspricht aber fast der ersten Lösung :mrgreen:

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