zapisf := TFormaZapisu.Create(nil);
Jeśli tworzysz formularz dynamicznie, to do konstruktora w parametrze AOwner
(lub TheOwner
- są dwa konstruktory, ale argumenty tego samego typu - TComponent
) przekazuj formularz-rodzic, najbezpieczniej wykorzystać do tego celu Self, czyli:
zapisf := TFormaZapisu.Create(Self); { słabe nazewnictwo }
Poza tym w kodzie tworzącym formularz brakuje zwolnienia z pamięci obiektu zapisf
, więc po ShowModal
wywołaj metodę Free
; No chyba, że ten formularz zwalniasz gdzie indziej niż w podanym bloku i zmienna zapisf
jest np. polem klasy głównego formularza lub globalną zmienną (argh!);
babubabu napisał(a)
A przy okazji to SaveList bym wywołał w OnClose formy.
A ja bym polecał nie OnClose
, tylko OnDestroy
, bo jeśli ten dynamicznie tworzony formularz ma jakąś implementację zdarzenia OnCloseQuery
, to trzeba by upewnić się, że po anulowaniu zamknięcia formularza metoda SaveList
nie zostanie wywołana; Jeśli zapis ma się odbyć tylko raz (przy zwalnianiu formularza z pamięci), to najodpowiedniejsze do tego celu jest zdarzenie OnDestroy
;
@serge - to nie implementacja klasy TForm
jest wadliwa, tylko Twój kod; Sam formularz zwolni się z pamieci poprawnie, o ile prawidłowo go utworzysz i prawidłowo zwolnisz; Ty go nie zwalniasz z pamięci, więc dodaj wywołanie metody Free
lub skorzystaj z FreeAndNil (jeśli to konieczne) na zmiennej zapisf
i wtedy sprawdź;
Nie znamy także metod SetList
oraz SaveList
, a w nich może czaić się zło.