Hi Zusammen,
ich habe ein etwas größeres Projekt, wo ich ein bes**** Verhalten der Delphi
IDE habe.
Ich versuche daher das Problem auf das Minimum zu beschränken damit ihr es nachvollziehen könnt.
(Die Namen sind natürlich egal und dienen nur zur besseren Orientierung.)
1) Neues Projekt erstellen (Hauptunit-Name = "Main")
2) Neue
Unit vom Typ TDataModule hinzufügen (Name "Default1")
Typ auf "System.Classes.TPersistent" wechseln, weil es soll unter FMX und
VCL laufen
3) Neue
Unit vom Typ TDataModule hinzufügen (Name "Default2")
Typ auf "System.Classes.TPersistent" wechseln, weil es soll unter FMX und
VCL laufen
4) In Default2 eine Private-Variable "InfoListe : TStringList" hinzufügen
5) Default2 um Create und Destroy erweitern um Objekt zu erstellen und zu verwerfen
6) Im Create von Default2 auch gleich irgendwas in die InfoListe eintragen.
5) Zweites TDataModule Default2 eine Funktion hinzufügen ("GetInfo() : String")
6) In "Main" nun ein Button hinzufügen "Mach was", dort Objekt vom Typ "Default2" erstellen,
Ein einfaches "ShowMessage(dmDefault2.GetInfo());" hinzufügen (und Objekt natürlich freigeben).
Jetzt kann man das Ganze starten und es läuft wunderbar.
7) Verschiebe InfoListe in den protected-Bereich von Default1
8) Verschiebe Create und Free in Default1
9) Ändere die Vererbung der Klasse Default2 von "TdmDefault2 = class(TDataModule)"
auf "TdmDefault2 = class(TdmDefault1)"
Ab hier fängt der Spaß an. Teils kann ich dann noch einmal erzeugen und es läuft noch,
aber spätestestens wenn es einmal lief und ich irgendwas im Quelltext von Default2
ändere wird die
DFM von Default2 um nicht vorhandene Felder erweitert.
Richtig:
Delphi-Quellcode:
object dmDefault2: TdmDefault2
Left = 0
Top = 0
end
Falsch:
Delphi-Quellcode:
object dmDefault2: TdmDefault2
Left = 0
Top = 0
ClientHeight = 201
ClientWidth = 304
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = True
PixelsPerInch = 96
TextHeight = 13
end
Wenn ich dann den Button betätige, fliegt er raus mit der Meldung
"Fehler beim Lesen von dmDefault2.ClientHeight: Eigenschaft ClientHeight existiert nicht.".
Ich habe das Problem unter Delphi 10.3.2 und Delphi 10.4.1, weitere Versionen habe ich jetzt nicht zum Testen.
Das Projekt habe ich mal in den Anhang gepackt.
So kann man es erzeugen und starten.
Ändert man aber irgendetwas in Default2 (beispielsweise einen Kommentar hinzufügen),
so fliegt er mit besagter Fehlermeldung raus.
Die Fragen sind also:
- Wer kann das nachvollziehen und bestätigen? (Oder auch, wer hat das Problem nicht?)
- Wie sieht das in anderen Delphi-Versionen aus? (Gibt es einen Patch dafür?)
- Habe ich an dem Projekt etwas falsch gemacht, was zu diesem Verhalten führt?
- Gibt es eine Möglichkeit das Problem zu umgehen, so dass ich nicht jedes mal die
DFM
öffnen muss mit TextPad, um den falschen Teil zu löschen?
Vielen Dank schonmal für die Zeit und Mühe.
Liebe Grüße
Incocnito