Übermalte Fenster

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: Übermalte Fenster

Beitrag von Dieter »

Hallo Werner,

du hast außerdem geschrieben:
Dieter hat geschrieben:ich sehe in deinem Code gar kein SetAppFocus(oTab2). Das SetAppFocus(oBrowse) reicht alleine nicht aus!


:?: Das Browse hat aber danach den Focus.
Wenn der Focus der Tabpage sich zwischenzeitlich nicht geändert hat, dann könnte man auf SetAppFocus(oTab2) verzichten. Aber ich gehe hier immer auf die sichere Seite. Ein Focusverlust ist in Windows nie auszuschließen! Man denke nur an externe Programme, die deiner ganzen Applikation den Focus wegnehmen können.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2125
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 75 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Servus Dieter,

danke.

Codeblock: Du hast Recht, eigentlich dürfte das nicht gehen, tut es aber, werde es aber trotzdem ändern. Vermutlich werden meine Funktionen erst abgearbeitet und danach erst wieder die Ereignis-Schleife, deshalb "funktioniert" es.

xbpBrowse_stabil:

Code: Alles auswählen

static function xbpBrowse_stabil(oBrowse)
oBrowse:refreshAll()
#if XPPVER > 1900355
   oBrowse:forcestable()
#else
   do while .not. oBrowse:forcestable()
   enddo
#endif
return .t.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: Übermalte Fenster

Beitrag von Magic »

Hallo Werner,

ich gehe davon aus, dass wenn Du vor dem oBrowse:forcestable() ein oBrowse:configure() einfügst, es dann wie gewünscht funktioniert.
Es ist zwar absurd, ich selbst verwende es an einigen Stellen, die ich anders nicht löschen konnte.

Wieso machst Du es unterschiedlich, abhängig von XPPVER > 1900355?
Gruß,
Magic
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Übermalte Fenster

Beitrag von brandelh »

ein unnötiges configure() kann aber auch schaden ...
forceStable() hätte laut Doku schon immer einen stabilen Zustand erzeugen sollen, allerdings kam es häufiger vor, dass .f. zurückgegeben wurde.
Er hat wohl die Erfahrung gemacht, dass dies mit 1.90.355 nicht mehr der Fall ist.
Allerdings hat die Schleife keine Nachteile, die eine unnötige Abfrage merkt man nicht.
Gruß
Hubert
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: Übermalte Fenster

Beitrag von Magic »

brandelh hat geschrieben:ein unnötiges configure() kann aber auch schaden ...
Einen Versuch währe es aber durchaus wert, wenn sonst (vorerst) nichts hilft.
Gruß,
Magic
Dieter
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 237
Registriert: Do, 14. Aug 2008 14:59
Wohnort: Straelen
Hat sich bedankt: 2 Mal
Danksagung erhalten: 3 Mal

Re: Übermalte Fenster

Beitrag von Dieter »

Hallo,
ich verwende das oBrowse:configure() immer dann, wenn sich die Datenbasis (z. B. ein Datenarray für den Browse mit neuer Zeilenanzahl) ändert. Habe dann noch niemals Probleme gehabt, beziehungsweise es würde ohne :configure() gar nicht funktionieren. Ich habe Werner das obrowse:configure() deshalb schon früher empfohlen. Ich glaube, er hat es schon ohne Erfolg ausprobiert. Er arbeitet dann wohl über einem Datalink direkt mit einer DBF-Datenquelle und manipuliert nachträglich auch keine Instanzvariablen des Browsers.
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Übermalte Fenster

Beitrag von Tom »

Äh.

Configure() ist zu verwenden, wenn sich Eigenschaften eines Browses ändern, etwa Präsentationsparameter, Parent-Owner-Relationen und ähnliches. Wenn sich die "Anzahl der Zeilen" in einem simplen Arraybrowse ändert, sollte in aller Regel ein einfaches RefreshAll() ausreichen, es sei denn, man weist dem Array eine andere Datenquelle zu. Configure() dürfte in dieser Situation schlicht überhaupt keine Auswirkungen haben. Es ist überflüssig und nutzlos.
Herzlich,
Tom
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2125
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 75 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Dieter hat geschrieben:Ich habe Werner das obrowse:configure() deshalb schon früher empfohlen. Ich glaube, er hat es schon ohne Erfolg ausprobiert. Er arbeitet dann wohl über einem Datalink direkt mit einer DBF-Datenquelle und manipuliert nachträglich auch keine Instanzvariablen des Browsers.
Korrekt!

Muss jetzt erst mal abwarten, wie sich o. g. auswirkt, dann melde ich mich wieder.

Danke an alle!
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2125
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 75 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

brandelh hat geschrieben:ein unnötiges configure() kann aber auch schaden ...
forceStable() hätte laut Doku schon immer einen stabilen Zustand erzeugen sollen, allerdings kam es häufiger vor, dass .f. zurückgegeben wurde.
Er hat wohl die Erfahrung gemacht, dass dies mit 1.90.355 nicht mehr der Fall ist.
Allerdings hat die Schleife keine Nachteile, die eine unnötige Abfrage merkt man nicht.
Kann ich nur unterschreiben.
Ja, das forcestable gibt unter 2.0 kein .t. oder .f. zurück, sondern self.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: Übermalte Fenster

Beitrag von Magic »

Ich habe mir die Stellen in meinen Programmen angeschaut, die mir Kopfzerbrechen bereitet haben.
Unter anderem im Zusammenhang mit :resize().
Einige - nicht erklärbare - Merkwürdigkeiten habe ich behoben, indem ich ein :invalidateRect() ausgeführt habe.

In Deinem Fall geht es, eben auch um das "Zeichnen" des Browser...
Vielleicht hilft dann auch bei Dir ein oBrowse:invalidateRect() um das Neuzeichnen zu erzwingen.
(auch wenn es "eigentlich" nicht notwendig ist)
Gruß,
Magic
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2125
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 75 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Servus Magic,

danke, ich warte jetzt ab, ob die anderen Tipps was bringen, ansonsten bau ich das invalidateRect ein.

Es wird aber nichts helfen bei der anderen Konstellation:
Das passiert auch, wenn ein Fenster im Hintergrund ist, das Vordergrundfenster gehided wird. Dann wird manchmal das Hintergrundfenster, das dann ja sichtbar wird, nicht neu gezeichnet / komplett dargestellt.
es grüßt

Werner

<when the music is over, turn off the lights!>
Antworten