Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi einzelne Komponenten während der Laufzeit löschen? (https://www.delphipraxis.net/79627-einzelne-komponenten-waehrend-der-laufzeit-loeschen.html)

smart 25. Okt 2006 15:26


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:
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;
klappen nicht.:-(

Gruß
Heike

SirThornberry 25. Okt 2006 15:29

Re: einzelne Komponenten während der Laufzeit löschen?
 
Das einfachste wäre
Delphi-Quellcode:
Image1.Free;

smart 25. Okt 2006 15:34

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Zitat von SirThornberry
Das einfachste wäre
Delphi-Quellcode:
Image1.Free;

Entschuldigung, ich hatte verssen zu schreiben, dass mir der Name 'Image1' nicht bekannt ist. Mir ist nur 'Image' bekannt die '1 ... 100' errechnet sich erst wenn die Sache läuft.

Gruß
Heike

mkinzler 25. Okt 2006 15:39

Re: einzelne Komponenten während der Laufzeit löschen?
 
Delphi-Quellcode:
Form.FindComponent ('Image'+IntToStr(i)).Free;

smart 25. Okt 2006 15:51

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
Form.FindComponent ('Image'+IntToStr(i)).Free;

Ist so schön einfach, klappt aber nicht. Und mit
Delphi-Quellcode:
Form1.FindComponent ('Image'+IntToStr(A)).Destroy;
bekomme ich eine 'Zugriffsverletzung'.

Gruß
Heike

mkinzler 25. Okt 2006 16:01

Re: einzelne Komponenten während der Laufzeit löschen?
 
Versuch mal die Referenz vor dem Freigeben lokal zwischenzuspeichern

Delphi-Quellcode:
obj: TComponent;
...
obj := Form1.FindComponent(...);
obj.Free;
.Free ist dem .Destroy eindeutig vorzuziehen.

Sunlight7 25. Okt 2006 16:06

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.

SirThornberry 25. Okt 2006 16:18

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Zitat von smart
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
Form.FindComponent ('Image'+IntToStr(i)).Free;

Ist so schön einfach, klappt aber nicht.

Also mir hat weder der Compiler noch das Programm jemals den Fehler "klappt nicht" ausgegeben. :wink:

smart 25. Okt 2006 16:32

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Zitat von SirThornberry
[Also mir hat weder der Compiler noch das Programm jemals den Fehler "klappt nicht" ausgegeben. :wink:

Hi.

Es kommt ja auch keine Fehlermeldung! Es wird nur nicht gelöscht.

Gruß
Heike

smart 25. Okt 2006 16:42

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Zitat von Sunlight7
Wie erstellst Du das Image?
Wenn Du es dynamisch erstellst, weis beim erstellen einen Namen zu.

Ich erzeuge die Images so
Delphi-Quellcode:
...
Bild[I] := TFigur.Create(Self);
Bild[I].Parent := Form1;
...
Das geht von 0 bis 100. Im laufe einer Berechnung soll eins von den Images gelöscht werden.
Wenn ich jetzt mit lösche
Delphi-Quellcode:
Form.FindComponent ('Bild'+IntToStr(i)).Free;
kommt keine Fehlermeldung, aber es wird nicht gelöscht.

Gruß
Heike

SirThornberry 25. Okt 2006 16:49

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:
Bild[I].Free
frei geben.

Sunlight7 25. Okt 2006 17:08

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:
// Beispiel:
Bild[I].Free;
Bild[I]:=nil;
So tust Du Dir leichter, wenn Du alle im Array befindlichen Images löschen möchtest.

mkinzler 25. Okt 2006 17:12

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

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.
Kann auch in einem Aufwasch erledigt werden
Delphi-Quellcode:
// Beispiel:
FreeAndNil(Bild[I]);

Sunlight7 25. Okt 2006 17:19

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Zitat von mkinzler
Kann auch in einem Aufwasch erledigt werden

Vorausgesetzt, die verwendete Delphi Version kann das schon :zwinker:

mkinzler 25. Okt 2006 17:22

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Vorausgesetzt, die verwendete Delphi Version kann das schon Zwinkern
D7 Enterprise sollte das können. ;-)

Sunlight7 25. Okt 2006 17:27

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Zitat von mkinzler
D7 Enterprise sollte das können. ;-)

Auf Deine Verantwortung :mrgreen:
Für alle die nicht D7 oder besser haben, meine Version nehmen :mrgreen:

SirThornberry 25. Okt 2006 17:36

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.

smart 25. Okt 2006 20:21

Re: einzelne Komponenten während der Laufzeit löschen?
 
Zitat:

Zitat von mkinzler
D7 Enterprise sollte das können. ;-)

Hi,

doch, klappt. Vielen Dank.
Kann man davor auch so eine Art Sicherheitsabfrage setzen, nach dem Motto
Delphi-Quellcode:
If Bild[I].vorhanden = true Then FreeAndNil(Bild[I]);
oder so?

Gruß
Heike

mkinzler 25. Okt 2006 20:25

Re: einzelne Komponenten während der Laufzeit löschen?
 
Delphi-Quellcode:
If Assigned()

Sunlight7 25. Okt 2006 20:27

Re: einzelne Komponenten während der Laufzeit löschen?
 
Ja, kann man:

Delphi-Quellcode:
If Assigned(Bild[I]) then FreeAndNil(Bild[I]);
PS: Vergiss das mit dem = True :zwinker:

Khabarakh 25. Okt 2006 20:32

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 06:42 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