![]() |
[gelöst] TForm ableiten -> EResNotFound Exception
Hallo zusammen,
sorry, dass ich Euch wegen so einem einfachen Problem stören muss, aber ich weiß nicht weiter. Das kann damit zusammenhängen, dass ich seit gestern 20:00 Uhr ununterbrochen vor dem Bildschirm sitze (wenn einen der Programmiereifer packt :-D), aber (oder vielleicht gerade deswegen :?:) ich sehe zurzeit den Wald vor lauter Bäumen nicht mehr. Problem: Zwei Forms, die eine von TForm abgeleitet, die andere von der bereits abgeleiteten nochmals abgeleitet. Die TBaseForm soll bereits alle Elemente enhalten, die davon abgeleitete Forms ebenfalls benötigen (in diesem Fall den Button btStart). In den von TBaseForm abgeleiteten Klassen kommen neue Komponenten hinzu (in diesem Fall ein Button btEnd)
Delphi-Quellcode:
MainUnit:
unit uProgramHandlerForms;
type TBaseForm = class(TForm) private btStart : TButton; public constructor Create; virtual; end; type TComplexForm =class(TBaseForm) private btEnd : TButton; public constructor Create; override; end; implementation constructor TBaseForm.Create; begin inherited Create(nil); //<-- hier bleibe ich immer mit der Exception (siehe unten) hängen btStart := TButton.Create(self); btStart.Parent := self; btStart.Top := 20; btStart.Left := 20; btStart.Visible := True; Height := 300; Width := 300; Caption := 'BaseForm'; Visible := True; end; constructor TComplexForm.Create; begin inherited Create; btEnd := TButton.Create(self); btEnd.Parent := self; btEnd.Top := 100; btEnd.Left := 20; btEnd.Visible := True; Caption := 'ComplexForm'; end;
Delphi-Quellcode:
Wenn ich nun auf meiner Hauptform den Button btTest drücke, kommt die wunderhübsche Fehlermeldung
type
TFrmMain = class(TForm) BtTest: TButton; procedure BtTestClick(Sender: TObject); private cf : TBaseForm; public { Public declarations } end; [...] procedure TFrmMain.BtTestClick(Sender: TObject); begin cf := TComplexForm.Create; end; Zitat:
|
AW: TForm ableiten -> EResNotFound Exception
Hast Du denn auch eine *.dfm zu Deinem Formular? Ansonsten könntest Du auch mit der Objektablage versuchen.
[edit] Da fällt mir ein: evtl. hilft Dir ![]() |
AW: TForm ableiten -> EResNotFound Exception
Delphi-Quellcode:
Dein Konstruktor ist schon mal falsch.
type TBaseForm = class(TForm)
private btStart : TButton; public constructor Create; virtual; end; Ab der Klasse TComponent gibt es einen virtuellen Konstruktor. Wenn man möchte, dass die VCL in Bezug auf Persistenz (als Laden von DFM Resourcen) richtig funktioniert muss man sich an das halten, was die VCL vorgibt.
Delphi-Quellcode:
Alle Klassen, die von TComponent abgeleitet sind haben sozusagen die Freiheit aufgegeben, eigene Konstruktoren zu deklarieren zu dürfen.
type TBaseForm = class(TForm)
private btStart : TButton; public constructor Create(AOwner:TComponent); override; end; constructor TBaseForm.Create(AOwner:TComponent); begin inherited Create(AOwner); // darf auf keinen Fall fehlen! // ab hier eigener Code end; Nur noch folgender Konstruktor ist zulässig:
Delphi-Quellcode:
Im Gegenzug werden alle published Properties auf den DFM-Resourcen gelesen.
constructor Create(AOwner:TComponent); override;
|
AW: TForm ableiten -> EResNotFound Exception
Zitat:
Zitat:
Wie konnte ich denn ahnen, dass TForm hier einen "Sonderweg" geht :cry: Aber dank Euch habe ich jetzt meinen Gedankenknoten durchbrechen können: Die TBaseForm wird nun einfach einmalig visuell, d.h. in der IDE (über File->New->Form) erzeugt (dabei also wird auch die DFM erstellt) und gespeichert. Und diese Form kann dann ja problemlos abgeleitet und erweitert werden, auch ohne Objektablage -> Problem gelöst:!: Die Objektablage wollte ich eigentlich nicht verwenden, da ich das Formular nur für dieses eine Projekt brauche und ich eigentlich keine Lust habe, dass diese Form dann auf alle Ewigkeit ungenutzt in der Ablage herumgammelt. Hätte mich ungefähr 10 Sekunden gekostet, mal zu googeln, aber daran habe ich natürlich nicht gedacht :oops: Ach was, ein Blick in die Hilfe hätte ausgereicht, dass es so nicht geht, wie ich es mir gedacht hatte. Zitat:
Hätte mir viel vergebliches Nachdenken und eine dumme (schon vielfach beantwortete) Frage erspart. Aber nach 3 Litern T400 habe ich nicht mehr so weit gedacht. So, ich geh' jetzt erst mal schlafen. Danke nochmals. |
AW: [gelöst] TForm ableiten -> EResNotFound Exception
Siehe mein Edit :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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