Einzelnen Beitrag anzeigen

Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
190 Beiträge
 
Delphi 11 Alexandria
 
#1

TDataModule und eine Ableitung

  Alt 27. Mai 2014, 19:56
Delphi-Version: XE4
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:
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.
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 ?
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
Thomas Forget
  Mit Zitat antworten Zitat