[Delphi] Dynamiczna forma - zamknięcie

0

Mam formę dziecko wywoływaną dynamicznie
fmPodmiotSzukaj:=TfmPodmiotSzukaj.Create(mdiForma);

Formę dziecka fmPodmiotSzukaj chcę zamykać buttonem a nie przez "X"
no i mam:

procedure TfmPodmiotSzukaj.bbZamknijClick(Sender: TObject);
begin
  fmPodmiotSzukaj.Close;
end;
procedure TfmPodmiotSzukaj.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  action:=caFree;
  fmPodmiotSzukaj:=nil;
end;

Gdy otworzę dwa formularze i je później zamykam to przy zamykaniu drugiego pojawia się błąd:
Project Moj.exe raised exception class EAccessViolation with message 'Access violation at address 0046DD25 in module 'Moj.exe' . Read of address 000002F4 '. Process stoped.

Może ktoś wie jak się go pozbyć - szukałem na forum ale nieznalazłem.
Pozdr. ;)

0

Witam
Wydaje mi sie że to:

fmPodmiotSzukaj:=nil;

powinno być w zdarzeniu OnDestroy :)
Zmień na:

procedure TfmPodmiotSzukaj.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TfmPodmiotSzukaj.FormDestroy(Sender: TObject);
begin
  fmPodmiotSzukaj:=nil;
end;

Pozdrawiam

0

No niestety nie pomogło dalej jest błąd :> .

0

Rozwiązanie dostałeś na forum p-zone.pl

0

Nie można zniszczyc formy przez Free (Destroy w ogóle nie należy używać) wewnątrz procedury obsługi zdarzenia tej formy. Zamiast Free należy użyć Release, które czeka aż zdarzenie się skończy i dopiero zwalnia formę).

0
guest23 napisał(a)

Rozwiązanie dostałeś na forum p-zone.pl

Chyba przez sen czytałeś posty na forum p-zone.pl - rozwiąznia tam nie ma dalej są błędy tylko z innymi adresami.

pq napisał(a)

Nie można zniszczyc formy przez Free (Destroy w ogóle nie należy używać) wewnątrz procedury obsługi zdarzenia tej formy. Zamiast Free należy użyć Release, które czeka aż zdarzenie się skończy i dopiero zwalnia formę).

Możesz troszeczkę rozjaśnić.

Pozdr. ;)

0
rkdusiek napisał(a)

Możesz troszeczkę rozjaśnić.

A co ma być jasniej? Napisz w programie Release, naciśnij F1, wybierz TCustomForm.Release i poczytaj

0

"pq" bez nerwów :> - wtedy byłem w robocie i nie miałem dostępu do Delphi!

Już działa z Release.

Dzięki za podpowiedź ;)

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