Bombentrichter
Archiv => Papierkorb => Topic started 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:
-
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.
-
ü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.
-
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.
-
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
-
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.
-
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?
-
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
-
mkay :nudelholz:
-
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
-
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: