Hallo DBR,
Zitat von
DBR:
bei normalen Fenstern mache ich das so:
Delphi-Quellcode:
[...]
procedure TForm1.WMSysCommand;
begin
if (Msg.CmdType = SC_MAXIMIZE)
then begin
hide;
windowstate := wsMaximized;
show;
end else inherited;
end;
Vielleicht hilfts!
Danke für den Tipp! Dieser funktioniert ansich ganz toll, aber für mein Problem ist er nicht die Lösung.
1) Das
VCL-Hide() weigert sich,
MDI-Childs zu verstecken. Ist kein Problem, einfach in
ShowWindow(Handle, SW_HIDE) umwandeln, dann funktiert
das.
2)
Zitat von
Marphy:
Die Animation beim Klick auf den Maximieren-Button in der Titelleiste ist schon okay, [...]
Tja, und beim Maximieren
per Code (z.B.
WindowState = wsMaximized oder per ShowWindow) wird keine WM_SYSCOMMAND-Botschaft gesendet. Und im anderen Fall, beim Maximieren per Titelleiste, will ich den Effekt ja.
Ersteres kann durch Maximieren über
SendMessage(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0) umgangen werden, der zweite Punkt ist z.B. über lParam zu lösen (bei SendMessage diesen einfach z.B. auf 1 setzen und in WMSysCommand dann abfragen).
3) Aber:
Zitat von
Marphy:
[...] ich will das Fenster ja nur beim Anzeigen (z.b. OnShow-Event) "unanimiert" maximieren.
Nun, und selbst wenn man obigen Code einsetzt, beim Maximieren per Code im OnShow()-Event des
MDI-Childs lässt sich die Animation leider nicht unterdrücken.
So, und an diesem letzten Punkt bin ich gescheitert...
Vielleicht noch ein kleiner (vielleicht doch nicht ganz unwichtiger) Nachtrag:
Worum es mir eigentlich geht, d.h. was ich tun will, ist folgendes: Meine Anwendung speichert beim Beenden, ob das aktive
MDI-Child maximiert ist oder nicht. Beim nächsten Start der Anwendung und Öffnen eines
MDI-Childs soll dieses wieder
direkt im gespeicherten Zustand erscheinen (d.h. maximiert oder normal, ohne Animation).
Ich hoffe auf weitere Antworten! Danke schon im Voraus!
Grüße, Marco