abfrage: Fenster vollständig aufgebaut
abfrage: Fenster vollständig aufgebaut
HI,
zum Programmbeginn öffne ich mit openwindow() das Hauptfenster (unsichtbar,150 Gadgets), dann 10 Fenster (unsichtbar), dann geht's in die waitwindowevent()-Schleife.
Es entsteht nach dem Programmstart der Effekt, dass das Hauptfenstr sehr "schrittweise" aufgebaut wird. das dauert schonmal einige Sekunden und sieht sehr unschön aus. Gibt es eine Möglichkeit, abzufragen, ob ein Fenster vollständig aufgebaut ist?
zum Programmbeginn öffne ich mit openwindow() das Hauptfenster (unsichtbar,150 Gadgets), dann 10 Fenster (unsichtbar), dann geht's in die waitwindowevent()-Schleife.
Es entsteht nach dem Programmstart der Effekt, dass das Hauptfenstr sehr "schrittweise" aufgebaut wird. das dauert schonmal einige Sekunden und sieht sehr unschön aus. Gibt es eine Möglichkeit, abzufragen, ob ein Fenster vollständig aufgebaut ist?
Re: abfrage: Fenster vollständig aufgebaut
Poste bitte deinen Code, sonst können wir nicht sehen, warum die Benutzeroberfläche deines Fensters langsam aufgebaut wird.
Vermutung: Verwendest du vielleicht ein Delay() in deiner Event-Schleife?
Ansonsten kannst du dein Fenster auch mit #PB_Window_Invisible versteckt starten und nach der Gadgeterstellung zeigst du mit HideWindow(#DeinFenster, 0) wieder an.
Vermutung: Verwendest du vielleicht ein Delay() in deiner Event-Schleife?
Ansonsten kannst du dein Fenster auch mit #PB_Window_Invisible versteckt starten und nach der Gadgeterstellung zeigst du mit HideWindow(#DeinFenster, 0) wieder an.
Re: abfrage: Fenster vollständig aufgebaut
HI,
ok, dann mal das code-stück, von dem ich meine, dass es weiterhilft. falls nicht, sagt becheid, was noch gezeigt werden soll (es sind drzeit 4800 zeilen)
nein, es gibt kein delay(). Per debug habe ich herausgefunden, dass ca. 50x die waitweindowevent()-Schleife durchlaufen wird, bis das Hauptfenster (window_hd) aufgebaut ist. es ist fast egal, ob ich das Fenster gleich sichtbar öffne, oder später erst mit hidewindow sichtbar mache.
ok, dann mal das code-stück, von dem ich meine, dass es weiterhilft. falls nicht, sagt becheid, was noch gezeigt werden soll (es sind drzeit 4800 zeilen)
nein, es gibt kein delay(). Per debug habe ich herausgefunden, dass ca. 50x die waitweindowevent()-Schleife durchlaufen wird, bis das Hauptfenster (window_hd) aufgebaut ist. es ist fast egal, ob ich das Fenster gleich sichtbar öffne, oder später erst mit hidewindow sichtbar mache.
Code: Alles auswählen
.
.
.
OpenWindow_hd()
AddKeyboardShortcut(Window_hd, #PB_Shortcut_Escape,1)
AddKeyboardShortcut(Window_hd, #PB_Shortcut_F5,2) ; einspritzkennfeld
AddKeyboardShortcut(Window_hd, #PB_Shortcut_F6,3) ; Ansauglufttemperatur
AddKeyboardShortcut(Window_hd, #PB_Shortcut_F8,4) ; zündung
AddKeyboardShortcut(Window_hd, #PB_Shortcut_F7,41); motortemperatur
AddKeyboardShortcut(Window_hd, #PB_Shortcut_F1,20); Hilfeanzeige
AddKeyboardShortcut(window_hd, #PB_Shortcut_Return,21)
AddKeyboardShortcut(window_hd, #PB_Shortcut_Execute,22)
AddKeyboardShortcut(window_hd, #PB_Shortcut_Control|#PB_Shortcut_Alt|#PB_Shortcut_E,50)
SetGadgetAttribute(dateibeschreibung_hd,#PB_String_MaximumLength, 100)
SetGadgetText(dbgn_hd,Str(dbgn*100))
SetGadgetText(dbgw_hd,Str(dbgw))
hgr=GetSysColor_(#COLOR_BTNFACE) ; hintergrundfarbe ermitteln
StartDrawing(CanvasOutput(Canvas_0_com_hd))
Box(0,0,OutputHeight(),OutputWidth(),hgr)
Circle(OutputHeight()/2,OutputWidth()/2,OutputHeight()/2,RGB(0,0,0))
StopDrawing()
HideWindow(Window_hd,#False) ;jetzt erst aktivieren, damit Fenster möglichst "vollständig aufgebaut" erscheint,
SetActiveWindow(Window_hd) ; window hd aktivieren
Repeat
hgr=GetSysColor_(#COLOR_BTNFACE) ; aktuelle hintergrundfarbe holen für "Drawing", falls windows-stil geändert wurde...
AddWindowTimer(Window_hd,1,hd_timer)
event = WaitWindowEvent(); timeout = Abfragezeitspanne für Vitaldaten
RemoveWindowTimer(Window_hd,1)
eventmenu=EventMenu()
eventtype=EventType()
eventwindow=EventWindow()
znkl_kosys()
mtkl_kosys()
asltkl_kosys()
ankf_kosys()
kennfelder_aktualisieren()
.
.
.
Re: abfrage: Fenster vollständig aufgebaut
HI,
Nachtrag:
gerade herausprobiert: die procs
zeichnen auf den canvas(en) in window_hd. Wenn ich die in der Schleife mal auskommentiere, dann kommt das Fenster sofort vollständig - aber natürlich mit leeren canvas(en). Ich könnte also die procs so lange ausschalten, bis das window_hd vollständig ist. Deshalb meine Frage, wie man das abfragen könnte...
Nachtrag:
gerade herausprobiert: die procs
Code: Alles auswählen
znkl_kosys()
mtkl_kosys()
asltkl_kosys()
ankf_kosys()
Re: abfrage: Fenster vollständig aufgebaut
HI,
hab was gefunden:
...okok. nächstes Mal such ich intensiver, bevor ich euch nerve.
hab was gefunden:
wenn die zeile vor dem repeat steht, dann kommt das window_hd vollständig.While WindowEvent() : Wend
...okok. nächstes Mal such ich intensiver, bevor ich euch nerve.
- 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: abfrage: Fenster vollständig aufgebaut
Du führst folgende Proceduren ohne Ereignis aus:
Führe niemals Code im EventLoop ohne Ereignis aus! Wenn es kein Ereignis gibt, dann erstelle Dir selbst eins, z.B. einen Timer.
Außerdem gehört z.B. die Zeile:
nichts ins EventLoop und braucht auch nur einmal ausgeführt werden.
Code: Alles auswählen
znkl_kosys()
mtkl_kosys()
asltkl_kosys()
ankf_kosys() ...
Außerdem gehört z.B. die Zeile:
Code: Alles auswählen
hgr=GetSysColor_(#COLOR_BTNFACE)
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: abfrage: Fenster vollständig aufgebaut
HI,
es gibt ein Ereignis, den timer: hd_timer.
Aber Du meinst sicher, dass die 4 procs bei jedem Verlassen des waitwindosevent ausgeführt werden, obwohl es nicht zwingend notwendig ist. Da haste recht. Sinnvoll(er) ist nur die Ausführung, wenn der timer kommt.
Ich hab die vier procs in den timerauswerte-zweig gesteckt. Das behebt auch den Fensteraufbaueffekt und senkt die Prozessorlast dramatisch.
Danke für den Tip.
Nachtrag:
hgr brauch ich schon dort, weil... wenn man bei laufendem Programm das windows-schema ändert, muss ich die Fensterhintergrundfarbe neu holen. Kann man den win-schema-wechsel abfragen?
es gibt ein Ereignis, den timer: hd_timer.
Aber Du meinst sicher, dass die 4 procs bei jedem Verlassen des waitwindosevent ausgeführt werden, obwohl es nicht zwingend notwendig ist. Da haste recht. Sinnvoll(er) ist nur die Ausführung, wenn der timer kommt.
Ich hab die vier procs in den timerauswerte-zweig gesteckt. Das behebt auch den Fensteraufbaueffekt und senkt die Prozessorlast dramatisch.
Danke für den Tip.

Nachtrag:
hgr brauch ich schon dort, weil... wenn man bei laufendem Programm das windows-schema ändert, muss ich die Fensterhintergrundfarbe neu holen. Kann man den win-schema-wechsel abfragen?
- 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: abfrage: Fenster vollständig aufgebaut
Wer wechselt denn laufend das Windows-Schemakartmanne hat geschrieben:Nachtrag:
hgr brauch ich schon dort, weil... wenn man bei laufendem Programm das windows-schema ändert, muss ich die Fensterhintergrundfarbe neu holen. Kann man den win-schema-wechsel abfragen?

Hab auf jeden Fall noch nie gesehen, das jemand das öfter als beim Programmstart abfragt. Falls doch, dann frag das doch auch mit Timer ab,
was ich aber für absolut überflüssig halte. Ich habe auf jeden Fall, das Windows-Schema dieses Jahr noch nicht geändert!
Ob man den Schema-Wechsel abfragen kann, ist mir leider nicht bekannt, zu mal ich meist unter Linux arbeite.
Gruß
Thomas
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: abfrage: Fenster vollständig aufgebaut
HI,
jaja...
... mein "Programmtester" macht sowas. Den willste nicht im Team haben - der (er-)findet immer was. Wenn ich ihn mit solchen Dingen zufrieden stellen kann, tja..
Gottseidank ist das das einzige sinnfreie highlight bisher - die richtigen bugs findet er schon gut. Seine Such-Logik als Anwender ist da irgendwie bestechend...
jaja...



... mein "Programmtester" macht sowas. Den willste nicht im Team haben - der (er-)findet immer was. Wenn ich ihn mit solchen Dingen zufrieden stellen kann, tja..

Gottseidank ist das das einzige sinnfreie highlight bisher - die richtigen bugs findet er schon gut. Seine Such-Logik als Anwender ist da irgendwie bestechend...
