Hallo Freunde,
ich hab hier nen Nervtöter. Ich habe ein TDatamodule namens TBaseDM erstellt, das eine Reihe abstrakter Methoden deklariert.
Davon abgeleitet sind 3 TDatamodules, die diese abstrakten Methoden implementieren.
Die Datamodules werden so deklariert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| TBaseDM = class(TDataModule) private protected public procedure SetupDBPath(const APath: string); virtual; abstract; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| TLocalDM = class(TBaseDM) LocalDB: TTdbDatabase; private FDBPath: string; public procedure SetupDBPath(const APath: string); override; |
Lasse ich das so, werde ich beim Programmstart immer wieder angemeckert: Fehler beim Lesen von LocalDM.ClientHeight: Eigenschaft ClientHeight existiert nicht.
Ich muß dann tauschen:
Delphi-Quelltext
1: 2:
| TLocalDM = class(TDataModule) |
Anschließend das Projekt schließen und neu öffnen, worauf ich eine Fehlermeldung der IDE bekomme (Clientheight existiert nicht), die ich ignoriere. Anschließend tausche ich die Kommentare zurück und das Programm läuft wieder, bis ich das nächste mal an TLocalDM etwas ändern muß.
Der Grund ist: Wird TLocalDM von TBaseDM abgeleitet, so denkt die IDE, das TBaseDM ein Fenster ist (TForm). Im Designer sieht man auch eine Titelzeile und die drei Buttons, sowie eine Fensterhöhe von Null.
Wie bringe ich Delphi bei, das TBaseDM
kein Formular ist, ich also nicht ständig das projekt öffnen/schließen muß ?
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.