Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit caNone, caMinimize bei Form.OnClose (https://www.delphipraxis.net/170695-problem-mit-canone-caminimize-bei-form-onclose.html)

PeterPanino 28. Sep 2012 19:36

Problem mit caNone, caMinimize bei Form.OnClose
 
Hallo! Ich möchte, dass mein Programm beim Klick auf den X-Schließknopf des Formulars - evtl. auf Nachfrage - minimiert statt beendet wird.

Nun habe ich in den OnClose-Eventhandler des Hauptformulars folgenden Code geschrieben, um das mal zu testen:
Delphi-Quellcode:
procedure TformMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caMinimize;
end;
Nach der Beschreibung in der Hilfe müsste damit beim Klick auf den Schließknopf (oder Systemmenü->Schließen) das Programm minimiert statt beendet werden. Es wird aber beendet statt minimiert. Wieso das?

Dann habe ich es mal caNone versucht:
Delphi-Quellcode:
procedure TformMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caNone;
end;
Theoretisch sollte da eigentlich gar nichts passieren. Es kommt aber ein Compilerfehler: "[DCC Fehler] HVMain.pas(5138): E2010 Inkompatible Typen: 'TCloseAction' und 'TCheckBoxAction'"

Wie das?? caNone wird doch ausdrücklich in der Hilfe als möglicher Wert für Action mit Typ TCloseAction genannt! Wieso findet hier eine Typverwechslung statt?

PeterPanino 28. Sep 2012 19:52

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
Komisch, wenn ich schreibe:

Action := System.UITypes.TCloseAction(caNone);

entsteht kein Compilerfehler und das Beenden des Programms wird erwartungsgemäß verhindert.

Nur bei caMinimize wird das Programm immer noch beendet statt minimiert, auch wenn ich schreibe:

Action := System.UITypes.TCloseAction(caMinimize);

haentschman 28. Sep 2012 19:53

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
Hallo...

normalerweise ist das was du gemacht hast richtig. Habe extra nochmal in einem Projekt gespickt 8-). Leider kann ich dir nur soweit helfen... der Knackpunkt liegt wo anders.

:hi:

Sir Rufo 28. Sep 2012 20:55

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
Versuche es mal mit
Delphi-Quellcode:
TCloseAction.caMinimize
;)

PeterPanino 28. Sep 2012 21:02

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
Zitat:

Zitat von Sir Rufo (Beitrag 1184905)
Versuche es mal mit
Delphi-Quellcode:
TCloseAction.caMinimize
;)


Bringt nichts, das Programm wird beendet statt minimiert:
Delphi-Quellcode:
procedure TformMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := TCloseAction.caMinimize;
end;

PeterPanino 28. Sep 2012 21:16

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
Übrigens, auch caHide BEENDET das Programm ...

sakura 28. Sep 2012 21:29

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
Der Rückgabewert Action wird im OnClose-Ereignis des Hauptformulares ignoriert.

Nutze anstatt OnCloseQuery schreibe
Delphi-Quellcode:
  CanClose := False;
  WindowState := wsMinimized;
...:cat:...

PeterPanino 28. Sep 2012 21:31

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
... und selbst bei docs.embarcadero stehen zwei Beispiele, die deshalb nicht funktionieren:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg('Close application ?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
Action := caFree
else
Action := caMinimize;
end;

PeterPanino 28. Sep 2012 21:34

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
Zitat:

Zitat von sakura (Beitrag 1184909)
Der Rückgabewert Action wird im OnClose-Ereignis des Hauptformulares ignoriert.

Komisch, aber wenn ich schreibe:

Action := System.UITypes.TCloseAction(caNone);

dann wird er nicht ignoriert und das Schließen wird verhindert.

sakura 28. Sep 2012 21:59

AW: Problem mit caNone, caMinimize bei Form.OnClose
 
Stimmt, caNone wird akzeptiert. Mein Fehler, die anderen werden trotzdem im Hauptformular ignoriert. Aber Du kannst ja
Delphi-Quellcode:
  Action := TCloseAction.caNone;
  WindowState := wsMinimized;
schreiben.

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 Uhr.
Seite 1 von 2  1 2      

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