![]() |
einzelne Komponenten während der Laufzeit löschen?
Hallo.
Wie kann ich einzelne Komponenten während der Laufzeit löschen? Zum Beispiel soll während der Laufzeit Image1 gelöscht werden. Ich bekomme es nur hin, alle Images zu löschen. Meine Versuche mit
Delphi-Quellcode:
klappen nicht.:-(
var temp : TComponent;
A: Integer; begin for A:= ComponentCount - 1 downto 0 do begin Temp := Components[A]; if (Temp is Image[A]) then begin Temp.Free ; end; end; Gruß Heike |
Re: einzelne Komponenten während der Laufzeit löschen?
Das einfachste wäre
Delphi-Quellcode:
Image1.Free;
|
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
Gruß Heike |
Re: einzelne Komponenten während der Laufzeit löschen?
Delphi-Quellcode:
Form.FindComponent ('Image'+IntToStr(i)).Free;
|
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
Delphi-Quellcode:
bekomme ich eine 'Zugriffsverletzung'.
Form1.FindComponent ('Image'+IntToStr(A)).Destroy;
Gruß Heike |
Re: einzelne Komponenten während der Laufzeit löschen?
Versuch mal die Referenz vor dem Freigeben lokal zwischenzuspeichern
Delphi-Quellcode:
.Free ist dem .Destroy eindeutig vorzuziehen.
obj: TComponent;
... obj := Form1.FindComponent(...); obj.Free; |
Re: einzelne Komponenten während der Laufzeit löschen?
Wie erstellst Du das Image?
Wenn Du es dynamisch erstellst, weis beim erstellen einen Namen zu. |
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
|
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
Es kommt ja auch keine Fehlermeldung! Es wird nur nicht gelöscht. Gruß Heike |
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
Delphi-Quellcode:
Das geht von 0 bis 100. Im laufe einer Berechnung soll eins von den Images gelöscht werden.
...
Bild[I] := TFigur.Create(Self); Bild[I].Parent := Form1; ... Wenn ich jetzt mit lösche
Delphi-Quellcode:
kommt keine Fehlermeldung, aber es wird nicht gelöscht.
Form.FindComponent ('Bild'+IntToStr(i)).Free;
Gruß Heike |
Re: einzelne Komponenten während der Laufzeit löschen?
Wenn du den Images keinen Namen gibst kannst du es auch nicht mit FindComponent finden. Aber wie man sieht packst du die Images ja in ein Array (oder eine Liste). Somit kannst du das Bild einfach über
Delphi-Quellcode:
frei geben.
Bild[I].Free
|
Re: einzelne Komponenten während der Laufzeit löschen?
Genau meine Worte :mrgreen:
Zu empfehlen ist, nach .Free die Variable zu löschen, um mit Assign prüfen zu können, ob das Image schon gelöscht wurde.
Delphi-Quellcode:
So tust Du Dir leichter, wenn Du alle im Array befindlichen Images löschen möchtest.
// Beispiel:
Bild[I].Free; Bild[I]:=nil; |
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
Delphi-Quellcode:
// Beispiel:
FreeAndNil(Bild[I]); |
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
|
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
|
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
Für alle die nicht D7 oder besser haben, meine Version nehmen :mrgreen: |
Re: einzelne Komponenten während der Laufzeit löschen?
und es funktioniert auch nur wenn es sich wirklich um ein Array handelt und nicht um ein Property wo eine Get-Methode dahinter steckt.
|
Re: einzelne Komponenten während der Laufzeit löschen?
Zitat:
doch, klappt. Vielen Dank. Kann man davor auch so eine Art Sicherheitsabfrage setzen, nach dem Motto
Delphi-Quellcode:
oder so?
If Bild[I].vorhanden = true Then FreeAndNil(Bild[I]);
Gruß Heike |
Re: einzelne Komponenten während der Laufzeit löschen?
Delphi-Quellcode:
If Assigned()
|
Re: einzelne Komponenten während der Laufzeit löschen?
Ja, kann man:
Delphi-Quellcode:
PS: Vergiss das mit dem = True :zwinker:
If Assigned(Bild[I]) then FreeAndNil(Bild[I]);
|
Re: einzelne Komponenten während der Laufzeit löschen?
Was allerdings vor Free nicht notwendig ist, da es das schon selbst prüft ;) .
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 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-2025 by Thomas Breitkreuz