Moin,
ich weiss nicht warum du dir das Leben unnötig schwer machen möchtest.
ich habe ja schon geschrieben wie eine einfache Lösung aussieht.
Ich möchte hier mal auf dein Kommentar eingehen, das du auf Inhalte von Fenstern zugreifen möchtest.
Also du hast eine Main-Form und nur die wird automatisch erzeugt.
Alle anderen Fenster erzeugst du nur dann und nur solange du sie brauchst.
Die Kommunikation zwischen den Fenster funtioniert mit Zugriff-Methoden oder auch schon direkt über den Konstruktor. Wenn du z.B. eine Datenbankanwendung hast, brauchst du überall die Komponente, über die der Datenbankzugriff erfolgt (ich nehme hier mal als Beispiel DBExpress).
Also du hast jetzt eine Komponente (SQLConnection) auf dem Mainformular und musst diese natürlich den anderen Fenster auch zur Verfühgung stellen (und dies geschieht nicht über globale Varaiablen, weil man diese nicht braucht!).
Die einzelenen Fensterklassen müssen also einen neuen Kontruktor bekommen:
constrcutor create(AOwner:TComponent; SQLConnection:TSQLConnection); reintroduce;
begin
inherited create(AOwner);
FSQLConnection:=SQLConnection;
end;
FSQLConnection ist dann eine private Variable in der jeweiligen Fensterunit, über die die Verbindung zu einer Datenbank erfolgen kann.
Der Aufruf dieses Fensters sieht dann so aus:
Delphi-Quellcode:
procedure Fenster;
var Fenster:TFenster;
begin
Fenster:=TFenster.create(Self, SQLConnection);
try
if Fenster.showmodal = mrOK then begin
...
end;
finally
Fenster.release;
end
end;
so und nunnochmal zu deinem Datenübergabe bzw. bekomm Problem...
Mit Zugriffsmethoden konnen nun die Daten zum Fenster bzw. vom Fenster geholt werden.
Im Publicteil der Fensterunit:
:
public
procedure setData(Text:string);
function getData:string;
end;
:
und so gehts...
Delphi-Quellcode:
procedure Fenster;
var Fenster:TFenster;
Data:string;
begin
Fenster:=TFenster.create(Self, SQLConnection);
try
Fenster.setData('hier sind die Daten für das Fenster');
if Fenster.showmodal = mrOK then begin
Data:=Fenster.GetData; //und hier kommen die Daten aus dem Fenster zurück
end;
finally
Fenster.release;
end
end;
so kannst du alles machen, was du möchtest. Diese Vorgehenweise ist zukunftssicher. Du kannst unendlich viele Fenster realsieren. Die Kommunikation untereinander ist genau festgelegt, es gibt keine globalen Variablen, es wird nur soviel Speicher benutzt, wie gerade benötigt wird.
was willst du noch?
So, ich denke ich habe jetzt genug auf dich eingeredet, wenn du es immer noch nicht einsiehst, dann kann ich es auch nicht ändern. Mehr als dir diese Ideen an die Hand geben kann ich nicht. Oder wie mein alter Lehrer immer sagte: Nimm es einfach an.
Warum das
Rad neu erfinden, andere haben sich da schon viel Mühe gegeben, um uns solche schönen Möglichkeiten an die Hand zugeben.
Benutze sie doch einfach.
MfG
Thorsten