AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TComponentList: Nur zur Laufzeit erstelle Kompos löschen
Thema durchsuchen
Ansicht
Themen-Optionen

TComponentList: Nur zur Laufzeit erstelle Kompos löschen

Ein Thema von Helmi · begonnen am 10. Aug 2008 · letzter Beitrag vom 10. Aug 2008
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#1

TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 09:54
Hallo,

ich hab eine Komponentenliste vom Typ TComponentList in der ich zur Laufzeit
erzeugte Komponenten als auch schon zur Designzeit erzeugte Komponenten
eintrage.

Am Ende des Programmes bei OnDestroy der Form will ich alle zur Laufzeit erstellten
Komponenten löschen.

Dafür hab ich folgenden Code:
Delphi-Quellcode:
procedure TMaskForm.FormDestroy(Sender: TObject);
var
  i: Integer;
  Dummy_Kompo: TComponent;

begin
  for i := Pred(Komponentenliste.Count) downto 0 do
    begin
      //Komponente auslesen
      Dummy_Kompo := Komponentenliste.Items[i];

      If Assigned(Dummy_Kompo) then
        FreeAndNil(Dummy_Kompo);
    end;

  FreeAndNil(Komponentenliste);
end;
Mit dem Assigned will ich alle Komponenten die beim Design erstellt wurden,
aussieben.
Aber leider bekomm ich immer eine AccessViolation - ich weiss nur nicht warum?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:09
Warum willst du nur manuell erzeugte Löschen?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#3

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:29
Zitat von mkinzler:
Warum willst du nur manuell erzeugte Löschen?
Genau andersrum - ich will alle zur Laufzeit erzeugte löschen
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:35
Wäre es nicht das einfachste die zur Laufzeit erzeugten in eine Extra Liste zu packen?
So wie du es vor hast geht es nicht. Assigned ist nichts anderes als auf eine Prüfung auf ungleich nil. Wenn eine Komponente frei gegeben wird, wird aber nicht automatisch dein Pointer auf die Instanz auf nil gesetzt sondern zeigt weiterhin auf den Speicher. Entsprechend funktioniert die Prüfung nicht.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:35
Zitat von Helmi:
Zitat von mkinzler:
Warum willst du nur manuell erzeugte Löschen?
Genau andersrum - ich will alle zur Laufzeit erzeugte löschen
Die Frage von mkinzler ist berechtigt. Alle Komponenten, die irgendwie im Fenster liegen und das Fenster selbst als Owner besitzen (Eigenschaft der Komponente), werden beim Zerstören des Fensters gleich mit freigegeben. Ein manuelles FreeAndNil erübrigt sich somit eigentlich ganz von selbst.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#6

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:41
Zitat von Jelly:
Die Frage von mkinzler ist berechtigt. Alle Komponenten, die irgendwie im Fenster liegen und das Fenster selbst als Owner besitzen (Eigenschaft der Komponente), werden beim Zerstören des Fensters gleich mit freigegeben. Ein manuelles FreeAndNil erübrigt sich somit eigentlich ganz von selbst.
mmmh - irgendwie hast du recht
ich hab ja alle Kompos auf einem Panel
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:42
Zudem sind zur Laufzeit erzeugte manuell erzeugte Komponenten
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#8

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:46
Eine Frage hätt ich aber noch dazu:

ich erzeug die Kompoentenliste im OnCreate der Form mit:
Delphi-Quellcode:
  //Komponentenliste erzeugen
  Komponentenliste := TComponentlist.Create;
im OnDestroy gib ich sie wieder frei:
FreeAndNil(Komponentenliste) Nur bekomm ich dabei eine AV.

Ich hab mal gelernt, mann müsse alles was man erzeugt auch wieder
freigeben, das tu ich ja, aber trotzdem die AV?
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:50
Wenn du manuell freigeben willst, mussst du alle freigeben und vorher aus der Liste nehmen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: TComponentList: Nur zur Laufzeit erstelle Kompos löschen

  Alt 10. Aug 2008, 10:56
Eine TComponentList gibt alle enthaltenen Objekte mit frei, wenn du die Liste selbst freigibst... Machs dir doch nicht so kompliziert. (siehe dazu auch Doku zu Delphi)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 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