![]() |
ClassGroup TPersistent in abgeleitetem TDataModule
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Falsch:
object dmDefault2: TdmDefault2
Left = 0 Top = 0 end
Delphi-Quellcode:
Wenn ich dann den Button betätige, fliegt er raus mit der Meldung
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 "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 |
AW: ClassGroup TPersistent in abgeleitetem TDataModule
Zitat:
Delphi-Quellcode:
in ein
object
Delphi-Quellcode:
ändern. Das gilt für alle Design-Klassen, die von TForm, TFrame oder TDataModule abgeleitet sind. Leider gibt es in der IDE noch keinen bequemen Mechanismus, der eine Veränderung der Ableitungshierarchie solcher Design-Klassen unterstützt.
inherited
|
AW: ClassGroup TPersistent in abgeleitetem TDataModule
Danke Uwe!
Das war die Lösung! Aber ... a) Wo erfährt man sowas? b) Default1 ist doch von TDataModule geerbt, das ist zwar Delphi-Source, aber das darf doch keinen Unterscheid machen! Wo ist denn bitte der Unterschied, ob ich jetzt von TDataModule erbe, oder von meiner eigenen Unit, welche wiederum von TDataModule erbt!? Ich bin erleichtert eine Lösung zu haben, aber im gleichen Maße verwirrt. Liebe Grüße Incocnito |
AW: ClassGroup TPersistent in abgeleitetem TDataModule
Der offizielle Weg, eine Ableitung von einem abgeleiteten TDataModule zu erstellen, geht über Datei - Neu - Weitere - Delphi-Projekte - Vererbbare Elemente. Dort sollten alle Forms, Frames und Datamodules des aktuellen Projekts aufgelistet sein. Leider gibt es keinen offiziellen Weg, eine von TDataModule abgeleitete Klasse auf einen anderen Class-Parent umzubiegen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz