Ich habe Beispielcode unter kann jemand erklären, warum Delphi Compiler nicht alle Speicherzuweisung für Objekt freigeben, so dass keine Überprüfung immer wahr ist. im benutze release-Methode für die Zerstörung von TLoginForm im nicht mit freien Methode, weil das gab mir Ausnahme, wenn einige Schnittstelle Ereignis zuvor kostenlos oder danach aufgerufen.So vervollständigen Release Child Form von Speicherzuweisung
type
TMainForm = class(TForm)
{some stuf}
public
procedure Create(AOwner: TComponent); override;
procedure doLogout();
end;
TChildBase = class(TForm)
{some stuf}
public
procedure Create(AOwner: TComponent); override;
end;
TLoginForm = class(TChildBase)
public
procedure doLogin();
end;
var
MainForm: TMainForm; {<== created automaticaly at runtime}
LoginForm: TLoginForm; {<== created at create event in TMainForm}
implementation
{TLoginForm}
procedure TLoginForm.doLogin;
begin
if true then
begin
{ Do Interfaced Event to main form }
Release;
end;
end;
procedure TMainForm.Create(AOwner: TComponent);
begin
inherited;
FormStyle := fsMDIForm;
LoginForm := TLoginForm.Create(Application); {Create login form}
end;
procedure TMainForm.doLogout;
begin
{ Do Interfaced Event to Child Form except TLoginForm to close}
if LoginForm <> nil then {<== this still alocated at memory}
LoginForm := TLoginForm.Create(Application)
else
LoginForm.Show; {<== Error raised here.}
end;
Herr David, Sie haben Recht, ich überprüfe den Grund, wenn ich aus triftigem Grund die Überprüfung bei DoLogout setze. also war meine Methode zur Überprüfung falsch, wenn man sie mit Null vergleicht. https://stackoverflow.com/a/8550628/ war hilfreich für mich. –