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