![]() |
TPageControl Ableitung, Erstellung von TabSheets
Hi!
Ich hätte da noch einmal eine Frage, die mit meinem letzten Problem zusammenhängt, siehe ![]() Ich habe also nun TMeinPageControl und TMeinTabSheet. Per Contextmenü im Designer kann ich dem TMeinPageControl nun TMeinTabSheets hinzufügen. Das Problem ist allerdings, dass mein Programm beim Starten immer abschmiert mit der lustigen Meldung "Exception EClassNotFound in Modul hasiputz.exe bei [...]. Klasse TMeinTabSheet nicht gefunden". Der Unterschied zu dem normalen TabSheet ist scheinbar, dass TMeinTabSheet der Form nicht als Element hinzugefügt wird (Rechtsklick auf TPageControl, "Neue Seite", diese wird dann unter "TForm1 = class(TForm)" hinzugefügt). Wenn ich manuell einfach eine TabSheet-Variable hinzufüge (ohne dass der Designer das Element dazu kennt), startet das Programm mit der IDE-Meldung "Feld asdf besitzt keine Komponente. Soll die Deklaration entfernt werden?", aber danach läuft es. Wie kann ich es also bewerkstelligen, dass die TabSheets, die ich über meinen eigenen ComponentEditor hinzufüge, der Form als Elemente im Code hinzugefügt werden, wie es beim echten TPageControl passiert? Ich habe mit Owner/Parent herumgespielt, aber das scheint den gewünschten Effekt nicht zu bringen. Liebe Grüße und danke im Vorraus :thumb: |
AW: TPageControl Ableitung, Erstellung von TabSheets
Der VCL-Form-Loader geht über
![]() Dafür müssen die Klassen vorher aber auch irgendwo über ![]() Ich hab zwar das Gefühl, daß VCL nötige Klassen vorher registriert hat, aber falls das nicht geplappt hat, könntest du es selber nochmal registrieren. z.B. in der Initialization oder im Class-Constructor von TMeinPageControl. Auf was hattest du eigentlich den Owner des TMeinTabSheet gesetzt? ( auf den selben Owner, wie bei TMeinPageControl? ) |
AW: TPageControl Ableitung, Erstellung von TabSheets
Bis eine Lösung gefunden ist könntest Du im Pas und DFM die Klassen eine normalen Tabsheets umdeklarieren ..... sorry derzeit habe ich keinen Ansatz
|
AW: TPageControl Ableitung, Erstellung von TabSheets
Danke für eure Antworten!
Zitat:
Zitat:
Delphi-Quellcode:
Ich habe glaube ich alle Kombinationen von Owner/Parent durch, in der Form-Klasse wird das Sheet nie hinzugefügt :cry:
procedure TMeinPageControlEditor.ExecuteVerb(Index: Integer);
var T: TMeinTabSheet; begin inherited; T := TMeinTabSheet.Create((Component as TMeinPageControl).Parent); T.Parent := (Component as TMeinPageControl).Parent; T.PageControl := Component as TMeinPageControl; T.Name := 'Test123'; end; Zitat:
Auf jedenfall Danke für eure Zeit! |
AW: TPageControl Ableitung, Erstellung von TabSheets
Was ich an der ganzen Sache noch nicht so ganz verstehe ist...
Warum müssen das eigene visuale Komponenten sein? Das macht doch nur Sinn, wenn du diese Komponenten in mehreren Projekten einsetzen willst oder eben die Komponenten anderen Programmierern zur Verfügung stellen willst. Wenn es dir aber darum geht, deinen Quellcode übersichtlicher werden zu lassen, indem du Programmzeilen/Funktionalität über visualen Komponenten auslagern möchtest, dann geht das doch viel einfacher. |
AW: TPageControl Ableitung, Erstellung von TabSheets
Zitat:
![]() |
AW: TPageControl Ableitung, Erstellung von TabSheets
Das hatte ich mir gedacht und meine Antwort lautet:
Du solltest dir mal Frames anschauen, damit kommst du wesentlich schneller und einfacher zum Ziel. |
AW: TPageControl Ableitung, Erstellung von TabSheets
Ja, mit dem Gedanken hatte ich auch schon gespielt - allerdings eher als Notlösung. Vielleicht könnten andere Menschen dazu ihre Meinung kundtun? Ich habe bis jetzt für mich gemeint "Frames... Naja, schön, die gibt es, aber ich könnte doch auch ordentlich arbeiten und alles direkt als Komponenten bauen!" - ist das mit Frames eine "saubere" Vorgehensweise, oder ist die Benutzung von Frames eher ein Workaround?
Edit: Was bei Frames nervig wäre ist wohl auch folgendes beim Zugriff auf Komponenten. Mit meiner Vorgehensweise: "Form.TabSheet.Objekt", mit Frames wäre es "Form.TabSheet.Frame.Objekt". Gut, das könnte man noch verkraften, aber ist trotzdem so eine Sache... |
AW: TPageControl Ableitung, Erstellung von TabSheets
Mit RegisterComponent registriert man die Klassen für die Komponentenpalette (am Besten in der Register-Prozedur), was nur innerhalb der IDE für den Objekt-Designer eine Wirkung hat.
Die Prezedur Register wird nur von der IDE aufgerufen, aber nicht im fertigen Projekt. RegisterClass registriert aber für die VCL, zur Laufzeit und für den Designer. Den PageControl also über RegisterComponent (nur im Designer) und das TabSheet über RegisterControl (für den Designer und eventuell noch für das laufende Programm) |
AW: TPageControl Ableitung, Erstellung von TabSheets
Zitat:
Zitat:
Über Frames kann man logische Bereiche in seiner Anwendung in eine eigene Unit auslagern und man kann Frames innerhalb von Frames verwenden. Damit hat man die Möglichkeit Zwischenschichten einzuführen, die es einem ermöglichen immer komplexere Strukturen zu erzeugen und diese übersichtlich zu halten. Aber das erfordert ein ordentliches Konzept und strukturiertes Programmieren. Dann macht das richtig Spass... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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 by Thomas Breitkreuz