Seite 1 von 1

abfrage: Fenster vollständig aufgebaut

Verfasst: 10.07.2016 15:47
von kartmanne
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?

Re: abfrage: Fenster vollständig aufgebaut

Verfasst: 10.07.2016 15:50
von RSBasic
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.

Re: abfrage: Fenster vollständig aufgebaut

Verfasst: 10.07.2016 16:01
von kartmanne
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.

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

Verfasst: 10.07.2016 16:15
von kartmanne
HI,

Nachtrag:
gerade herausprobiert: die procs

Code: Alles auswählen

 znkl_kosys()
  mtkl_kosys()
  asltkl_kosys()
  ankf_kosys()
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...

Re: abfrage: Fenster vollständig aufgebaut

Verfasst: 10.07.2016 16:21
von kartmanne
HI,

hab was gefunden:
While WindowEvent() : Wend
wenn die zeile vor dem repeat steht, dann kommt das window_hd vollständig.

...okok. nächstes Mal such ich intensiver, bevor ich euch nerve.

Re: abfrage: Fenster vollständig aufgebaut

Verfasst: 10.07.2016 16:31
von ts-soft
Du führst folgende Proceduren ohne Ereignis aus:

Code: Alles auswählen

  znkl_kosys()
  mtkl_kosys()
  asltkl_kosys()
  ankf_kosys() ...
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:

Code: Alles auswählen

hgr=GetSysColor_(#COLOR_BTNFACE)
nichts ins EventLoop und braucht auch nur einmal ausgeführt werden.

Re: abfrage: Fenster vollständig aufgebaut

Verfasst: 10.07.2016 16:55
von kartmanne
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. :allright:

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?

Re: abfrage: Fenster vollständig aufgebaut

Verfasst: 10.07.2016 17:20
von ts-soft
kartmanne 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?
Wer wechselt denn laufend das Windows-Schema :mrgreen: , und wenn ist das auch egal, beim nächstem Start stimmt es ja wieder.
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

Re: abfrage: Fenster vollständig aufgebaut

Verfasst: 10.07.2016 17:38
von kartmanne
HI,

jaja... :D :D :D

... 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.. :lol:

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