如何显式释放由Application拥有的TForm派生类分配的GDI句柄?

时间:2010-06-23 22:10:49

标签: delphi resources c++builder gdi

从应用程序关闭之前,从TForm派生的单个类似乎会保留GDI句柄。

class TTestForm : public TForm {
  public:
    TTestForm(TComponent*);
};

std::auto_ptr<TTestForm> test(new TTestForm(NULL));
test->ShowModal();

我对VCL很新,所以请耐心等待。该测试使用不包含对照的表格完成。据我所知,如果没有指定所有者,则所有对象都归Application所有。

我的应用程序动态创建(并销毁)很多表单。每次显示表单时都会分配3-4个新的GDI句柄。有没有办法在应用程序生命周期中显式释放那些GDI句柄?

2 个答案:

答案 0 :(得分:0)

警告:我是Delphi程序员,而不是C ++,但VCL基本上就是VCL。您可以尝试使用表单的Release()方法而不是free()。或者,在OnClose事件中设置Action参数传递给 caFree - 这应该告诉VCL在表单关闭时释放窗口的资源,而不是隐藏它。

我想另一个问题是 - 你需要继续创建/销毁表格吗?你可以创建一次然后重复使用它们吗?

答案 1 :(得分:0)

事实证明泄漏是由错误设置的TImageList.ShareImages属性引起的。