FormのイベントにあるOnClose、OnCloseQuery、OnDestroyの違いについて詳しい方、ご教示願います。
ヘルプは見られました?
こちらでは、こんな風に話題になったことがあるようですよ。
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=48092
私は
生成と破棄をFormCreateとFormDestroy
起動と終了をFormCreateとFormCloseQueryで
と、対になるような感じで記述しますね。
FormCreateの前半に生成コードを書き
後半でIniファイル読み出しとか各種初期設定などをしています。
OnClose、OnCloseQuery、OnDestroy
OnCloseはフォームを閉じるとき。
OnCloseQueryはフォームを閉じようとしたとき。
OnDestroyはフォームを破棄するとき。
メインフォームの場合 Close するとそのまま終了(解放)するので
OnClose と OnDestroy の違いがあまり分からないかもしれませんが
以下のようなプログラムで確認してみると理解できるかもしれません。
//---------------------------------------------------------------
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm4 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Memo1: TMemo;
Button5: TButton;
Button6: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form4: TForm4;
implementation
uses Unit5;
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
begin
Form5 := TForm5.Create(Self);
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
Form5.Show;
end;
procedure TForm4.Button3Click(Sender: TObject);
begin
Form5.Close;
end;
procedure TForm4.Button4Click(Sender: TObject);
begin
Form5.Free;
end;
procedure TForm4.Button5Click(Sender: TObject);
begin
Form5.Hide;
end;
procedure TForm4.Button6Click(Sender: TObject);
begin
Form5.Release;
end;
end.
//----------------------------------------------------------------
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm5 = class(TForm)
Button1: TButton;
RadioButton1: TRadioButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form5: TForm5;
implementation
uses Unit4;
{$R *.dfm}
procedure TForm5.Button1Click(Sender: TObject);
begin
end;
procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form4.Memo1.Lines.Add('Close');
end;
procedure TForm5.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
Form4.Memo1.Lines.Add ('CloseQuery');
end;
procedure TForm5.FormCreate(Sender: TObject);
begin
Form4.Memo1.Lines.Add ('Create');
end;
procedure TForm5.FormDestroy(Sender: TObject);
begin
Form4.Memo1.Lines.Add ('Destroy');
end;
ツイート | ![]() |