如果将一个过程赋给窗体的onclose事件? ( 积分: 50 )

  • 主题发起人 主题发起人 idecl
  • 开始时间 开始时间
I

idecl

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个程序中,将所有的窗体放在主窗体的 panel里,现在要关闭窗体里调用窗体的
Action:=cafree;
Form1:=nil;

这两句代码,我想写成一个过程,在主窗体里调用,请问怎么将这个过程赋过form1.onclose事件?
if key = VK_ESCAPE then
begin
//showmessage(screen.Forms[1].Name);
if screen.FormCount>1 then
begin
screen.forms[screen.FormCount-1].onclose := ???; //这个过程怎么写?
screen.Forms[screen.FormCount-1].Close;
end;
end;
 
查看form1的onclose事件类型 TCloseEvent
TCloseEvent = procedure(Sender: TObject; var Action: TCloseAction) of object;
所以你就写一个同样类型的过程即可。。。
小例子如下:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure xxx(sender: tobject; var Action: TCloseAction);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Self.OnClose:= xxx;
Self.Close;
end;

procedure TForm1.xxx(sender: tobject; var Action: TCloseAction);
begin
ShowMessage('关闭吧,baby');
Action:= caFree;
end;

end.
 
谢谢,我给你分
 
[:)] 再问一句,那form1 := nil 这句怎么用参数表示呢? 事先我并不知道是哪个form呀
 
后退
顶部