Delphi 使事件窗体关闭
我正在手动创建一个表单,我有我需要的东西,但我想控制FormClose事件,但找不到如何操作的信息,我只想从显示中创建事件和FormClose代码 我得到的是:Delphi 使事件窗体关闭,delphi,Delphi,我正在手动创建一个表单,我有我需要的东西,但我想控制FormClose事件,但找不到如何操作的信息,我只想从显示中创建事件和FormClose代码 我得到的是: function make_form():bool; var frm: TForm; begin frm := TForm.Create(nil); frm.Caption := 'Title'; frm.Width := 500; frm.Height :=
function make_form():bool;
var
frm: TForm;
begin
frm := TForm.Create(nil);
frm.Caption := 'Title';
frm.Width := 500;
frm.Height := 300;
end;
此代码是单元中的函数
我怎样才能做到这一点?你的代码不是真的
要以动态创建的形式处理关闭事件,必须将事件处理程序分配给事件属性OnClose:
frm.OnClose := CloseProc;
CloseProc
应该是具有所需原型的某个对象(例如,主形式)的方法
TFormMain = class(TForm)
...
procedure CloseProc(Sender: TObject; var Action: TCloseAction);
...
implementation
procedure TformMain.CloseProc(Sender: TObject; var Action: TCloseAction);
begin
//use Sender if needed
end;
你的功能是无用的 创建对象时使用try..finally 从这样开始
type
// Dummy class:
TFrmHandlers = class
// Close handlers:
class procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
implementation
.....
class procedure TFrmHandlers.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('The form will closed now');
end;
procedure make_form();
var
frm: TForm;
begin
frm := TForm.Create(nil);
try
frm.Caption := 'Title';
frm.Width := 500;
frm.Height := 300;
frm.OnClose := TFrmHandlers.FormClose;
frm.ShowModal;
finally
frm.Free;
end;
end;
如何创建方法对象?使用与IDE生成事件处理程序相同的方法。请参阅示例谢谢,在您的帮助下更新源代码时,源代码有一个未声明的新错误标识符:“CloseProc”,因为
CloseProc
属于某个对象或类(如图所示),并且您必须指定命名空间(如果您的代码不在该类方法内),否则会泄漏表单。您不设置返回值。无法显示该表单。请不要显示假代码。请问您为什么使用类过程而不是常规过程?您确实意识到,这样做会暴露在没有任何现有TFrmHandlers实例的情况下调用该方法的潜在错误。如果该方法试图访问任何属于TFrmHandlers实例的数据,则会导致AV。@SilverWarior访问任何属于TFrmHandlers实例的数据,则会导致AV。
这是查询者的责任,我假设查询者没有合适的类来放置关闭事件。但即使如此,他也不必创建该虚拟类的实例,但他可以将处理程序分配给它。啊!现在我明白你为什么使用类过程了。您这样做是因为该过程是该虚拟类的一部分。这是可以理解的。但是您应该警告OP,在这种情况下,它不应该使用Self
,因为它不会引用表单类实例,而是引用伪类实例。这可能会导致操作部分出现很多混乱。@Silver你搞错了。在类中,方法Self
引用类而不是实例。毕竟,它怎么可能引用类方法中的实例呢。这里根本不需要创建任何实例。