AddGadgetItem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

AddGadgetItem

Beitrag 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?

:?
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag von DataMiner »

Verstecken ist ja ein netter Trick, aber nicht unbedingt praktikabel.
Gibt es den einen Weg das Refresh zu "erzwingen"?
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag 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
Zuletzt geändert von nicolaus am 03.11.2005 19:52, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag 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:
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

das WindowEvent() kannst du eigentlich weg lassen.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

genau, und bei meiner ersten Lösung ist die CPU Last von 100% am kürzesten!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag 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:
__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten