Diese MainForm prüft alle (mit Application als Owner) Formulare, ob diese sich schließen können.
Mit der Property CloseForce kann man das Schliessen erzwingen (was beim Abmelden/Herunterfahren -> WM_ENDSESSION auch gemacht wird).
Delphi-Quellcode:
unit frmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class( TForm )
procedure FormCloseQuery( Sender : TObject;
var CanClose : Boolean );
procedure FormCreate( Sender : TObject );
private
FCloseForce : Boolean;
protected
procedure WMEndSession(
var message : TWMEndSession );
message WM_ENDSESSION;
public
property CloseForce : Boolean
read FCloseForce
write FCloseForce;
end;
var
Form1 : TForm1;
implementation
uses
frmData;
{$R *.dfm}
procedure TForm1.FormCloseQuery( Sender : TObject;
var CanClose : Boolean );
var
idx : Integer;
begin
if not CloseForce
then
for idx := 0
to Application.ComponentCount - 1
do
if ( Application.Components[idx] <> Self )
and ( Application.Components[idx]
is TForm )
then
CanClose := CanClose
and TForm( Application.Components[idx] ).CloseQuery;
end;
procedure TForm1.FormCreate( Sender : TObject );
begin
CloseForce := False;
end;
procedure TForm1.WMEndSession(
var message : TWMEndSession );
begin
inherited;
CloseForce := True;
end;
end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)