Как моделировать событие OnDestroy на TFrame в Delphi?

Как я могу моделировать OnDestroy событие для a TFrame в Delphi?


я nievely добавленный a constructor и destructor к моему кадру, думая, именно это TForm делает:

TframeEditCustomer = class(TFrame)
...
public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   ...
end;

constructor TframeEditCustomer.Create(AOwner: TComponent)
begin
    inherited Create(AOwner);

    //allocate stuff
end;

destructor TframeEditCustomer.Destroy;
begin
   //cleanup stuff

   inherited Destroy;
end;

Проблема с этим состоит в том, что к этому времени мои выполнения деструктора, средства управления на кадре были уничтожены и больше не действительны.

Причина этого находится в содержании деструктора формы, который это использует для огня OnDestroy событие:

destructor TCustomForm.Destroy;
begin
   ...
   if OldCreateOrder then DoDestroy; //-->fires Form's OnDestroy event; while controls are still valid
   ...
   if HandleAllocated then DestroyWindowHandle; //-->destroys all controls on the form, and child frames
   ...
   inherited Destroy; //--> calls destructor of my frame
   ...
end;

Деструктор моего объекта кадра называют, когда деструктор формы работает. Проблема с этим состоит в том, что слишком поздно. Вызовы формы DestroyWindowHandle, который просит, чтобы Windows уничтожил дескриптор окна формы. Это рекурсивно уничтожает все дочерние окна - включая дочерние окна на моем кадре.

Таким образом, когда мой кадр destructor выполнения, я пытаюсь к средствам управления доступом, которые больше не находятся в допустимом состоянии.


Как я могу моделировать OnDestroy событие для a TFrame в Delphi?

См. также

6
задан Ian Boyd 20 October 2010 в 15:04
поделиться