在delphi中的Tform的onclose事件中释放一个对象

时间:2017-05-26 13:43:02

标签: delphi tform

我是Delphi的新手,我的问题可能非常基础。 我在Delphi程序中创建了一个表单。到目前为止,我正在使用ShowModal,然后在关闭表单后释放我想要处理内存泄漏的所有对象。不,我喜欢将表单显示为无模式,但我不知道如何在OnClose事件中释放对象。有没有人知道它的解决方案?

2 个答案:

答案 0 :(得分:1)

只需将Action参数设置为caFree

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

根据documentation

  

Action参数的值确定表单是否实际关闭。这些是Action的可能值:

     

caNone
  表格不允许关闭,所以没有任何反应。

     

caHide
  表单未关闭,只是隐藏。您的应用程序仍然可以访问隐藏的表单。

     

<强> caFree
  表单已关闭,表单的所有已分配内存已释放。

     

caMinimize
  表单最小化,而不是关闭。这是MDI子窗体的默认操作。

Action设置为caFree会导致表单在OnClose处理程序退出后自行调用Release()

  

销毁表单并释放其相关内存。

     

使用Release销毁表单并释放其相关内存。

     

在表单上的组件的表单和事件处理程序的所有事件处理程序都已完成执行之前,Release不会销毁表单。 Release还保证在表单发布之前处理表单事件队列中的所有消息。表单或其子代的任何事件处理程序都应使用Release而不是Free(Delphi)或delete(C ++)。如果不这样做可能会导致内存访问错误。

     

注意:Release会立即返回给调用者。它不会等待表单在返回之前被释放。

Release()向“表单”窗口发送延迟CM_RELEASE消息。一旦执行流程返回到主消息循环并且分派了消息,表单将从内存中释放出来。

如果您的TForm对象拥有其他对象,则在TForm被释放后,它们将自动释放。

答案 1 :(得分:-1)

你也可以 对于每个动态创建的对象执行

67 2 a b c a b 0.1 0.2 0.3 0.4 0.3 0.9 0.7 0.1
78 2 p o p q d 1.0 0.9 0.8 0.7 0.4 0.3 0.2 0.1

当前的Delphi版本(自Xe以来)文档建议使用新方法

Object.Free;

这种新方法在多设备应用程序(不同的操作系统)中进行了优化