![]() |
Komponeten zerstören
hi
ich erzeuge komponeten zur laufzeit. nun will ich diese zerstören. ich will dafür ne allgemein prozedur verwenden etwa so:
Delphi-Quellcode:
das zerstören klappt auch so weit.
procedure Destroy_Component(Compo : TComponent);
begin if Compo <> nil then begin Compo.Destroy; Compo := nil; Compo.Free; end; end; wenn ich aber diese komponenten die zerstört ist, wieder erstellen will frage ich
Delphi-Quellcode:
diese abfrage ist aber false!, d.h. die komponente existiert noch.
if not(assigned(Compo )) then <--Compo ist die zertörte komponete
.... erstellen der komponente wenn ich aber die komponete ohne diese prozedur zerstöre also manuell(z.b. ein panel):
Delphi-Quellcode:
und dann die abfrage mache ob die komponente noch existiert ist diese true! obwohl ich das selbe gemacht habe?
panel.destroy;
panel := nil; panel.free; wer kann mir helfen |
Re: Komponeten zerstören
Versuchs mal mit FreeAndNil:
Delphi-Quellcode:
procedure Destroy_Component(Compo : TComponent);
begin if Compo <> nil then FreeAndNil(Compo); end; |
Re: Komponeten zerstören
will ich nicht kannst du mir sagen woran es liegt
|
Re: Komponeten zerstören
1. Mit Assignde prüfst du ob der Zeiger (hier Compo) den Wert nil hat.
2. Folgendes steht in der OH: Zitat:
|
Re: Komponeten zerstören
wenn ich die komponente nach obiger prozedur zertöre und frei gebe dann ist sie nil: also warum gibt dann assign true zurück?
|
Re: Komponeten zerstören
Ersetz mal
Delphi-Quellcode:
durch
procedure Destroy_Component(Compo : TComponent);
begin if Compo <> nil then begin Compo.Destroy; Compo := nil; Compo.Free; end; end;
Delphi-Quellcode:
procedure DestroyComponent(Compo: TComponent);
begin if Compo <> nil then begin Compo.Free; Compo := nil; end; end; |
Re: Komponeten zerstören
Es gibt false zurück!
Du hast ja geschrieben if not(assigned(Compo)) = true .... Das würde also beduten, diese Aussage ist wahr, wenn Assigned False zurückgibt. Ergo: Compo ist Nil! |
Re: Komponeten zerstören
Die Funktion Assigned prüft, ob ein Zeiger oder eine Prozedurvariable den Wert NIL hat (nicht zugewiesen ist).
if Assigned(Component) then //Instanz erstellt ich frage ja bevor ich die komponete erstelle ob sie nil ist. falls sie nämlich scho existiert bekomme ich ja ne exception! |
Re: Komponeten zerstören
Das ist genau das was ich gemeint habe.
|
Re: Komponeten zerstören
also passt die abfrage aber was ist der unterschied zwischen dem zerstören in der prozedur und der manuellen zerstörung?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz