如何在关闭后释放TFrame

3

当我们关闭一个窗口时,它并没有被释放,仍然留存在内存中并保持分配状态。

如何跟踪 TFrame 的 OnClose 事件,以便能够释放该窗口?


为什么不直接调用“Free”函数呢? - David Heffernan
谢谢David Heffernan,我在哪里调用了free()函数,因为在关闭窗体时没有发生事件。请告诉我。 - Vikas
当您想在主窗体之前关闭框架时,请调用Free。否则,您不需要做任何事情。您的实际问题是什么?请告诉我们。 - David Heffernan
有一个带有按钮的表单(如获取框架)。在表单上有一个面板,在面板上有一个框架。当我点击按钮时,框架会显示出来,我点击框架时它会从面板中退出,意味着关闭按钮将出现。关闭框架后,再次点击按钮时,框架不会显示,因为它已经被创建了。在这种情况下应该怎么办?请帮忙。 - Vikas
这让我觉得你的代码正在检查是否存在一个框架,而不是创建一个新的框架,并且在框架“关闭”时没有清除标记现有框架的条件。如果是这样的话,只需使用框架的析构函数来清除该条件。如果你仍然需要帮助,请展示你的实际代码。 - Remy Lebeau
抱歉没有发布源代码。实际上,当关闭窗口时,窗口的析构函数没有被调用。为什么? - Vikas
1个回答

4

TFrame没有OnClose事件。你需要手动实现和跟踪它。但是,当你准备释放Frame对象时,可以像TForm.Release()一样 - 给自己发送一个自定义消息,然后在消息处理程序中释放对象。例如:

type
  TMyFrame = class(TFrame)
  private
    procedure CMRelease(var Message: TMessage); message CM_RELEASE;
  public
    procedure Release;
  end;

procedure TMyFrame.CMRelease(var Message: TMessage);
begin
  Free;
end;

procedure TMyFrame.Release;
begin
  PostMessage(Handle, CM_RELEASE, 0, 0);
end;

当您需要释放该帧时,只需调用 Release() 方法,它将在其最早方便的时间自动释放。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接