Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Prüfen, ob Komponente vorhanden (https://www.delphipraxis.net/115821-pruefen-ob-komponente-vorhanden.html)

cltom 18. Jun 2008 15:05


Prüfen, ob Komponente vorhanden
 
Hallo DP,

eine bestimmt oftmals gelöste Frage, ich habe auf die Schnelle nichts gefunden, einer von Euch hat das aber vermutlich in 3 sekunden.

Wie kann ich feststellen, ob eine Komponente (die ich zur Laufzeit erzeugt habe), bereits existiert? Ich könnte vielleicht Try - FindComponent machen, das erscheint mir aber wenig elegant.

dank und gruß
tom

Meflin 18. Jun 2008 15:15

Re: Prüfen, ob Komponente vorhanden
 
Ähm, wenn du eine Komponente zur Laufzeit erzeugst, solltest du eigentlich selbst sehr gut wissen ob sie nun existiert oder nicht :gruebel:

cltom 18. Jun 2008 15:33

Re: Prüfen, ob Komponente vorhanden
 
Zitat:

Zitat von Meflin
Ähm, wenn du eine Komponente zur Laufzeit erzeugst, solltest du eigentlich selbst sehr gut wissen ob sie nun existiert oder nicht :gruebel:

Guter Einwand. :oops: Ich könnte mir merken, welche Komponenten ich erzeugt hatte.

Hintegerund dazu: es wird eine Bibliothek von Images erstellt. Es werden eine Reihe von Bildern eingelesen, für jedes Bild ein image erzeugt und das Image erhält den Dateinamen als Komponentennamen. Im Grunde würde es also wohl tatsächlich genügen, die Liste von Dateinamen aufzuheben, nachdem ich sie erzeugt habe.

Es hat sich ohnehin gelöst, weil offenbar ein Free auf eine nicht existierende Komponente auch keinen Fehler erzeugt ...

Balu der Bär 18. Jun 2008 15:35

Re: Prüfen, ob Komponente vorhanden
 
Ich hatte zwar seit Jahren kein Delphi mehr offen, aber sollte sowas nicht gehen? :gruebel:

Delphi-Quellcode:
if(Komponente <> nil) then ShowMEssage('vorhanden');

dominikkv 18. Jun 2008 16:34

Re: Prüfen, ob Komponente vorhanden
 
Du kannst mit
Delphi-Quellcode:
if Kompo <> nil then // oder besser mit:
if Assigned(Kopo) then
schauen ob dieser Zeiger auf eine Komponente zeigt. Achtung: es können auch mehrere Zeiger auf diese zeigen (oder sogar auch garkeiner).
Das setzt aber voraus das du beim freigeben des Objekts die Zeiger auch auf NIL setzten musst! Anstatt also Kompo.Free; aufzurufen musst du jetzt FreeAndNil(Kompo); schreiben.

edit:
Zitat:

Zitat von cltom
Es hat sich ohnehin gelöst, weil offenbar ein Free auf eine nicht existierende Komponente auch keinen Fehler erzeugt ...

.Free; überprüft zuerst ob das Objekt existiert, wenn ja wird .Destroy aufgerufen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz