[Delphi 5] Dynamische Komponenten

Wenn ich eine Komponente dynamisch erzeugen will, verwende ich ja den folgenden Code:

 var MyMemo:TMemo

 begin
 MyMemo := TMemo.create(application);
 with MyMemo do begin
 parent := form1;
 show;
 end;
 end;

Somit kann ich ja z.B. ein Memo zur Laufzeit erzeugen. Ich programmiere nun aber ein Projekt, dass OHNE eine Form auskommen muss. Wenn ich denselben Code verwende, gibt es nen Error bei parent (ist ja logisch - kein form vorhanden)…

Wie kann ich bei einem „formlosen“ Projekt Komponenten dynamisch erzeugen ?

Ach ja… wenn ich folgenden Code schreibe gehts:

 MyMemo := TMemo.create(application);
 MyMemo.free;

Wenn ich aber diesen Code schreibe, gehts nicht mehr:

 MyMemo .= TMemo.create(application);
 MyMemo.clear;
 MyMemo.free;

*HILFE* Was mache ich falsch ?

*mitverzweifeltemblick*

Christian

Hi Christian!

tja, diese Zur-Laufzeit-Erzeugung von Komponenten hat’s in sich, wa? Wirst Dich wohl noch mit Schrecken an den damaligen Thread zu diesem Thema erinnern… :wink: Na, warten wir’s ab, wie schlimm dieser wird :wink: :wink: :wink:

Aber let’s komm zur Sache.

Wenn ich eine Komponente dynamisch
erzeugen will, verwende ich ja den
folgenden Code:
(SCHNIPP)

Genau, und nie das „parent := formXXX“ vergessen.

Somit kann ich ja z.B. ein Memo zur
Laufzeit erzeugen. Ich programmiere nun
aber ein Projekt, dass OHNE eine Form
auskommen muss.

OK, möglich ist das auf jeden Fall, weil es durchaus Anwendungen ohne jegliche textliche oder grafische Ausgabe gibt. Trotzdem haben die aber schon einen gewissen Seltenheitswert, würde ich sagen.

Wenn ich denselben Code
verwende, gibt es nen Error bei parent
(ist ja logisch - kein form vorhanden)…

Logischer geht’s gar nicht mehr.

Wie kann ich bei einem „formlosen“
Projekt Komponenten dynamisch erzeugen ?

Du mußt unterscheiden zwischen visuellen, und nicht-visuellen Komponenten.
Wenn Du ein formularloses Projekt hast, sind alle visuellen Komponenten automatisch tabu, und damit stellt sich das Problem mit der „parent := …“-Anweisung nicht. Die „TMemo“-Komponente ist visuell, eine TStrings bzw. TStringList-Komponente nicht (wie auch z. B. TTimer). Ins Leben gerufen werden ALLE Komponenten IMMER über „Create“.

*HILFE* Was mache ich falsch ?

Du verwendest eine TMemo-Komponente, obwohl Du deren Fähigkeiten der visuellen Darstellung ihres Inhalts gar nicht brauchst (wegen Formularlosigkeit deines Projekts nicht brauchen kannst). Wenn Du nur die Fähigkeiten einer Komponente benötigst, die diese ohnehin von einer anderen erbt, dann solltest Du gleich die andere Komponente nehmen. Im vorliegenden Fall dürfte das mit ziemlicher Sicherheit eine StringList sein.

Mit freundlichem Gruß
Martin