Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Komponenten freigeben funzt nicht


DJ_Apfel - Mi 11.12.02 00:56
Titel: Komponenten freigeben funzt nicht
hi,

ich hab dynamische Textfelder erstellt nun will ich sie ganz einfach mit
textfeld[i].free wieder "löschen" und somit auch den Speicher wieder freigeben.
Leider passiert da nix :(.


Quelltext
1:
2:
3:
Wichtig: ich habe ein 

textfeld: array [0..10] of TEdit
[/code]


DJ_Apfel - Mi 11.12.02 11:27

Ok das Probelm hab ich folgendermaßen gelöst:

Schon bei der Erstellung des Objektes lag der Fehler:


Quelltext
1:
2:
3:
4:
statt self
textfeld := TEdit.Create(self);
ein nil
textfeld := TEdit.Create(nil);


das Problem ist nur ich weiß nciht warum das so sein muss :P Villeich kann ja mal einer der Profs noch etwas sazu schreiben.


LCS - Mi 11.12.02 11:37

Hi
mit

Quelltext
1:
Textfeld := TEdit.Create(nil);                    

hast du einfach nochmal ein Editfeld erzeugt (allerdings ohne Owner) und der Objektvariablen zugewiesen.
----
Nachtrag: Ich hab dein Posting nicht richtig gelesen. Das hier ist also Quatsch.
-----

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Textfeld : TEdit; //definition
  ...
begin
  Textfeld := TEdit.Create(self); //Erzeugen mit Eigentümer
  ...
  Textfeld.Free;  //Freigeben
  ...


Gruss Lothar


Anonymous - Mi 11.12.02 11:39

Das mit dem Self war schon richtig. Auf diese Weise wird die Komponente in die Komponentenliste des Formulars aufgenommen. Wenn du das Programm dann beendest, dann gibt das Formular auch die Komponente von selbst frei. Sonst mußt du es selbst machen.

Ein Tip zum Free:

X.Free;
X := nil;

Kann nicht schaden und du entfernst die Adresse.