Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TMemo dynmaisch in Array erstellen


Tristan - Mo 17.04.06 11:36
Titel: TMemo dynmaisch in Array erstellen
Moin,

bisjetzt habe Ich ein Memo dynamisch so erzeugt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);
var Memo:TMemo;
Begin

for I:=Listbox1.SelCount-1 downto 0 do
 Begin
   Memo:=Tmemo.Create(self);
    with Memo do
    Begin
    name:='Memo'+inttostr(Viewernumber);
    parent:=self;
    
    width:=100;
    Height:=100;
  end;


Jedoch wusste ich nicht so richtig wie ich die Dynmaisch erzeugten Komponenten am Ende wieder freigeben/entfernen kann. Deshalb habe ich versucht TMemo in einem Array zu erzeugen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Var Memo:array of TMemo;
Begin
Memo[1]:=TMemo.create(self);
{oder
Memo[1].Create(Self);
End;
Bei diesem Code erscheitn jedoch immer eine EAccessViolation - Zugriffsverletzung. Hab ich irgendeine Deklaration vergessen?


starsurfer - Mo 17.04.06 11:39

du musst dem array vorher erst mal ne länge größer als 0 geben ^^

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
var memo:array[0..5of tmemo;

-oder-
var memo:array of tmemo;

setlength(memo,5);


Tristan - Mo 17.04.06 12:34

Danke, jetzt funktionierts, was ist eigentlich der Unterschied zwischen Memo[0].Create(Self); und Memo[0]:=TMemo.Create(Self); ?


Narses - Di 18.04.06 01:05

Moin!

user profile iconTristan hat folgendes geschrieben:
bisjetzt habe Ich ein Memo dynamisch so erzeugt:
[...]

Delphi-Quelltext
1:
Memo:=Tmemo.Create(self);                    

[...]
Jedoch wusste ich nicht so richtig wie ich die Dynmaisch erzeugten Komponenten am Ende wieder freigeben/entfernen kann.

Wenn du sowas machst, dann gehören die Memos dem Formular, die solltest du dann besser nicht mehr selbst wieder freigeben... :?

user profile iconTristan hat folgendes geschrieben:
was ist eigentlich der Unterschied zwischen Memo[0].Create(Self); und Memo[0]:=TMemo.Create(Self); ?

Ersteres ist falsch :D und zweiteres erzeugt eine Instanz von TMemo und weist diese einer Variablen zu. ;)

cu
Narses

PS: Wo hast du eigentlich den TDelphiVNCViewer her? ;) Interessiert mich...


Tristan - Di 18.04.06 09:26

Moin, den VNCViewer hab ich von Torry Components - jedoch ist diese Komponente leider nur in der Demoversion verfügbar.

Zitat:
Wenn du sowas machst, dann gehören die Memos dem Formular, die solltest du dann besser nicht mehr selbst wieder freigeben


Und wie kann ich die Komponenten wöhrend der Laufzeit wieder "schonend" entfernen?


Narses - Di 18.04.06 09:50

Moin!

user profile iconTristan hat folgendes geschrieben:
Moin, den VNCViewer hab ich von Torry Components - jedoch ist diese Komponente leider nur in der Demoversion verfügbar.

Oh, schade, naja, das nutzt dann ja nix. ;)

user profile iconTristan hat folgendes geschrieben:
Zitat:
Wenn du sowas machst, dann gehören die Memos dem Formular, die solltest du dann besser nicht mehr selbst wieder freigeben

Und wie kann ich die Komponenten wöhrend der Laufzeit wieder "schonend" entfernen?

Beim .Create(NIL) übergeben, statt dem Formular, aber den Parent trotzdem auf das Formular setzen, dann "gehört" das Control dir und du mußt dich auch um die Freigabe kümmern.

cu
Narses


Tristan - Di 18.04.06 12:25

Also z.B.

Delphi-Quelltext
1:
2:
3:
4:
5:
Memo[1]:=TMemo.Create(Nil);
Memo[1].Parent:=Self;

//Wieder freigeben
Memo[1].Free;


Richtig?


Narses - Di 18.04.06 12:41

Moin!

AFAIK ;)

cu
Narses