开发者

How to explicitly release GDI handles allocated by TForm derived class owned by the Application?

A single class derived from TForm appears to hold onto GDI handles until the application is closed.

class TTestForm : public TForm {
  public:
    TTes开发者_C百科tForm(TComponent*);
};

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

I'm quite new to VCL, so please bear with me. This test was done with a form that contains no controls. As far as I udnerstand, all objects are owned by the Application if no owner is specified.

My application creates (and destroys) a lot of forms dynamically. 3-4 new GDI handles are allocated each time a form is displayed. Is there a way to explicitly release those GDI handles during application lifetime?


Caveat: I'm a Delphi programmer, not C++, but the VCL is basically the VCL. You can try the form's Release() method instead of free(). Or alternatively, in the OnClose event set the Action parameter passed to caFree - thats supposed to tell the VCL to free the window's resources when the form closes, rather than hiding it.

I guess another question is - do you need to keep creating/destroying the forms? Can you create them once and then reuse them?


It turns out that the leak was caused by an incorrectly set TImageList.ShareImages property.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜