Fenster verzögert öffnen lassen

Anfängerfragen zum Programmieren mit PureBasic.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Fenster verzögert öffnen lassen

Beitrag von PB42 »

Moin,

mich stört, daß beim Öffnen des Programmfensters die Gadgets so kleckerweise nach und nach auf dem Fenster erscheinen. Es gibt doch irgendwie eine Möglichkeit, das Fenster verzögert öffnen zu lassen und ich wußte auch schonmal, wie das geht. Filmriß, ist weg. Kann mir das bitte nochmal jemand erklären? Danke.
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

Re: Fenster verzögert öffnen lassen

Beitrag von ts-soft »

Fenster versteckt öffnen, Gadgets aufbauen, While WindowEvent(): Wend, Fenster anzeigen.
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
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Re: Fenster verzögert öffnen lassen

Beitrag von PB42 »

Vielen Dank, werde ich versuchen, muß erstmal zum Dienst.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Re: Fenster verzögert öffnen lassen

Beitrag von PB42 »

Ich habe das mittlerweile ausprobiert, aber zur eigenen Überraschung ändert das nicht die Bohne was. Irgendwie ging das aber, daß die Gadgets nicht alle kleckerweise auf den Bildschirm kommen, wenn man das Programm startet, sondern schön alle zugleich. Wenn ich das bloß abgespeichert hätte! Weitere Vorschläge erwünscht, Danke.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fenster verzögert öffnen lassen

Beitrag von Kiffi »

@PB42: Die Vorgehensweise, die Thomas Dir vorgeschlagen hat,
ist genau der richtige Weg. Wenn es bei korrekter Anwendung
der von ihm genannten Schritte bei Dir nicht funktioniert, solltest
Du sicherheitshalber mal Deinen Code posten. Kann ja sein, dass
Du Threads oder Timer verwendest.

Code: Alles auswählen

OpenWindow(DeinFenster, ..., ... #PB_Window_Invisible)

[...]

While WindowEvent()
Wend

HideWindow(DeinFenster, #False)

[WaitWindowEvent-Schleife]
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: Fenster verzögert öffnen lassen

Beitrag von PureLust »

Kiffi hat geschrieben:@PB42: Die Vorgehensweise, die Thomas Dir vorgeschlagen hat,
ist genau der richtige Weg.
Jo, hatte ich auch anfänglich gedacht, bis ich es ausprobiert habe. :roll:
Das "Erstellen" der Gadgets wird dadurch zwar unsichtbar, nicht jedoch der Refresh (der bei einem sichtbar machen des Fensters ja eingeleitet wird).
Ich habe das hier mal schnell mit einem kleinen Testcode überprüft, bei dem 50 ListIconGadgets() in einem Fenster erstellt werden.
Auf meinem PC dauert dieser Refresh nur weniger Millisekunden, bei 500 ListIconGadgets() dann aber schon in etwa 300 Millisekunden, was man wiederum deutlich sehen kann.

Nun nehme ich mal an, dass der PC von PB42 nicht sonderlich schnell ist, und somit der reine Refresh der Gadgets (nach dem sichtbar machen des Fensters) schon recht lange bei ihm dauert.
Den kann man durch einfaches Verstecken des Fensters natürlich nicht verhindern.

Anbei mal der kleine Testcode:

Code: Alles auswählen

; OpenWindow(0,-8000,0,800,600,"Tons of Gadgets", #PB_Window_SystemMenu)
OpenWindow(0,0,0,800,600,"Tons of Gadgets", #PB_Window_SystemMenu | #PB_Window_Invisible | #PB_Window_ScreenCentered)

For n = 1 To 500
	ListIconGadget(#PB_Any, Random(600), Random(450), 200, 150, "ListIconGadget-"+Str(n),200)
Next n
; SmartWindowRefresh(0,#True) 

timer = ElapsedMilliseconds()
While ElapsedMilliseconds() < timer + 500
	While WindowEvent() : Wend
	Delay(1)
Wend

; ResizeWindow(0,200,#PB_Ignore,#PB_Ignore,#PB_Ignore)
HideWindow(0, #False)

AddWindowTimer(0,0,2000)

Repeat
	Event = WaitWindowEvent()
	If Event = #PB_Event_Timer
		HideWindow(0, #True)
		HideWindow(0, #False)
	endif
	;Debug Event
Until Event = #PB_Event_CloseWindow
Greetz, PL
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Fenster verzögert öffnen lassen

Beitrag von bobobo »

der code ist mist .. (mit verlaub) :mrgreen: . .sowas macht doch niemand in ernsthaften Anwendungen und PB42 sicher auch nicht.

überlappende Gadgets sollten mit VB nicht unter Version 6 bestraft werden.

da reicht es schon ein Windowsrefresh (überdeckendes Fenster wegziehen) und die Orgie geht los.

ich sag mal : CODE HER
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Re: Fenster verzögert öffnen lassen

Beitrag von PB42 »

Vielen Dank nochmal. Den Code kann ich jetzt hier nicht einstellen, weil der einfach zu lang ist. Dann brauchen die Gadgets halt eine Weile, bis die alle auf dem Fenster da sind.
Antworten