Das Verhalten ist reproduzierbar:
Delphi-Quellcode:
unit dm1;
interface
uses
System.SysUtils, System.Classes;
type
TDataModule1 =
class(TDataModule)
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
DataModule1: TDataModule1;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
end.
Delphi-Quellcode:
unit dm2;
interface
uses
System.SysUtils, System.Classes;
type
TDataModule2 =
class(TDataModule)
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
DataModule2: TDataModule2;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
end.
Bis hier ist die Welt noch in Ordnung ...
Jetzt den
Fehler einbauen:
Delphi-Quellcode:
unit dm2;
interface
uses
System.SysUtils, System.Classes, dm1;
// <- da
type
TDataModule2 =
class(TDataModule1)
// <- da
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
DataModule2: TDataModule2;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
end.
Speichern, Alles schliessen, Projekt wieder öffnen ... DataModule2 öffnen => eine Form!
- Wie kann man das heilen?
- Öffnen der dm2.dfm
Code:
object DataModule2: TDataModule2
OldCreateOrder = False
Height = 150
Width = 215
end
- abändern zu
Code:
inherited DataModule2: TDataModule2
OldCreateOrder = False
end
und speichern
- Jetzt das Projekt neu laden und alles ist wieder schick ...
- Wie sollte man das richtig machen?
Zum Ableiten von TForm
/TFrame
/TDataModule
geht man über- Datei - Neu - Weitere...
- Delphi-Projekte - Vererbbare Elemente - DataModule1
- OK klicken
Das war es schon.
PS Dieses manuelle Ableiten funktioniert (halbwegs)
nur bei Formularen, denn es wird automatisch angenommen, dass es sich um ein Formular handelt. Empfohlen ist diese Vorgehensweise aber nicht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)