Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   SpTBXTabsheet wird nicht angezeigt (https://www.delphipraxis.net/167767-sptbxtabsheet-wird-nicht-angezeigt.html)

SpTBX 17. Apr 2012 14:06

SpTBXTabsheet wird nicht angezeigt
 
Hallo,

ich bin neu hier und habe ein Problem mit dem SpTBXTabControl, das ich zur Laufzeit erzeuge. Das daruf ebenfalls zur Laufzeit erzeugte SpTBXTabSheet wird nicht angezeigt.

Vorher habe ich ein TPagecontrol zur Laufzeit erzeugt und ebenso zur Laufzeit ein TTabsheet. Dabei wird alles korrekt angezeigt.

Nun habe ich das TPageControl in TSpTBXTabControl umbenannt und will nun darauf ein SpTBXTabSheet erzeugen. Dieses wird jedoch nicht angezeit, obwohl das SpTBXTabControl sichtbar ist.

Muss ich bei den SpTBXControls noch etwas beachten, was ich bei TPageControl nicht muss. Bin echt ratlos.

type
TMyPage = class(TTabSheet)
end;

TMyPages = class(TPageControl)
end;

umbenannt in:

Delphi-Quellcode:
type
  TMyPage = class(TSPTBXTabSheet)
  end;

  TMyPages = class(TSpTBXTabControl)
  end;

cookie22 17. Apr 2012 16:38

AW: SpTBXTabsheet wird nicht angezeigt
 
Hallo,

bitte benutze das Code-Tag für deinen Code.

Versuch mal ein SpTBXTabItem zu erzeugen, anstelle des TSpTBXTabSheets.

Hab das so noch irgendwie im Kopf.

SpTBX 18. Apr 2012 11:08

AW: SpTBXTabsheet wird nicht angezeigt
 
Hallo cookie22,

Danke erst mal für die Antwort. Habe das nun mit TSpTBXTabItem probiert und zwar so hier:

Delphi-Quellcode:
unit SpTbxTest;

{$define use_SpTBX}
{.$undef use_SpTBX}
{$define use_tabitem}
{.$undef use_tabitem}

type
  TMyPage = class({$ifdef use_SpTBX} TSPTBXTabItem {$else} TTabSheet {$endif})
  end;

  // Statt TSpTBXTabItem stand da vorher TSpTBXTabSheet

  TMyPages = class({$ifdef use_SpTBX} TSpTBXTabControl {$else} TPageControl {$endif})
    constructor Create(AOwner: TComponent);
    procedure AddPage;
  end;

constructor TMyPages.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

procedure TMyPages.AddPage;
begin
  Page := TMyPage.Create(self);

  {$ifdef USE_SPTBX}
  {$ifdef use_tabitem}
  Page.ParentComponent := self; //In SpTBXTabItem keine Eigenschaft TabControl oder PageControl
  {$else}
  Page.TabControl := self;
  {$endif}
  {$else}
  Page.PageControl := self;    //Mit Delphi eigenem PageControl
  {$endif}
end;

//in Unit1.pas

Unit Unit1;

interface

uses ...,...,SpTbxTest;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
     FTabs: TSpTBXTabControl;
     FPage: TSpTBXTabItem;
  public

  end;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FTabs := TSpTBXTabControl.Create(self);
  FPage := TSpTBXTabItem.Create(self);
  FPage.AddPage;
end;
SO, jetzt mit Delphi Tag. Sorry, musste das erst rausfinden.

So habe ich das also jetzt gemacht. Aber leider wird das TabItem auch nicht angezeigt. Im TabItem gibt es auch keine Eigenschaft TabControl, PageControl oä.

cookie22 18. Apr 2012 17:20

AW: SpTBXTabsheet wird nicht angezeigt
 
Mach mal aus dem FPage wieder ein SpTBXTabSheet und dann:

Delphi-Quellcode:
FTabs.Parent := Form1;
FPage.Parent := FTabs;
Wird es dann angezeigt?

SpTBX 18. Apr 2012 20:28

AW: SpTBXTabsheet wird nicht angezeigt
 
Hallooo cookie22,

Danke nochmals für Deine Mühe!

Nein, leider wird das Tabsheet so auch nicht korrekt angezeigt. Dennoch habe ich eine Lösung gefunden, die sich beim Studium der Quelltexte ergeben hat.

Die Klasse TSpTbxTabControl stammt von der Klasse TSpTBXCustomTabset ab, die die Methode Add enthält, die so definiert ist:

Delphi-Quellcode:
function TSpTBXCustomTabSet.Add(Caption: WideString): TSpTBXTabItem;
So war der erste Gedanke mit TabItem doch richtig.

Nur hatte ich beim vorherigen Quelltextstuduim leider diese Methode übersehen und das Problem halt so zu lösen versucht, wie das mit dem Delphi-eigenen Pagecontrol zu lösen wäre. Dort wird alles korrekt angezeigt.

Für SPTBX habe ich nun diese Add Methode verwendet. Und damit klappt die Anzeige wie gewünscht. :-D

So sollte also, wer das SpTBXTabControl anstelle des Delphi-eigenen PageControl verwenden will, die Methode Add aufrufen um die Tabseite zu erzeugen und zwar so:

Delphi-Quellcode:
unit unit1;

interface

uses ...,..., SpTBXTabs;

type
  TForm1 = class(TForm)
     procedure FormCreate(Sender: TObject);
  private
    FTabs: TSpTBXTabControl;
  public
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FTabs := TSpTBXTabControl.Create(self);
  FTabs.Parent := self;
  FTabs.Add('Mein Tab');
  FTabs.Add('Noch ein Tab');
end;

//Aber, wenn noch was auf der Tabseite angezeigt werden soll:

procedure TForm1.FormCreate(Sender: TObject);
var
 Tab: TSpTBXTabItem;
 Memo: TMemo;
 Synedit: TSynEdit;
begin
  FTabs := TSpTBXTabControl.Create(self);
  FTabs.Parent := self;
  Tab := FTabs.Add('Mein Tab');
  Memo := TMemo.Create(Self);
  Memo.Parent := Tab; //hier gibt es Typkonflikt TWinControl und TTBCustomItem
end;

end.
Wie kann ich also jetzt andere Controls auf die Tabseite bringen?

Ein Problem gelöst, das nächste kommt. :pale:

----------------------------------------------------------------------

Ich habe das jetzt so gelöst:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
 Tab: TSpTBXTabItem;
 Memo: TMemo;
 Synedit: TSynEdit;
begin
  FTabs := TSpTBXTabControl.Create(self);
  FTabs.Parent := self;
  Tab := FTabs.Add('Mein Tab');
  Memo := TMemo.Create(Self);
  FTabs.ActivePage.InsertControl(Memo);
end;
Nun endlich wird alles angezeigt, wie ich das wollte. :)

Danke @cookie22, Du hast mir den richtigen Denkanstoß gegeben.

.

SpTBX 21. Apr 2012 19:16

AW: SpTBXTabsheet wird nicht angezeigt
 
Hallo,

Leider kann ich meinen letzten Beitrag nicht mehr bearbeiten, deshalb der neue Beitrag hier. Ich habe keine neue Frage zum SpTBX, ich wollte nur zeigen, wie ein Zugriff auf die in eine Tabseite eigefügte Komponente erfolgen kann:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
 Tab: TSpTBXTabItem;
 Memo: TMemo;
 Synedit: TSynEdit;
begin
  FTabs := TSpTBXTabControl.Create(self);
  FTabs.Parent := self;
  Tab := FTabs.Add('Mein Tab');
  Memo := TMemo.Create(Self);
  FTabs.ActivePage.InsertControl(Memo);
  //oder
  TMemo(FTabs.Pages[FTabs.PagesCount-1].Controls[0]).Lines.Add('Zugriff erfolgreich');
  //oder
  TMemo(FTabs.ActivePage.Controls[0]).Lines.Add('Zugriff mit --- FTabs.ActivePage.Controls[0] --- ');
end;
Wird eine andere Komponente eingefügt, muß statt TMemo natürlich der Typ der eigefügten Komponente stehen.

Habe damit ne ganze Weile experimentieren müssen, bevor mir dieser Zugriff gelang und da dachte ich, ich werde das mal hier zum Besten geben, vielleicht hat ja der eine oder andere dieselben Probleme damit.

.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 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