Du kannst aber im Create, vor dem Inherited eine Instanz deines Datenmoduls erzeugen. (es darf aber zur Laufzeit keine automatisch erzeugte Instanz dieses Moduls existieren, bzw. diese wird vorher umbenannt oder freigegeben)
DatenModule registrieren sich global im Delphi und der Form-Loader findet sie dann über ihren Namen, bzw. mann kann sich selber ein GetGlobalDataModule-Event registrieren.
Nach dem Laden (nach dem Create-Inherited oder spätestens im TForm.Loaded) dann das Datenmodul umbenennen (oder den Namen löschen > ''
)
Genau das ist der Hinweis, den ich gesucht habe. Die Zuordnung passiert scheinbar über den Namen.
Wenn man zuerst das Datenmodul erzeugt, dann das Formular und dann den Namen des Datenmoduls ändert, kann man weitere Instanzen erzeugen.
Ich hab das jetzt mal so gemacht:
Delphi-Quellcode:
function CreateFoo(AOwner : TComponent) : TfrmFoo;
var
dm : TdmFoo;
begin
dm := TdmFoo.Create(nil);
try
result := TfrmFoo.Create(AOwner);
result.DataModule := dm; // für Zugriffe auf das Datenmodul im Code
dm.Name := '';
except
dm.Free;
raise;
end;
end;
Freigabe des Datenmoduls dann im Destructor des Formulars.
Kann man bestimmt noch hübscher lösen, aber es zeigt erst mal, worauf es ankommt (nämlich den Namen des Datenmoduls an der richtigen Stelle zu manipulieren).