Eigene Komponenten innerhalb einer anderen anzeigen lassen
Hallo,
ich möchte gerne eine seblstgeschriebene Komponenten in dr Strukturübersicht als untergeordnete Komponente anzeigen lassen. Ich gebe zu das ist jetzt etwas blöd erklärt, aber wenn man sich mal TPageControl anschaut (siehe Bild), dann wisst ihr sicher was gemeint ist. http://www.savioursofsoul.de/Christi...Components.png Die TabSheet Komponente ist hier die untergeordnete Komponente von TPageControl. Genau das möchte ich auch. Bei GLScene sieht man so etwas auch, aber die Komponenten sind hier der Form untergeordnet. Schlüssiger wäre es sicherlich diese der GLScene-Komponente unterzuordnen. Oder ein einfaches Menu. Dort sind dir TMenuItems dem jeweils übergeordneten TMenuItem untergeordnet. Ich habe bereits versucht den Quelltext zu verstehen, bzw. die Stelle zu finden, die relevant ist. Es scheint aber so, als hätten die 3 gennanten Beispiele nicht sonderlich viel gemeinsam, bzw. nichts, was auf diese Funktion hindeuten würde. Soweit ich weiß ist das auch kein "Property Editor", der das Verhalten erzeugt. Hat jemand da eine Idee, bzw. weiß wie man das auch selber hinbekommt? Gruß, Christian PS: Ich arbeite mit Turbo Delphi für Win32 |
Re: Eigene Komponenten innerhalb einer anderen anzeigen lass
Könntest du bitte das Bild dem Beitrag anhängen damit der Beitrag seine Bedeutung nicht verliert wenn du das Bild irgendwann wieder von dem externen Webspace löschst. :-)
Das was du da bei TTabSheet siehst ist eigentlich recht einfach. Und zwar wird einfach nur ein TTabSheet erzeugt welches als Parent das TPageControl zugwiesen bekommt. So als würde man ein Panel auf das Form packen und darauf andere Komponenten wie Buttons. Das wird dann genau so dargestellt. Zu beachten ist eigentlich nur das der Owner und der Parent stimmen. |
Re: Eigene Komponenten innerhalb einer anderen anzeigen lass
Das Thema interessiert mich auch brennend.
Wie sieht das ganze von der Seite des PageControls aus? So, dass das TabSheet richtig positioniert wird etc.? Und wie würde das für eigene Komponenten gehen? |
Re: Eigene Komponenten innerhalb einer anderen anzeigen lass
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo nochmal,
ich glaube ich bin hier falsch verstanden worden. Ich will nicht wissen, warum das Tabsheet in dem Pagecontrol erscheint, sondern warum es in der Strukturübersicht erscheint. Das bekomme ich zwar selbst mit der schönsten "Parent-Zuweisung" nicht hin. Hier nochmal ein Codeschnipsel, das den Kern verdeutlicht:
Delphi-Quellcode:
Wenn ich nun ein Objekt des Typs TTestComponent in einer kleinen Testanwendung reinclicke, dann wir diese als kleines ja als kleines Icon in der Form angezeigt (ist ja eine nicht grafische Komponente). In der Strukturübersich erscheint die auch.
unit TestUnit;
interface uses Windows, Mssages, SysUtils, Classes; type TTestSubComponent = class(TComponent) private FSomeProperty: string; procedure SetSomeProperty(const Value: string); public constructor Create(AOwner: TComponent); override; published property SomeProperty: string read FSomeProperty write SetSomeProperty; end; TTestComponent = class(TComponent) private FTestSubComponent : TTestSubComponent; FAnotherProperty : string; procedure SetAnotherProperty(const Value: string); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property AnotherProperty: string read FAnotherProperty write SetAnotherProperty; end; procedure Register; implementation procedure Register; begin RegisterComponents('Test', [TTestSubComponent, TTestComponent]); end; { TTestSubComponent } constructor TTestSubComponent.Create(AOwner: TComponent); begin // SetSubComponent(True); inherited; end; procedure TTestSubComponent.SetSomeProperty(const Value: string); begin FSomeProperty := Value; end; { TTestComponent } constructor TTestComponent.Create(AOwner: TComponent); begin inherited; FTestSubComponent := TTestSubComponent.Create(Self); // InsertComponent(FTestSubComponent); end; destructor TTestComponent.Destroy; begin FreeAndNil(FTestSubComponent); inherited; end; procedure TTestComponent.SetAnotherProperty(const Value: string); begin FAnotherProperty := Value; end; end. Soweit so gut! Gleichzeitig wird im Konstruktor aber auch noch ein Objekt des Typs TTestSubComponent angelegt. Das möchte ich nun auch bitte schön in der Strukturübersicht angezeigt bekommen, aber wie? Ich hab' mir da schon echt die Zähne dran ausgebissen, aber vielleicht fällt einem von euch ja hier etwas ein. Gruß, Christian PS: anbei übrigens nochmal das der Screenshot von oben. Falls noch Zweifel bestehen, wo die TTestSubComponent auftauchen soll, es ist an der Stelle, die ich mit gelb im Screenshot markiert habe. |
Re: Eigene Komponenten innerhalb einer anderen anzeigen lass
Ich habe dich verstanden. Das Zauberwort lautet Owner :-D Beim instanzieren einer Komponente (.Create) übergibst du Create einen Owner. Und auf diesen kommt es an. Wenn du zum Beispiel ein Panel mit Buttons hast und willst das diese mit auftauchen dann muss es so aussehen:
Delphi-Quellcode:
Somit sollte der Button dann auch in der Übersicht auftauchen.
constructor TYourSuperPanel.Create(AOwner: TComponent);
begin inherited Create(AOwner); fButton := TButton.Create(AOwner); fButton.Parent := Self; end; |
Re: Eigene Komponenten innerhalb einer anderen anzeigen lass
Liste der Anhänge anzeigen (Anzahl: 1)
Danke, damit bin ich der Sache nun schonmal einen Schritt weiter.
Jetzt taucht die Komponente in der Tat in der Übersicht auf, ist allerdings zum einen dem Formular untergeordnet und zum anderen Taucht die als echte Komponente auch auf dem Form mit auf. Ich hätte das aber gerne noch so, dass die als unsichtbare Komponente (so weiß-gepixelt) wie im ersten Bild als Unterkomponente der anderen auftaucht. Ich hab's dazu schon mit SetSubComponent(True) ausprobiert, aber das ist es leider nicht. Noch irgendwelche Ideen? Gruß, Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 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