[gelöst] ListIconGadget schneller füllen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

DisableDebugger

OpenWindow(0,0,0,320,240,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
ListIconGadget(0,0,0,320,240,"Name",250)

StartTime = ElapsedMilliseconds()
For i=1 To 10000
	AddGadgetItem(0,-1,"List-View Item #" + Str(i))
Next
MessageRequester("Zeit",Str(ElapsedMilliseconds() - StartTime) + " MS",64)

ClearGadgetItemList(0)

SendMessage_(GadgetID(0),#WM_SETREDRAW,0,0)

StartTime = ElapsedMilliseconds()
For i=1 To 10000
	AddGadgetItem(0,-1,"List-View Item #" + Str(i))
Next
MessageRequester("Zeit",Str(ElapsedMilliseconds() - StartTime) + " MS",64)

SendMessage_(GadgetID(0),#WM_SETREDRAW,1,0)

While WaitWindowEvent() ! #PB_Event_CloseWindow : Wend
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Hab ich doch schon längst probiert, siehe mein Posting von 19:34:20.

Jetzt seit ihr zu dritt in der Ecke und könnt Skat spielen :lol:
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

SendMessage_(#main_list, #WM_SETREDRAW, #False, 0 ) 
:roll:
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Spielen wir jetzt heiteres Grimassenraten ?

Warum rollst Du mit den Glubschern ?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ich könnte jetzt sagen geh auf MSDN und schau dir Parameter dieses Befehls an dann würdest du wissen was ich meine. So ein Arschloch bin ich aber nicht! Bild

Der Befehl SendMessage_() erwartet als ersten Parameter keine Konstante sondern ein Fenster Handle.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Fluid Byte hat geschrieben:Der Befehl SendMessage_() erwartet als ersten Parameter keine Konstante sondern ein Fenster Handle.
Und warum benutzt Du dann in SendMessage_(GadgetID(0),#WM_SETREDRAW,0,0) eine Gadget-ID ?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

GadgetID() ist ein Befehl und keine ID. Du gibst lediglich eine ID als Parameter an um das Gadet festzulegen von welchem du das Handle ermitteln willst. Der Name ist wohl etwas verwirrend da "ID" im Namen enthalten ist du aber tatsächlich ein Handle erhältst was für diversen API Schnick-Schnack nötig ist.

Gadgets sind ebenfalls nichts weiter als normale Fenster.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Wenn ich SendMessage_(GadgetID(#main_win), #WM_SETREDRAW, #False, 0 ) verwende,
bekomme ich [ERROR] #Gadget object not initialized :shock:

Wenn ichSendMessage_(GadgetID(#main_list), #WM_SETREDRAW, #False, 0 ) verwende, läufts genauso langsam, wie vorher.

Wenn ichSendMessage_(WindowID(#main_win), #WM_SETREDRAW, #False, 0 ) verwende, läufts genauso langsam, wie vorher.

Mit "genauso langsam" sind Werte von ca 22000 Milisekunden gemeint, +/- 300-500 Millisekunden.

Da ich bei Deinem Code Werte von 500 zu 130 +/- 10-25 ms bekomme, deckt sich der "Gewinn" und ich bin genauso weit wie vorher, oder hab ich nochwas flasch gemacht ?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ufff, du bist 'ne harte Nuss ... Bild
scholly hat geschrieben:Wenn ich SendMessage_(GadgetID(#main_win), #WM_SETREDRAW, #False, 0 ) verwende,
bekomme ich [ERROR] #Gadget object not initialized :shock:
Du gibts ID eines Fenster an, gebraucht wird aber die vom ListIconGadget().
scholly hat geschrieben:Wenn ichSendMessage_(GadgetID(#main_list), #WM_SETREDRAW, #False, 0 ) verwende, läufts genauso langsam, wie vorher.
Wage ich stark zu bezweifeln. Ich kann aber sowie nur Tipps geben da ich deine DB nicht habe und den Code nie unter realistischen Verhältnissen testen kann.
scholly hat geschrieben:Wenn ichSendMessage_(WindowID(#main_win), #WM_SETREDRAW, #False, 0 ) verwende, läufts genauso langsam, wie vorher.
Wie beim ersten Versuch, nur hast du hier auch noch den falschen Befehl verwendet: WindowID() != GadgetID() Bild
scholly hat geschrieben:Da ich bei Deinem Code Werte von 500 zu 130 +/- 10-25 ms bekomme, deckt sich der "Gewinn" und ich bin genauso weit wie vorher, oder hab ich nochwas flasch gemacht ?
Werte 500 zu 130? Nein, ich glaube du mischt die Ergebnisse hier. Der erste Dialog zeigt die Zeit ohne #WM_SETREDRAW und der zweite mit.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Fluid Byte hat geschrieben:Ufff, du bist 'ne harte Nuss ...
Nuja, ich will ja nicht, daß man hinterher beim Starten der DB oder filtern der Daten Kaffe trinken gehen kann.
Und ich lerne manchmal gerne ;)
Fluid Byte hat geschrieben:Werte 500 zu 130? Nein, ich glaube du mischt die Ergebnisse hier. Der erste Dialog zeigt die Zeit ohne #WM_SETREDRAW und der zweite mit.
Ja. der erste Wert ist doch mit 500 höher, als der zweite mit 130.
So sollte es doch sein, oder nicht ?
Ist bei Dir der 2. Wert höher als der erste ?

Ändere doch bitte Dein Beispiel mal so, daß das Fenster und das LIG nicht beide 0 sind, sondern das Fenster 0 und das LIG 1 hat.
Bei mir kackts jetzt bei SendMessage_(GadgetID(0),#WM_SETREDRAW,0,0)ab.
Wenn ich nun aber nach SendMessage_(GadgetID(1),#WM_SETREDRAW,0,0) ändere, gehts wieder.

Erklär mir bitte, warum, SentMessage_ tuts doch augenscheinlich mitm Gadget und nicht mitm Window :freak:
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten