AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TPageControl Ableitung, Erstellung von TabSheets
Thema durchsuchen
Ansicht
Themen-Optionen

TPageControl Ableitung, Erstellung von TabSheets

Ein Thema von wicht · begonnen am 22. Apr 2012 · letzter Beitrag vom 23. Apr 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#1

TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 21:39
Hi!

Ich hätte da noch einmal eine Frage, die mit meinem letzten Problem zusammenhängt, siehe hier.
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
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"

Geändert von wicht (22. Apr 2012 um 21:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:06
Der VCL-Form-Loader geht über Delphi-Referenz durchsuchenFindClass, wenn es Componenten erstellen muß.

Dafür müssen die Klassen vorher aber auch irgendwo über Delphi-Referenz durchsuchenRegisterClass registriert sein.
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? )
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:08
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#4

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:23
Danke für eure Antworten!

Zitat:
Dafür müssen die Klassen vorher aber auch irgendwo über Delphi-Referenz durchsuchenRegisterClass registriert sein.
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.
Was genau meinst du damit? Also, ich habe das TabSheet in meinem Designer-Package registriert mit RegisterComponents. Das ist auch in der Komponentenpalette vorhanden. Ich kann es sogar auf die Form ziehen, das geht bis dahin.

Zitat:
Auf was hattest du eigentlich den Owner des TMeinTabSheet gesetzt?
( auf den selben Owner, wie bei TMeinPageControl? )
Im Editor sieht es gerade so aus:

Delphi-Quellcode:
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;
Ich habe glaube ich alle Kombinationen von Owner/Parent durch, in der Form-Klasse wird das Sheet nie hinzugefügt

Zitat:
Bis eine Lösung gefunden ist könntest Du im Pas und DFM die Klassen eine normalen Tabsheets umdeklarieren
Haben die TabSheets denn dann zur Laufzeit die Funktionen von TMeinTabSheet? Vermutlich ja nicht, und dann bringt mir mein ganzes Control nicht mehr viel. Naja, ich komme erstmal weiter damit, meine Geschichten in Komponenten zu gießen, das mit dem PageControl und TabSheet sind eben die, die vermutlich am meisten Probleme machen, deshalb ist mein Gedanke: Klappen die, klappt alles. Nur alle anderen Controls befinden sich eben auf den TabSheets, mit denen steht und fällt am Ende alles...


Auf jedenfall Danke für eure Zeit!
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#6

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:41
Zitat:
Was ich an der ganzen Sache noch nicht so ganz verstehe ist...
Also, ich habe ein Programm mit einem Hauptformular. Dort liegt das TMeinPageControl (Align = alClient) mit einigen TabSheets. Auf jedem TabSheet liegen wiederum ganz viele Controls, die beinhalten wieder Controls, und diese beinhalten wiederum Controls. Weil ich dieses TMeinPageControl zur Zeit im Code erzeuge, werden 90% der Komponenten, die ich benutze, im Code erzeugt, und das sind nicht gerade wenig (siehe Screenshots hier). Ich verzichte glaube ich gerade ganz doll aufs RAD und hätte mein Programm sozusagen auch mit Notepad schreiben können... Jetzt möchte ich Änderungen an der Oberfläche vornehmen und das ist zum ko****, wenn ich mich jetzt wieder mal durch den "Komponentenbaum" hangeln muss, der nur als Code existiert...
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:44
Das hatte ich mir gedacht und meine Antwort lautet:

Du solltest dir mal Frames anschauen, damit kommst du wesentlich schneller und einfacher zum Ziel.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#8

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:49
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...
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:53
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: TPageControl Ableitung, Erstellung von TabSheets

  Alt 22. Apr 2012, 22:57
... aber ich könnte doch auch ordentlich arbeiten ...
Ok, mit der Denke wird das natürlich nichts.

Mit meiner Vorgehensweise: "Form.TabSheet.Objekt", mit Frames wäre es "Form.TabSheet.Frame.Objekt"
Ganz bestimmt nicht! Das Stichwort heißt Zugriffsmethoden (so programmiert man und hat saubere Schnittstellen)

Ü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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:51 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