Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Welche Nachricht, NACHDEM das Fenster maximiert ist? (https://www.delphipraxis.net/76937-welche-nachricht-nachdem-das-fenster-maximiert-ist.html)

Alibi 12. Sep 2006 12:24


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?

Martin K 12. Sep 2006 13:01

Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
 
Hast du schon OnResize ausprobiert?

Alibi 12. Sep 2006 13:03

Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
 
Jop. 0 Änderung. :/

Martin K 12. Sep 2006 13:12

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:
procedure TForm1.FormResize(Sender: TObject);
begin
  Caption := IntToStr(ClientWidth);
end;
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.

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...

Christian Seehase 12. Sep 2006 13:17

Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
 
Moin Alibi,

schau Dir mal die Message MSDN-Library durchsuchenWM_SIZE an.

Alibi 12. Sep 2006 13:52

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:
procedure TfrmMain.WM_SIZE(var msg: TMessage);
begin
  inherited;
  updateArrows;
end;
Nochmal beschrieben:
- 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]

3_of_8 12. Sep 2006 13:54

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.

Christian Seehase 12. Sep 2006 14:05

Re: Welche Nachricht, NACHDEM das Fenster maximiert ist?
 
Moin Alibi,

ich schlage vor, dass Du Dir die Dokumentation zu WM_SIZE mal durchliest.

Alibi 12. Sep 2006 14:06

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