Einzelnen Beitrag anzeigen

VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Fenster beim minimieren in den Taskbar und zurück

  Alt 24. Mär 2006, 18:10
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;
  Mit Zitat antworten Zitat