AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TDataModule und eine Ableitung

Ein Thema von TRomano · begonnen am 27. Mai 2014 · letzter Beitrag vom 28. Mai 2014
Antwort Antwort
Benutzerbild von TRomano
TRomano

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

TDataModule und eine Ableitung

  Alt 27. Mai 2014, 20: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
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: TDataModule und eine Ableitung

  Alt 27. Mai 2014, 22:28
Hust, ich würde einfach mal die Forensuche empfehlen.
(z.B. mit "TDataModule" und meinem Namen als Suchkriterien )
Da findet man dann auch die Erklärung, warum das so ist (oder auch nicht ist).

http://www.delphipraxis.net/180298-e...istrieren.html


Standardmäßig sind nur Ableitungen von TForm möglich und auch nur ohne eigene Ptoperty im OI.
$2B or not $2B

Geändert von himitsu (27. Mai 2014 um 22:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#3

AW: TDataModule und eine Ableitung

  Alt 27. Mai 2014, 22:56
Standardmäßig sind nur Ableitungen von TForm möglich und auch nur ohne eigene Ptoperty im OI.
Natürlich kann man auch von TDataModule und seinen Abkämmlingen ableiten (das benutze ich selber sehr oft), allerdings sollte man das in einer separaten Unit und mit einer separaten DFM tun. In keinem Fall sollte man zwei DFM-abhängige Klassen innerhalb einer Unit deklarieren - das funktioniert nämlich nicht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: TDataModule und eine Ableitung

  Alt 27. Mai 2014, 23:06
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.
$2B or not $2B

Geändert von himitsu (27. Mai 2014 um 23:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

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

AW: TDataModule und eine Ableitung

  Alt 28. Mai 2014, 07:18
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 !
Thomas Forget
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

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

AW: TDataModule und eine Ableitung

  Alt 28. Mai 2014, 10:46
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
Thomas Forget
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz