Announcement

Collapse
No announcement yet.

Delphi 5 - Problem beim Minimieren der Applikation ???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi 5 - Problem beim Minimieren der Applikation ???

    Hallo,

    für folgendes anscheinend Delphi 5 spezifisches Problem finde ich einfach
    keine Lösung.

    * Ausgangssituation: Ich zeige ein Form (poDesigned,bsSingle) mit der Methode ShowModal an und biete dem Anwender die Möglichkeit, dieses Fenster zu minimieren, wobei allerdings die gesamte Applikation minimiert werden soll. Unter Delphi 3 habe ich dies mit folgendem Source-Code realisiert:

    Procedure TMyForm.FormResize(sender:TObject);
    begin
    if WindowState = wsMinimized then Application.Minimize;
    end;

    Unter Delphi 5 funktioniert diese Lösung nicht mehr. Es wird nur das modal
    angezeigte Form minimiert. Beim Debuggen konnte ich dann feststellen, dass WindowState noch nicht den neuen Wert (wsMinimized) besitzt. Daraufhin versuchte ich durch Überschreiben der Methode Resizing und unter Verwendung von "Application.Minimize" das Minimieren der gesamten Applikation -> hat nicht funktioniert!.Ersetze ich "Application.Minimize" durch
    "ShowWindow(Application.Mainform.handle,SW_MINIMIZ E)",wird zwar mein Mainform minimiert, aber als weiters minimiertes Fenster und nicht wie
    eine minimierte Anwendung als Icon in der Taskbar.

    Durch Nachlesen in einem Artikel von WWW.Delphi3000.com bin ich dann auf folgende Lösungsmöglichkeit gestoßen, die unter Delphi 3 funkioniert,aber nicht unter Delphi 5.

    procedure TMyForm.WMSysCommand(var Message: TWMSysCommand);
    begin
    if (Message.CmdType and $FFF0 = SC_MINIMIZE) then
    Application.Minimize
    else
    inherited;
    end;

    Wer kann mir helfen ?

    Danke,

    Dieter Aschenwald.

  • #2
    Hallo,

    in der Tat hat sich die Formularsteuerung innerhalb der VCL im Laufe der Zeit geändert. Um das o.g. Verhalten zu erreichen, sind einige Änderungen am Standardverhalten notwendig - wie das folgende Beispiel demonstriert:

    <b>Hauptformular</b>
    <pre>
    type
    TFormMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    procedure CreateParams(var params: TCreateParams ); override;
    end;

    var
    FormMain: TFormMain;

    implementation

    {$R *.DFM}

    uses FormDemoFrm2;

    procedure TFormMain.CreateParams(var params: TCreateParams);
    begin
    inherited;
    with params do
    ExStyle := ExStyle or WS_EX_APPWINDOW;
    end;

    // Unsichtbares Application-Fenster als AppWindow abmelden
    procedure TFormMain.FormCreate(Sender: TObject);
    begin
    SetWindowLong(Application.Handle, GWL_EXSTYLE,
    GetWindowLong(Application.Handle, GWL_EXSTYLE )
    or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW );
    end;

    procedure TFormMain.Button1Click(Sender: TObject);
    begin
    FormDetail.Show;
    end;
    </pre>
    <b>Detailformular</b>
    <pre>
    type
    TFormDetail = class(TForm)
    ButtonClose: TButton;
    procedure ButtonCloseClick(Sender: TObject);
    procedure FormDeactivate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    private
    { Private-Deklarationen }
    public
    { Public-Deklarationen }
    procedure CreateParams(var params: TCreateParams ); override;
    end;

    var
    FormDetail: TFormDetail;

    implementation

    {$R *.DFM}

    uses FormDemoFrm;

    procedure TFormDetail.ButtonCloseClick(Sender: TObject);
    begin
    Close;
    end;

    procedure TFormDetail.FormActivate(Sender: TObject);
    begin
    FormMain.WindowState := Self.WindowState;
    end;

    procedure TFormDetail.FormDeactivate(Sender: TObject);
    begin
    FormMain.WindowState := Self.WindowState;
    end;

    procedure TFormDetail.CreateParams(var params: TCreateParams);
    begin
    inherited;
    with params do
    ExStyle := ExStyle or WS_EX_APPWINDOW;
    end;
    </pre>
    Das Detailformular wird dabei über <b>Show</b> aufgerufen, so das ein Aktiveren des Detailformulars automatisch auch das Hauptformular wieder mit anzeigt

    Comment

    Working...
    X