![]() |
Delphi-Version: XE4
TDataModule und eine Ableitung
Hallo zusammen,
in einem Projekt mit sehr vielen Formularen und Datenmodulen wollte ich ohne großen Aufwand für TForm & TDatamodule jeweils ein paar Properties einführen ... gesagt, getan:
Delphi-Quellcode:
Der Code (hier im Beispiel nur zwei Properties) wird anstandslos übersetzt. Flugs zum Testen noch das Hauptformular und ein Datenmodul "umbenannt" (einfach im Editor) und gestartet. Es funktioniert einwandfrei ... so lange ich nicht die IDE neustarte, denn dann zeigt sich das DataModule im Gewande eines Formulares (???) und beim nächsten Start des Programmes schmeißt der TReader eine "PropertyNotFound"-Exception, da er "ClientWidth" des Datamodules nicht findet. Wie sollte er auch ?
unit EDMExtClasses;
interface uses System.Classes, System.SysUtils, System.Types, Vcl.Forms ; type TLanguageTL = (GER,ENG,ZXX); TEDMDataModule = class(System.Classes.TDataModule) private fModuleID : NativeInt; fLanguage : TLanguageTL; procedure SetModuleID (const Value : NativeInt); procedure SetLanguage (const Value : TLanguageTL); public constructor Create(AOwner : TComponent); override; destructor Destroy; override; published property ModuleID : NativeInt read fModuleID write SetModuleID; property Language : TLanguageTL read fLanguage write SetLanguage; end; TEDMForm = class(TForm) private fModuleID : NativeInt; fLanguage : TLanguageTL; procedure SetModuleID (const Value : NativeInt); procedure SetLanguage (const Value : TLanguageTL); public constructor Create(AOwner : TComponent); override; destructor Destroy; override; published property ModuleID : NativeInt read fModuleID write SetModuleID; property Language : TLanguageTL read fLanguage write SetLanguage; end; implementation { TEDMForm } constructor TEDMForm.Create(AOwner: TComponent); begin inherited Create(AOwner); fModuleID := -1; fLanguage := ZXX; end; destructor TEDMForm.Destroy; begin inherited; end; procedure TEDMForm.SetLanguage(const Value: TLanguageTL); begin if (Value <> fLanguage) then begin fLanguage := Value; end; end; procedure TEDMForm.SetModuleID(const Value: NativeInt); begin if (Value <> fModuleID) then fModuleID := Value; end; { TEDMDataModule } constructor TEDMDataModule.Create(AOwner: TComponent); begin inherited Create(AOwner); fModuleID := -1; fLanguage := ZXX; end; destructor TEDMDataModule.Destroy; begin inherited; end; procedure TEDMDataModule.SetLanguage(const Value: TLanguageTL); begin if (Value <> fLanguage) then begin fLanguage := Value; end; end; procedure TEDMDataModule.SetModuleID(const Value: NativeInt); begin if (Value <> fModuleID) then fModuleID := Value; end; end. Aber in der DFM-Datei des Datamodules stehen nun so schöne Sachen, wie Font etc. Wenn jemand einen Rat hat bin sehr dankbar, denn das verwirrt mich etwas ... Gruß Thomas |
AW: TDataModule und eine Ableitung
Hust, ich würde einfach mal die Forensuche empfehlen.
(z.B. mit "TDataModule" und meinem Namen als Suchkriterien :stupid:) Da findet man dann auch die Erklärung, warum das so ist (oder auch nicht ist). ![]() Standardmäßig sind nur Ableitungen von TForm möglich und auch nur ohne eigene Ptoperty im OI. |
AW: TDataModule und eine Ableitung
Zitat:
|
AW: TDataModule und eine Ableitung
Für den Compiler ist es egal. Da kann sogar die DFM in einer anderen Unit/DPR eingebunden sein, wie die Klassendefinition.
Nur der Formdesigner braucht das natürlich in einer Unit und auch nur eine (Form)Klasse. Bei Forms gibt es halt weniger Probleme, da der Formdesigner auf TForm umschaltet, wenn er es nicht mehr hinbekommt, welches dann halt das mehrfach vererbte Datenmodul zerschottet. PS: Der FormDesigner nimmt nicht die Vorfahrklasse auf der PAS, sondern maximal den Eintrag aus der DPR DPROJ. Und in der DFM steht vom Vorfahren auch nichts. Bei Forms funktionieren "abgeleitete" Forms (siehe inherited in der DFM) besser, aber abgeleitete Forms machen auch Probleme. |
AW: TDataModule und eine Ableitung
Hallo zusammen,
ich werde es mit zwei separaten Units testen und berichten, ob es da besser klappt. @himitsu: natürlich besuche ich als Erstes die Forensuche, aber offensichtlich war meine Anfrage zu komplex gestellt. Das nächste Mal ist es ja ganz einfach: "... himitsu":? Danke Euch ! |
AW: TDataModule und eine Ableitung
Hallo zusammen,
ich habe nun, wie empfohlen, die beiden Klassen in getrennten Units untergebracht. Leider hat sich bei dem abgeleiteten TDatamodule nichts zum Besseren gewendet. Aber da ich es mittlerweile sportlich sehe werde ich ab Freitag mich der Sache weiter annehmen und eine Lösung suchen. Danke noch einmal ... Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 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