Einzelnen Beitrag anzeigen

Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11

AW: Form + DataModule mehrere Instanzen

  Alt 31. Jul 2017, 13:06
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).
Jens
  Mit Zitat antworten Zitat