Bombentrichter

Archiv => Papierkorb => Topic started by: Drrääääcks on June 06, 2005, 08:01:21 am

Title: Problem bei überlappenden Fenstern
Post by: Drrääääcks on June 06, 2005, 08:01:21 am
Hab meinen Beleg jetzt fertig und will noch die Kinderfehler von Delphi wegmachen.
Problem ist  wenn ich mein Prog klein mache oder ein anderes Fenster drüber zieh sind all Grafischen darstellungen teilweise oder ganz verschwunden. Muss irgentein befehl mit activate oder so sein. Wer nett wenn den einer weiß und auch erklärt wie man den befehl einbauen muss.


MFG   :ph34r:
Title: Problem bei überlappenden Fenstern
Post by: n-w on June 06, 2005, 11:52:46 am
Ich würde es mit den Fkt. OnActivate oder OnResize ... versuchen. Dann neuzeichnen?

Bei mir gibt´s das Problem nicht, habe auf einer PaintBox gezeichnet.
Title: Problem bei überlappenden Fenstern
Post by: KCalive on June 06, 2005, 12:40:21 pm
über sowas braucht ihr euch keine rübe zu machen. glaubt mir, die testat abnahme is ein witz;-) so lang es halbwegs läuft... und wenn er den bug doch rausbekommt...  dann habt eben nich dran gedacht. die unterschrift bekommt ihr schon.
Title: Problem bei überlappenden Fenstern
Post by: DIGIT on June 06, 2005, 01:08:58 pm
Hi D.. :flower:
Ich extrapoliere von anderen Programmen, vorzugsweise Microsoft-Produkten, woraus sofort folgt, dass sie auch nicht g'scheiter sind.

Das Resize-Event wird auch bei Änderung des Window-State (Maximieren, Minimieren, Normal) des Fensters aufgerufen.
Wenn man das Resize-Event ausprogrammiert, dann ist bei der Minimierung des Fensters eine "Division durch Null", oder ein "negativer Fensterparameter" etc.  ein sehr beliebter Fehler. Das Programm stürzt nicht ab (war früher so) - aber das Ändern vom Refresh im Zuge des Window-States funktioniert nicht mehr richtig.
Abhilfe in Resize-Abschnitt:
If (xxx.windowstate = acWindowStateMinimized) { (so ähnlich)
   mach nix
} else {
   mach das, was Du wolltest
}

Bitte hier zuerst prüfen.

Ein Refresh im Acitivate-Event ist durch die Brust ins Auge, sofern das Activate-Event erst durch die Maus ausgelöst wird. Gar nicht schön.

Hierzu noch weitere Diagnosen und Fummelein denkbar und möglich.

Weisst Du was am besten und billigsten funktioniert ?
(1) Mach in der Menüleiste den Min/Max/Normal-Button weg. Problem gelöst. Is gut is billig.

Grüße
DIGIT
 :limes_0:
So, hoffe, nun auch sündacktisch und grammatisch halbwegs in Ordnung.
Title: Problem bei überlappenden Fenstern
Post by: Luke on June 06, 2005, 04:08:44 pm
Quote
Originally posted by Drrääääcks@6.6. 2005 - 8:01
Hab meinen Beleg jetzt fertig und will noch die Kinderfehler von Delphi wegmachen.
Problem ist  wenn ich mein Prog klein mache oder ein anderes Fenster drüber zieh sind all Grafischen darstellungen teilweise oder ganz verschwunden. Muss irgentein befehl mit activate oder so sein. Wer nett wenn den einer weiß und auch erklärt wie man den befehl einbauen muss.


MFG   :ph34r:
Meiner Meinung hat Dein Problem eine ganz einfache Ursache: Der Inhalt des Canvas-Objektes einer Paintbox wird beim Verdecken / Minimieren "wegradiert". Um das zu vermeiden, müsstest Du auf die Canvas der Image-Komponente zurückgreifen; Befehle sind gleich, allerdings verbraucht die deutlich mehr Arbeitsspeicher, PainBox ist schneller und es gibt noch so ein paar Details, die aber an der Stelle hier zu weit gehen ;-).
Daher: Der Inhalt der Canvas einer Image-Kompenente ist statisch und regeneriert sich nach Verdecken selbst, bei einer Paintbox musst Du den Inhalt durch entsprechende Events neu zeichnen.
Bei der Testatabgabe wirst Du aber wohl eher dumm angemacht, wenn du keine Paintbox genommen hast, wie uns das bei der Stopuhr in der Einführung gezeigt wurde, vermut ich mal ;-)... Vermutlich ist die Image-Komponente hier eher auch getreu dem Motto "mit Kanonen auf Spatzen schießen".

Luke
Title: Problem bei überlappenden Fenstern
Post by: Drrääääcks on June 06, 2005, 06:10:20 pm
keine vorschläge die mir weiter helfen.
Wenn ich Mini/Max und X  weg mache dann wird die Paintbox trotzdem durch jedes andere fenster radiert.
Scheinbar legen sie doch Wert drauf, letztens wurde es mit dem Fehler nicht abgenommen.

@ n-w hab auch ne Paintbox, wenn du da nicht rumgefummelt hast   gibts bei dir den gleichen fehler.
Title: Problem bei überlappenden Fenstern
Post by: n-w on June 06, 2005, 06:40:43 pm
Passiert bei mir doch, stört aber nicht. Wenn das Program läuft, wird pausenlos alles neu gezeichnet, schadet also nicht. Nur wenn ich Pause drücke und ein anderes Fenster drüberziehe, wird radiert.

Warum nimmst dann nicht die Fkt. OnActivate und zeichnest damit alles neu?
Title: Problem bei überlappenden Fenstern
Post by: Luke on June 06, 2005, 10:48:41 pm
Siehe meinen Post oben, der Inhalt einer Canvas einer Paintbox regeneriert sich nun mal nicht selbst. Du musst durch entsprechende Routinen bei entsprechenden Ereignissen selbst für einen Neuaufbau sorgen (soweit möglich). Oder Du nimmst TImage.Canvas. Hier schreibst Du quasi Deine Zeichnung in einen Puffer, und das Bild regeneriert sich von selbst. Mehr Arbeitsspeicher, und auch glaub ich etwas langsamer wenn ich mich recht erinnere. Dann hast Du das Problem aber nicht mehr. Entweder oder...

Luke
Title: Problem bei überlappenden Fenstern
Post by: Drrääääcks on June 07, 2005, 06:29:17 am
mkay   :nudelholz:
Title: Problem bei überlappenden Fenstern
Post by: Marc_II on June 07, 2005, 06:29:11 pm
Es geht auch ganz einfach mit OnPaint

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  [Das was er zeichnen soll]
end;


...und als Event halt OnPaint einstellen bei der PaintBox
Title: Problem bei überlappenden Fenstern
Post by: DIGIT on June 07, 2005, 06:37:44 pm
Leute wenn alles nicht hilft - so als letzte Rettung - , dann baut einen Timer und im Timer-Event ein Refresh/Repaint oder dergleichen ein.
Klingt brutal.
Ist brutal.
Wenn Du mal gesehen hast, wie die Microsoft-Leute arbeiten, dann graust Dir vor gar nichts mehr....

Motto:
Verwende niemals Gewalt.
Nimm einfach einen größeren Hammer.

Grüße
DIGIT
 :limes_0: