Delphi:表单可以自行释放吗?

时间:2009-04-02 08:46:46

标签: delphi self-destruction

我有一个用于显示某些信息几秒钟的表单。表单可以自由释放吗?我可以在构造函数中启动一个计时器,然后在timer-event中调用self.free吗?或者这可能会导致麻烦吗?

4 个答案:

答案 0 :(得分:30)

此外,您可以使用表单拨打Release

它向表单发送CM_RELEASE消息。作为一种反应,它称为自由。 释放的优点是表单中没有留下可能导致崩溃的消息。

答案 1 :(得分:17)

当用户或代码关闭时,您可以使表单自由释放:

procedure TForm27.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TForm27.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := True;
end;

procedure TForm27.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  Close;
end;

确保在构造函数中提供所有者,以便应用程序关闭,并且表单当时不会被销毁。所有者将在释放之前释放该表单。

答案 2 :(得分:1)

我有一整套自由的对象,我对它们进行了各种测试,没有出现任何问题/泄漏。 TForm可能更复杂,但只要Self.Free()是最后一次调用,你应该是安全的。

(对于那些想知道为什么在地球上我有自由的对象的人;我经常在系统中传递它们,所以我通过自己的引用计数方案实现。当最后一个引用被释放时,对象就自由了。) / p>

答案 3 :(得分:0)

这正是Interfaces所做的。