Hallo,
ich habe da jetzt schon mal selbst eine Lösung gefunden. Die gefällt mir zwar nicht so richtig gut aber funktioniert. Wenn jemand eine bessere Idee hat würde ich mich freuen
Mein jetztiges Prinzip basiert auf 2 Formularen. Wenn das eingentliche Formular minimiert wird so wird dieses komplett ausgeblendet. Somit ist dies schonmal nicht mehr sichtbar. Diese erzeugt dann ein zweites Formular was nur einen Taskbar-Eintrag erzeugt, selbst aber auch nicht zu sehen ist.
Wenn man dann auf den Taskbar-Eintrag klickt wird dieses Fenster zerstört. Vorher wird aber das eigentliche Formular sichtbar gemacht.
TTaskbarForm ist das eigentliche Formular.
TTaskbarForm2 ist das Formular, was nur im Taskbar sichtbar ist.
Und hier jetzt der Code:
Delphi-Quellcode:
type
TTaskbarForm = class(TForm)
private
FTaskbarWindow: TTaskbarForm2;
protected
procedure WMSysCommand(var Message: TMessage); message WM_SysCommand;
public
{ Public-Deklarationen }
end;
function ShowTaskbarForm: TModalResult;
implementation
{$R *.dfm}
function ShowTaskbarForm: TModalResult;
var
ATaskbarForm : TTaskbarForm;
begin
Application.CreateForm(TTaskbarForm, ATaskbarForm);
try
Result := ATaskbarForm.ShowModal;
finally
ATaskbarForm.Release;
end;
end;
{ TTaskbarForm }
procedure TTaskbarForm.WMSysCommand(var Message: TMessage);
begin
case Message.WParam of
SC_MINIMIZE : begin
FTaskbarWindow := TTaskbarForm2.Create(Self);
FTaskbarWindow.ParentHandle := Self.Handle;
FTaskbarWindow.Show;
Self.Visible := true;
Self.Hide;
end;
SC_RESTORE : begin
FTaskbarWindow := nil;
Self.Show;
Self.Visible := true;
Self.Enabled := true;
end;
else
inherited;
end;
end;
Delphi-Quellcode:
type
TTaskbarForm2 = class(TForm)
Button1: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
FParantHandle : THandle;
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure WMSysCommand(var Message: TMessage); message WM_SysCommand;
public
property ParentHandle: THandle write FParantHandle;
end;
implementation
{$R *.dfm}
procedure TTaskbarForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;
procedure TTaskbarForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowWindow(FParantHandle, SW_RESTORE);
end;
procedure TTaskbarForm2.FormShow(Sender: TObject);
begin
ShowWindow(Self.Handle, SW_MINIMIZE);
Abort;
end;
procedure TTaskbarForm2.WMSysCommand(var Message: TMessage);
begin
case Message.WParam of
SC_MAXIMIZE,
SC_RESTORE : Self.Close;
else
inherited;
end;
end;