2013-06-10 2 views
3

Когда мы закрываем фрейм, он не освобождается, он все еще остается в памяти и по-прежнему назначается.Как освободить TFrame после закрытия

Как отслеживать событие OnClose TFrame, чтобы иметь возможность освободить фрейм?

+0

Почему бы вам просто не называть 'Free'? –

+0

Спасибо Дэвиду Хеффернану, где я позвонил бесплатно, потому что при закрытии фрейма не произошло событие. Пожалуйста, скажите мне. – Vikas

+0

Call Free, если вы хотите закрыть кадр перед формой хоста. В противном случае вам не нужно ничего делать. Какова ваша фактическая проблема? Расскажите об этом. –

ответ

3

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(), когда вам нужно освободить раму, и он будет освобождаться в ближайшее удобное.

Смежные вопросы