Übermalte Fenster

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Übermalte Fenster

Beitrag von Werner_Bayern »

Servus,

bekomme das Problem einfach nicht in den Griff, auf versch. PCs passiert das - aber nicht eindeutig nachvollziehbar, dass nach Anzeige eines Dialogs und ordentlichem Schließen der ursprüngliche Dialog nicht mehr richtig gezeichnet wird:
Neuzeichnen01.PNG
Neuzeichnen01.PNG (5.03 KiB) 10007 mal betrachtet
Hier wird also das XbpBrowse auf dem Tabpage Bestellung nicht mehr komplett neu gezeichnet.
Die aktuellen dafür zuständigen Einstellungen:

Code: Alles auswählen

oFenster:clipSiblings := .t.  // geändert am 04.09.2013, wieder zurück auf .t., das ist richtig
oFenster:clipChildren := .f.  // 28.02.2014
Parent und Owner stimmen.
Zuletzt geändert von Werner_Bayern am So, 04. Jan 2015 20:58, insgesamt 1-mal geändert.
es grüßt

Werner

<when the music is over, turn off the lights!>
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Übermalte Fenster

Beitrag von georg »

Hallo, Werner -


vor einiger Zeit habe ich ein vergleichbares Problem gehabt, da konnte ich aber die Parent-/Owner-Beziehung letztendlich als Ursache ausmachen. Auch wenn Du Dir 100 % sicher bist, dass alles passt: schau noch einmal nach, eventuell wird die Variable, die Du verwendest, irgendwo verändert.

Ansonsten versuche ich, den entsprechenden Code-Abschnitt in ein Miniprogramm zu packen und prüfe, ob das Problem dort auch auftritt, wenn mein ganzes Framework aussen vor ist.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Übermalte Fenster

Beitrag von Wolfgang Ciriack »

Pack doch mal ein Static auf die Tabpage und nimm als Parent für dein Browse nicht die Tabpage sondern das Static.
M.E. hat Roger in eXPress++ das genau aus dem Grund auch getan.
Viele Grüße
Wolfgang
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Servus Wolfgang,

so mache ich es bereits:

Code: Alles auswählen

oTab2 := XbpTabPage():new(oFenster:drawingArea,, aTabPos, aTabGroesse, {{XBP_PP_FGCLR, TABVORDERGRUND},;
{XBP_PP_BGCLR, TABHINTERGRUND}})
oTab2:caption := cFormular
oTab2:minimized := .f.
oTab2:preOffset  := 20
oTab2:postOffset := 60
oTab2:create()
oTab2:TabActivate := {|| oTab2:setColorBG(TABAKTIV), oTab1:setColorBG(TABINAKTIV), oTab3:setColorBG(TABINAKTIV),;
oTab1:minimize(), oTab3:minimize(), oTab2:maximize(), setAppfocus(oBrowse)}

oXbp:=XbpStatic():new( oTab2,, aRAHMENPOS, aRAHMENGROESSE, {{XBP_PP_FGCLR, TABVORDERGRUND}, {XBP_PP_BGCLR, TABHINTERGRUND}} )
oXbp:create()

drawingArea := oXbp

oBrowse := GuiBrowseDb(drawingArea, {0, drawingArea:currentsize()[2] - nHoehe}, {nBreite, nHoehe})
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: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

georg hat geschrieben:Auch wenn Du Dir 100 % sicher bist, dass alles passt: schau noch einmal nach, eventuell wird die Variable, die Du verwendest, irgendwo verändert.
Dumme Frage: Wie mache ich das am besten?
setParent(), setOwner(), Childlist(), alles irgendwie anzeigen lassen für jedes neu erzeugte Fenster?

Irgendwie scheint das Problem unter Vista extrem selten aufzutauchen, unter XP und Win7 öfters...
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Übermalte Fenster

Beitrag von brandelh »

ich meine ich hätte meine DebugPrint() Funktion hier veröffentlicht, ein Fenster das automatisch geöffnet wird wenn man eine Zeile ausgibt:

http://www.xbaseforum.de/viewtopic.php?f=16&t=3121
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Übermalte Fenster

Beitrag von georg »

Hallo, Werner -


ich setze immer noch den xppdbg ein, und kontrolliere in so einem Fall den Wert der Variablen, die ich bei new() übergebe. Wobei ich zugeben muss, dass Dein Code da wenig Raum für so etwas gibt.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Übermalte Fenster

Beitrag von brandelh »

Xppdbg ist schon brauchbar, solange es nicht um das Verhalten von Fenstern geht, denn wenn man ihn bedient verliert das zu untersuchende Fenster / Control den Focus.
Das mit DebugPrint habe ich übrigens der IDE von Basic4Android abgeschaut ;-)
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Übermalte Fenster

Beitrag von georg »

Hallo, Werner -


verwendest Du Owner-Drawing bei den Spalten? Bist Du sicher, dass die Spalten alle den korrekten Parent/Owner haben?
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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,
ich nehme an, dass im :TabActivate-Codeblock
... oBrowse:configure(), oBrowse:refreshAll() ...
vor dem setAppFocus(oBrowse) fehlen.
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: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Die Frage von mir war, was genau soll ich mir anschauen?

Code: Alles auswählen

oFenster := ScrollDialog():new(oDlg:drawingArea,,
So baue ich mir meine Fenster auf. Was soll ich mir wie von oDlg anzeigen lassen?

Code: Alles auswählen

? oDlg==SetAppWindow()
:?:
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: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Dieter hat geschrieben:Hallo Werner,
ich nehme an, dass im :TabActivate-Codeblock
... oBrowse:configure(), oBrowse:refreshAll() ...
vor dem setAppFocus(oBrowse) fehlen.
Warum sollte ich beides verwenden? Ist doch nicht nötig? Ich brauche doch keine Neukonfiguration des Browse beim Tabactivate? Ebensowenig einen Datenrefresh? Oder hab ich da was überhaupt nicht verstanden?
es grüßt

Werner

<when the music is over, turn off the lights!>
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,

Ein xbpbrowse-Objekt soll ja nur einmal mit :create() erzeugt werden. Bei einer zwischenzeitlicher Veränderungen am Browse-Objekt (z.B. durch Eingaben in einer anderen Tabpage) kann beim Wiederaufruf der Tabpage mit dem Browse-Objekt ein oBrowse:configure() notwendig sein, damit der Browser richtig angezeigt wird (zusammen mit :refreshall()).
Kann es sein, dass du den Browse mehrfach erzeugst, ohne dass das Browse-Objekt vorher destroyed wurde? Wenn ich dich richtig verstehe, hast du beim ersten Aufruf der Tabpage keine Probleme. Erst nach dem erneutem Aufruf der Tabpage-Browser-Seite können die Darstellungsprobleme im Browser anfangen. Bei Mehrfacherzeugung von speicherintensiven Objekten, wie z. B. xbpBrowse, kann es dann schnell zu den von dir geschilderten Problemen kommen. Bei Rechnern mit wenig RAM-Speicher geschieht dies wohl schneller, als bei leistungsstärkeren Rechnern.
Du könntest im Taskmanager mal überprüfen, ob beim mehrfachen Aufruf deines Fensters, dass die Tabpages enthält, oder beim Hin- und Herschalten zwischen den Tabpages der Speicherbedarf deiner EXE ansteigt.
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: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Servus Dieter,

danke. Bei mir ist das aber nicht so, das Browse wird nur 1x direkt nach dem Erzeugen des TP erzeugt. Habs aber trotzdem im Taskmanager überprüft, so wie Du es geschrieben hast. Kein Gramm mehr an Speicher beim hin- und herschalten der Tabpages.

Es wird da auch nicht das TP gewechselt, sondern ein neues Fenster geöffnet, dort ein Browse, ein Datensatz ausgewählt und ggf. übernommen in das bestehende Browse.

Code: Alles auswählen

oXbpA:activate := {|| oFenster:disable(), artuebern(cFormular, aWW, nFormularnr), Postappevent(xbeP_Keyboard,xbeK_CTRL_PGDN,,oBrowse), xbpBrowse_stabil(oBrowse), dbselectarea("formular"), oFenster:enable(), SetAppFocus( oBrowse ) }
Bei dem xbpBrowse_stabil wird u. a. ein oBrowse:refreshAll() ausgeführt.
es grüßt

Werner

<when the music is over, turn off the lights!>
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,

ich sehe in deinem Code gar kein SetAppFocus(oTab2). Das SetAppFocus(oBrowse) reicht alleine nicht aus!
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
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 kenne solche unerklärlichen Auswirkungen vor allem dann, wenn ich mit :resize arbeite.
Wie sieht es denn bei Dir aus, wird irgendwo ein :resize verwendet?


In dem Slot TabActivate: würde ich das :minimize() der anderen Tabpages jeweils rausnehmen. Das ist so weit ich weis überflüssig.
So weit ich mich noch erinnern, kann ist auch das :maximize() in der 1.9 SL1 nicht mehr nötig.
Ich würde Schritt für Schritt die TabActivate: "bereinigen" und prüfen wie sich das Programm dann verhält.
Zur Not auch das Setzen der Farben noch rausnehmen.

Ich vermute dass in dieser Kombination die Ursache Deines Problems liegt. Also im Bereich :resize oder :tabActivate.
Gruß,
Magic
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Übermalte Fenster

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:Hier wird also das XbpBrowse auf dem Tabpage Bestellungnicht mehr komplett neu gezeichnet.
welche Version von XppUi2.dll verwendest du ?
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

16.11.2009
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Übermalte Fenster

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:16.11.2009
also Hotfix 25.
unter den PDRs finde ich nur noch Hotfix 27 wo XbpBrowse erwähnt wird ... hat auch mit TabPage zu tun.
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Nein, komisch, aber das ist die Version von HF25.

Hab beide zur Sicherheit auch binär verglichen, kein Unterschied. Fix von 2010 ist die dll von 2009. #-o
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: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben:unter den PDRs finde ich nur noch Hotfix 27 wo XbpBrowse erwähnt wird ... hat auch mit TabPage zu tun.
Da setze ich sowieso die 2012er Version ein (nicht die 2013er). HF 27 ist von 2010.
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: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

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.

Soll ich das machen?

Code: Alles auswählen

oXbpA:activate := {|| oFenster:disable(), artuebern(cFormular, aWW, nFormularnr), Postappevent(xbeP_Keyboard,xbeK_CTRL_PGDN,,oBrowse), xbpBrowse_stabil(oBrowse), dbselectarea("formular"), oFenster:enable(), SetAppFocus( oTab2 ), SetAppFocus( oBrowse ) }
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: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Magic hat geschrieben:ich kenne solche unerklärlichen Auswirkungen vor allem dann, wenn ich mit :resize arbeite.
Wie sieht es denn bei Dir aus, wird irgendwo ein :resize verwendet?
Nein, hab ich nicht drin. Den Rest hab ich jetzt mal rausgenommen, wie von Dir angedacht.
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: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: Übermalte Fenster

Beitrag von Werner_Bayern »

Nachtrag: 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!>
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 geschrieben:
Soll ich das machen?

Code: Alles auswählen

oXbpA:activate := {|| oFenster:disable(), artuebern(cFormular, aWW, nFormularnr), Postappevent(xbeP_Keyboard,xbeK_CTRL_PGDN,,oBrowse), xbpBrowse_stabil(oBrowse),    dbselectarea("formular"), oFenster:enable(), SetAppFocus( oTab2 ), SetAppFocus( oBrowse ) }
Ich habe folgende Probleme mit deinem Codeblock:
1. Nach oFenster:disable() funktioniert meiner Meinung nach das Postappevent(xbeP_Keyboard,xbeK_CTRL_PGDN,,oBrowse) nicht mehr, da oBrowse ja auch im disableten oFenster liegt.
2. Ich weiß nicht, welcher Code in xbpBrowse_stabil() steht?

Ich würde vorab folgendes versuchen:

Code: Alles auswählen

oXbpA:activate := {|| oFenster:disable(), artuebern(cFormular, aWW, nFormularnr), dbselectarea("formular"), oFenster:enable(),;
   SetAppFocus( oTab2 ), SetAppFocus( oBrowse ), Postappevent(xbeP_Keyboard,xbeK_CTRL_PGDN,,oBrowse), xbpBrowse_stabil(oBrowse) }
Viele Grüße

Dieter

Was man nicht versteht, besitzt man nicht.
Antworten