Welchen Fehler ich mit Datenmodulen oft habe:
* im FormDesigner sieht man die Komponente eines Datenmoduls nicht (das Feld im Objektinspector ist leer)
* ABER, wenn man den Fokus in dieses Property stellt,dann ist das plötzlich doch da
> also der FieldEditor (EditText) findet die Komponente und kann den Namen auflösen, aber der DisplayText schafft das nicht.
Es gibt noch zwei Dinge, die man tun kann.
Das Datenmodul in ein Designtime-
Package und das in der
IDE installieren, damit das Datenmodul permanent geladen ist.
Eigentlich machen das TDataModule von selber, aber funktioniert nicht immer, bzw. die
IDE schafft es manchmal nicht das DataModul zu laden oder findet die
PAS nicht, wenn das Modul nötig wäre, weil es in einem Property verlinkt wurde ... darum auch der Vorschlag diese DataModul-
Unit vorher selber zu öffnen.
Wenn man mit einer Projektgrupper und mehreren Projekten arbeitet, dann das Datenmodul in jedes Projekt aufnehmen. (wenn man gegen Packages kompiliert, wird das dann beim Kompilieren "hoffentlich" wieder aufgelöst und nur einmal einkompiliert)
Und wenn dass auch noch nicht hilft, dann selber dieses Modul als "globale" Variable registrieren.
Delphi-Quellcode:
...
procedure register;
implementation
{$R *.dfm}
class function TIDEHelperModul.FindGlobalModules(const Name: string): TComponent;
begin
Result := nil;
if SameText(Name, 'DM1') then Result := UDM1.DM1;
if SameText(Name, 'DMSys') then Result := USysModule.DMSys;
end;
procedure register;
begin
RegisterFindGlobalComponentProc(TIDEHelperModul.FindGlobalModules);
end;
initialization
finalization
UnregisterFindGlobalComponentProc(TIDEHelperModul.FindGlobalModules);
end.
Das war für die Suche in der
IDE/FormDesigner.
Und falls das Problem auch zur Laufzeit auftritt (im
DFM-Loader), dann kann man dort ebenfalls ein
RegisterFindGlobalComponentProc(FindGlobalModules);
in den Programmstart einbauen.