![]() |
EResNotFound bei von TForm abgeleiteter Komponente?
Hallo,
ich habe einen Dialog von TForm abgeleitet. Nun habe ich einen alten vor mehreren Jahren mal mit dem FormDesigner erstellten Dialog der einst von TForm vererbt war, von diesem neuen Dialog abgeleitet. So hier:
Delphi-Quellcode:
Nun habe ich aber TMeinALterDialog von TMeinNeuerDialog abgeleitet.
TMeinNeuerDialog = class(TForm)
end; TMeinALterDialog = class(TForm) end; So hier
Delphi-Quellcode:
TMeinNeuerDialog umfasst nun Methoden, die in jedem Dialog immer wieder vokommen. TMeinAlterDialog soll dagegen nur spezifische Methoden für den konkreten Dialog enthalten. TMeinNeuerDialog soll also eine Basisklasse werden für alle meine zukünftig zu entwickelnden Dialoge.
TMeinNeuerDialog = class(TForm)
end; TMeinALterDialog = class(TMeinNeuerDialog) end; Nun erhalte ich aber eine EResNotFound-Exception bei TMeinNeuerDialog, da ich den zur Laufzeit erstelle, weil dieser noch keine grafischen Eingabecontrols enthält. Dennoch will Delphi nun eine Ressource haben, die es aber nicht gibt. Wie kann ich die Basisklasse für meinen späteren speziellen Dialog erstellen. Diese Basisklasse könnte zum Beispiel die Execute Methode enthalten oder auch das Schreiben von Konfigurationsdateien bzw. die Initialisierung einer Stringliste, in die die späteren Optionen dann geschrieben werden. . |
AW: EResNotFound bei von TForm abgeleiteter Komponente?
Hallo,
ich wūrde ein Interface benutzen. |
AW: EResNotFound bei von TForm abgeleiteter Komponente?
Gibt es eine *.dfm? Steht in der *.pas noch ein "{*.res} drin?
Dann vielleicht beides mal weg. |
AW: EResNotFound bei von TForm abgeleiteter Komponente?
Zitat:
Ich habe eine neue leere Unit erzeugt und dort den Code für den Basisdialog reingeschrieben. Alles Laufzeitcode, Designer wurde dazu nicht verwendet. |
AW: EResNotFound bei von TForm abgeleiteter Komponente?
Hm, ich denke das kann so nicht gehen. Ich verstehe auch nicht was der Sinn sein soll.
Entweder ist a) TMeinNeuerDialog ein Formular, dann benötigt er halt Ressourcen wenn Du ihn erzeugst. oder b) es ist eine Basis, dann erzeugst Du nicht die Basis, sondern ein abgeleitetes Formular. Dann sind die Ressourcen in der Ableitung oder c) ich habe Dich falsch verstanden ;-) |
AW: EResNotFound bei von TForm abgeleiteter Komponente?
Zitat:
|
AW: EResNotFound bei von TForm abgeleiteter Komponente?
Zitat:
Ansonsten sollte man von diesen Designerklassen abgeleitete Klassen immer von der IDE erzeugen lassen, dafür gibt es "visual form inheritance". In deinem Fall wäre TMeinNeuerDialog ein normal im Designer erstelltes Form, auch wenn es leer sein sollte. Um davon ein neuesw Form abzuleiten wähle aus dem IDE Menu Datei --> Neu --> Weitere. Das ruft den Repository-Dialog auf. Links in der Baumansicht gibt es einen Knoten "vererbbare Elemente". Die zugehörige Seite rechts listet alle zum Projekt gehörigen Designerklassen; wählte dort TMeinNeuerDialog und klick OK. Die IDE erzeugt pas und dfm File für die neue Klasse; ändere Name-Property auf was Sinnvolles und speichere die Unit unter einem Namen deiner Wahl. Falls Du ein schon existierendes Form auf eine andere Basisklasse "umhängen" willst erfordert das mehrere Schritte:
|
AW: EResNotFound bei von TForm abgeleiteter Komponente?
Danke, wie verrückt, @peterbelow! So funktioniert mein Vorhaben. :thumb:
@Uwe Raabe, @freimatz: Ich will halt eine Basisklasse haben, von der ich alle Dialoge in Zukunft ableite. DIese Basisklasse soll alle in jedem Dialog nötigen Methoden bereits enthalten. Nur speziellere Funktionalität und halt die grafische Ausgabe kommt dann in die Nachfolgedialoge passend für meine konkrete Aufgabe. Controls haben schließlich auch ihre Basisklasse TCustomControl -> TWinControl -> TMySpecialControl (TEdit, TButton, etc.) |
AW: EResNotFound bei von TForm abgeleiteter Komponente?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:50 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