@ stahli: Die von dir angesprochene Zeile
Instance := ReadComponent(Instance); // <----------------------------------
lädt das Datamodule aus der
DFM. Da passiert noch nichts weiter bzgl. der Verknüpfung zwischen DM und DBEdit. Erst nachdem ich mich in diesen Aufruf weiter reindebuggt habe, bin ich auf die von Stevie angesprochene Funktion Classes.GlobalFixupReferences gestoßen. Diese ruft wiederum Forms.FindGlobalComponent auf.
Und bei diesen 2 letzten Funktionen wird es interessant: Nach jeder Erstellung einer Form oder eines Datenmodules werden Verknüpfungen von Controls (wie meinem DBEdit) auf andere Forms und Datenmodule aufgelöst, und zwar basierend auf der Eigenschaft Name. Das ganze wird auf Basis von Screen.Forms und Screen.DataModules durchgeführt. Das interessante dabei: Bei meiner Instanzierung von MyDM wird zuerst eine Instanz von TMyCustomDM aus dem
DFM gelesen (mit Name = MyCustomDM, wie in UMyCustomDM.dfm angegeben). Gibt es noch nicht aufgelöste Verknüpfungen/Referenzen (wie bei der DataSource-Property meines DBEdits), dann werden diese gesucht (und in meinem Fall gefunden: Name = MyCustomDM, wie im DBEdit angegeben). Anschließend wird über die Instanz von TMyCustomDM die Instanz von TMyDM "drübergelesen" - hier wird der Name mit MyDM überschrieben, was dann zur Laufzeit angezeigt wird.
Quintessenz: Die ganze Verknüpfung basiert nicht auf der evtl. nicht vorhandenen globalen Variable, wie Anfangs vermutet wurde, sondern auf der Eigenschaft Name. Und: Name wird für jede einzelne Vererbungsebene geprüft (im Beispiel zuerst MyCustomDM und dann MyDM).
Ergo: Dass diese Verknüpfung von DBEdit und MyCustomDM funktioniert, ist nicht nur zufällig und ich kann mich darauf verlassen, dass es immer funktioniert. Ich muss sagen, das ist ein cleveres System, was sich die Designer da ausgedacht haben!
p.s.: Erklärung von FindGlobalComponent auf englisch:
http://www.blong.com/Conferences/DCo...#_Toc485725936
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."