![]() |
Modales Fenster soll Hauptform "ersetzen"
Nabend zusammen,
irgendwie steh ich heut abend tierisch auf dem Schlauch. Ich möchte eigentlich nur folgendes erreichen: - Wenn ein modales Fenster minimiert wird soll die gesamte Anwendung miniminiert werden - Wenn die Anwendung dann wieder hergestellt wird muss das modale Fenster logischerweise wieder den Fokus bekommen - Im Fenster-Preview von Vista (Taskleiste, Alt+Tab, Flip3D) soll ausschließlich das modale Fenster zu sehen sein Das wurde schon circa. 1000mal gefragt im Netz, aber irgendwie will es bei mir nicht. :cry: |
Re: Modales Fenster soll Hauptform "ersetzen"
*mal ganz vorsichtig hochschieb*
|
Re: Modales Fenster soll Hauptform "ersetzen"
Delphi-Quellcode:
Es könnte klappen, weil die Eigenschaft 'MainForm' keine Getter-Methode hat, sondern direkt auf der privaten Variable 'FMainForm' aufsetzt. Schön ist das aber nicht.
Var
p : ^TForm; Begin p := @Application.MainForm; p^:= MyNewMainForm; |
Re: Modales Fenster soll Hauptform "ersetzen"
Application.MainForm wird korrekt umgesetzt, hat aber interessanterweise keinerlei Effekt auf das Fensterpreview.
So also Minimieren der gesamten Anwendung lässt sich recht simpel mittels überschreiben von SYSCOMMAND lösen
Delphi-Quellcode:
Beim Wiederherstellen sitzt dann allerdings der Fokus im Nirvana.
case (msg.cmdtype and $FFF0) of
SC_MINIMIZE: begin ShowWindow( Application.MainForm.Handle, SW_MINIMIZE ); msg.result := 0; end; else inherited; end; ----------------------------------------------- Hier mal meine eine vorläufige Lösung: Beim Aufruf des Modalen-Forms den Taskbar-Eintrag des Hauptform verstecken und anschließend wieder einblenden
Delphi-Quellcode:
Beim Erzeugen des modalen-Forms einen Taskbar-Button erzeugen
ShowWindow(Application.MainFormHandle, SW_HIDE);
SetWindowLong(Application.MainFormHandle, GWL_EXSTYLE, GetWindowLong(Application.MainFormHandle, GWL_EXSTYLE) and not WS_EX_APPWINDOW or WS_EX_TOOLWINDOW); ShowWindow(Application.MainFormHandle, SW_SHOW); MyModalForm.showModal; ShowWindow(Application.MainFormHandle, SW_HIDE); SetWindowLong(Application.MainFormHandle, GWL_EXSTYLE, GetWindowLong(Application.MainFormHandle, GWL_EXSTYLE) and not WS_EX_TOOLWINDOW or WS_EX_APPWINDOW); ShowWindow(Application.MainFormHandle, SW_SHOW);
Delphi-Quellcode:
Und letzlich das Minimieren und Wiederherstellen überschreiben
procedure TMyModalForm.CreateParams(var Params: TCreateParams);
begin inherited; with Params do exStyle := exStyle or WS_EX_APPWINDOW; end;
Delphi-Quellcode:
Nachteil ist das "Blinken" in der Taskbar, wenn der eine Button verschwindet und der andere angezeigt wird.
procedure TMyModalForm.WMSyscommand(var msg: TWmSysCommand);
begin case (msg.CmdType and $FFF0) of SC_MINIMIZE: begin ShowWindow(Handle, SW_MINIMIZE); msg.Result := 0; end; SC_RESTORE: begin ShowWindow(Handle, SW_RESTORE); msg.Result := 0; end; else inherited; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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