Zdarzenie w Delphi wywołane po zamknięciu i po zniszczeniu formy

0

Witam.

  1. Jak w temacie.. mam w projekcie w Delphi 2007 formę główną i może być kilka form statycznych lub tworzonych dynamicznie na przykład z klas..
  2. Po zamknięciu dowolnej formy potrzebuję zdarzenie/ trick coś jak OnAfterCloseForm które by działało gdy forma się zamknie w OnClose i zanim zrobi free jeśli jest dynamiczna. Tylko teraz pytanie skoro to ma być procedura podpięta do Form1.OnAfterCloseForm to jak ma zadziałać po wyczyszczeniu formy z pamięci.. pisze żeby było wiadomo jak to ma działać.
  3. Z tego zdarzenia Form1.OnAfterCloseForm będącego w każdej formie, chciałbym wywołać zdarzenie w Formie głównej FormMain.CheckFormsAll, które ma sprawdzać czy są jeszcze jakieś otwarte/ utworzone w pamięci formy poza główną.

Mógłbym to zrobić na przykład poprzez aktywację timera w formie głównej, który coś by robił po 1j czasu.. ale takie zdarzenie OnAfterCloseForm daje mi więcej korzyści. Poza tym jeśli jakaś forma będzie obładowana i w Destroy będzie maiła dużo do zrobienia to może się okazać, że po jeszcze nie skończyła, a timer już ją zliczył i efekt będzie błędny.

Czy ktoś podpowie jak zmajstrować coś najbardziej zbliżonego w działaniu?

Dziękuję i pozdrawiam.

0

To nie rób takiego zdarzenia w klasie tworzonego formularza; Skoro jakaś akcja ma być wywoływana bo zamknięciu i zniszczeniu danego formularza, to nie będziesz miał dostępu do pamięci, którą ten formularz zawierał, więc i żadnego jego kodu nie wywołasz;

Nie kombinuj z żadnymi timerami - po prostu wykonaj żądaną akcję w miejscu, gdzie zwalniasz z pamięci formularz; A jeśli taki formularz wywołujesz metodą Show (czyli niemodalnie), to niech formularz wywoła jakąś metodę np. podczas zamykania formularza (OnClose) lub jego niszczenia (OnDestroy), nienależącą do niego, czyli jakoś powiadomi formularz nadrzędny, że właśnie usuwa się z pamięci.

0

Tylko w takim przypadku mam problem gdy zamykam na przykład przyciskiem zamknij bezpośrednio taką Formę. Jeszcze pomyślę jak to ominąć. Bo chodzi o informacje/ monitoring gdy forma już nie istnieje.

1

Tylko w takim przypadku mam problem gdy zamykam na przykład przyciskiem zamknij bezpośrednio taką Formę.

Ale jaki problem? Przecież po kliknięciu w przycisk X formularza i tak najpierw wywoływane jest zdarzenie OnClose, w którym możesz coś wykonać, a później wywoływane jest zdarzenie OnDestroy, w którym także możesz coś wykonać;

Jeszcze pomyślę jak to ominąć. Bo chodzi o informacje/ monitoring gdy forma już nie istnieje.

Skoro formularz już nie istnieje, to co i jak chcesz monitorować? Musisz dać znać nadrzędnemu formularzowi, że formularz potomny usuwa się z pamięci; Nie wiem jak by to miało wyglądać inaczej, jak przez dostęp do jakiejś metody formularza głównego;

Ewentualnie (jeśli możesz) wyświetl formularz potomny modalnie i czekaj na jego zamknięcie, po czym wykonaj jakiś kod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1