AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Eigene Komponenten innerhalb einer anderen anzeigen lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Eigene Komponenten innerhalb einer anderen anzeigen lassen

Ein Thema von CWBudde · begonnen am 25. Okt 2008 · letzter Beitrag vom 31. Okt 2008
Antwort Antwort
Benutzerbild von CWBudde
CWBudde

Registriert seit: 21. Apr 2006
Ort: Hannover
12 Beiträge
 
Delphi XE2 Professional
 
#1

Eigene Komponenten innerhalb einer anderen anzeigen lassen

  Alt 25. Okt 2008, 18:32
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
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Eigene Komponenten innerhalb einer anderen anzeigen lass

  Alt 25. Okt 2008, 20:06
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#3

Re: Eigene Komponenten innerhalb einer anderen anzeigen lass

  Alt 25. Okt 2008, 20:10
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?
Jakob
  Mit Zitat antworten Zitat
Benutzerbild von CWBudde
CWBudde

Registriert seit: 21. Apr 2006
Ort: Hannover
12 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Eigene Komponenten innerhalb einer anderen anzeigen lass

  Alt 30. Okt 2008, 17:28
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:
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.
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.

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.
Miniaturansicht angehängter Grafiken
subcomonents_209.png  
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Eigene Komponenten innerhalb einer anderen anzeigen lass

  Alt 30. Okt 2008, 18:45
Ich habe dich verstanden. Das Zauberwort lautet Owner 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:
constructor TYourSuperPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  fButton := TButton.Create(AOwner);
  fButton.Parent := Self;
end;
Somit sollte der Button dann auch in der Übersicht auftauchen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von CWBudde
CWBudde

Registriert seit: 21. Apr 2006
Ort: Hannover
12 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Eigene Komponenten innerhalb einer anderen anzeigen lass

  Alt 31. Okt 2008, 00:54
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
Miniaturansicht angehängter Grafiken
subcomponent2_553.png  
Christian
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:50 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