![]() |
Welche Nachricht, NACHDEM das Fenster maximiert ist?
Hi,
hab hier ein kleines Problem, und zwar wird ein Canvas bei mir gelöscht, sobald ich das Fenster maximiere. Neuzeichnen tu ich im OnPaint und im OnConstrainedResize (Das, um ein anderes Problem zu beheben...). Nun wird OnPaint aber nicht ausgelöst, wenn das Fenster maximiert wird? Ich habe schon versucht, das ganze beim Eintreffen von WM_SYSCOMMAND mit SC_MAXIMIZE neuzuzeichnen, aber das hat keinen Effekt, da es anscheinend geschickt wird, wenn der Benutzer das Kommando zum Maximieren gegeben hat und nicht, wenn das ganze schon erledigt ist. Insofern: Gibt es eine Msg, die auftritt, wenn das Fenster fertig mit maximieren ist? |
Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
Hast du schon OnResize ausprobiert?
|
Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
Jop. 0 Änderung. :/
|
Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
Das kann eigentlich gar nicht sein. OnResize wird definitiv erst dann aufgerufen, wenn das Fenster schon maximiert wurde.
Dein Fehler muss irgendwo anders im Code liegen. Hier der Beweis: folgender simpler Code:
Delphi-Quellcode:
Wenn ich das Fenster maximiere wird als Caption die Bildschirmbreite angezeigt, also wurde das Fenster erst maximiert (Breite des Fensters = Bildschirmbreite) und dann der Code in OnResize aufgerufen.
procedure TForm1.FormResize(Sender: TObject);
begin Caption := IntToStr(ClientWidth); end; Noch ein Beweis: Einfach im obigen Beispiel mal das komplette Programm mit F7 Schritt für Schritt durchgehen: Klickt man auf Maximieren wird erst das Fenster maximiert und dann wird in die Prozedur OnResize gesprugen. Vielleicht postest Du mal etwas mehr Code, ich bin fast sicher dass es an etwas anderem liegen muss... |
Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
|
Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
Besten dank euch beiden.
WM_SIZE wär auch zu schön gewesen... Selbe Syndrom immer noch... Es wird nun an folgenden Orten neugezeichnet: - OnPaint - OnConstrainedResize - WM_SIZE generell (Was ja ansich alleine ausreichen sollte?):
Delphi-Quellcode:
Nochmal beschrieben:
procedure TfrmMain.WM_SIZE(var msg: TMessage);
begin inherited; updateArrows; end; - updateArrows zeichnet was auf ein TBitmap. Dieses wird dann auf den Canvas einer Paintbox kopiert. - Beim Maximieren verschwindet einfach alles von dem Canvas, als ob updateArrows zu einem falschen Zeitpunkt aufgerufen wird. Naja, bin eben auf TImage umgestiegen, das löst das Problem. Eine Lösung, wodran das bei der PaintBox scheitert wäre aber dennoch sehr interessant... [edit=SirThornberry]Pascal-Tags zu Delphi-Tags korrigiert - Mfg, SirThornberry[/edit] |
Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
Ganz einfach: Die PaintBox repaintet sich selbst. Ein Image nicht. Wenn du auf ne Paintbox zeichnen willst, verwende ihr Ereignis OnPaint.
|
Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
Moin Alibi,
ich schlage vor, dass Du Dir die Dokumentation zu WM_SIZE mal durchliest. |
Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
Manchmal...*args*
Und dadran hab ich nun 8h verbracht, wo die Lösung doch so nahe lag. Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz