Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Firemonkey - TabItem zur Laufzeit einem TabControl zuweisen (https://www.delphipraxis.net/174346-firemonkey-tabitem-zur-laufzeit-einem-tabcontrol-zuweisen.html)

sintronic86 18. Apr 2013 10:50

Firemonkey - TabItem zur Laufzeit einem TabControl zuweisen
 
Hallo Community,

ich schon wieder! :(

Und zwar hänge ich jetzt an einem (eigentlich nicht so schweren) Problem.
Ich habe auf meiner Form ein TTabControl. Diesem möchte ich zur Laufzeit beliebig viele TTabItems zuweisen.

Hier mein derzeitiger Code:
Code:
procedure TForm_HF.Button1Click(Sender: TObject);
var TmpTI: TTabItem;
begin
  showmessage(inttostr(TabControl_Checklisten.TabCount));

  TmpTI       := TTabItem.Create(TabControl_Checklisten);
  TmpTI.Parent := TabControl_Checklisten;
  TabControl_Checklisten.AddObject(TmpTI);
  TabControl_Checklisten.ActiveTab := TmpTI;

  showmessage(inttostr(TabControl_Checklisten.TabCount));
end;
Die zweite ShowMessage liefert mir auch das richtige Ergebnis, aber das Item ist nicht zu sehen!
Ich weiß nicht, ob ich noch zusätzliche Einstellungen am Item oder dem Control vornehmen muss.

Vielen Dank schon einmal im Voraus!

Mfg Björn

Darlo 18. Apr 2013 11:07

AW: Firemonkey - TabItem zur Laufzeit einem TabControl zuweisen
 
Unter XE2 funktioniert der Code. Die Darstellung unter XE3 ist eigenartig.

Füge mal
Delphi-Quellcode:
  TmpTI.text := 'test';
ein. Funktionieren tut es nämlich.

Ferner solltest Du immer mit begin- und endupdate arbeiten.
Delphi-Quellcode:
  TmpTI      := TTabItem.Create(tabcontrol1);
  TmpTI.Parent := tabcontrol1;
  TmpTI.Text := 'test';

  tabcontrol1.BeginUpdate;
    tabcontrol1.AddObject(TmpTI);
    tabcontrol1.ActiveTab := TmpTI;
  tabcontrol1.EndUpdate;
Gruß
Philip

stahli 18. Apr 2013 11:17

AW: Firemonkey - TabItem zur Laufzeit einem TabControl zuweisen
 
Konkret zu dem Problem kann ich im Moment nichts sagen, aber versuche einfach mal eine Formulargrößenänderung (oder minimieren+maximieren).

FMX zeichnet manchmal Änderungen von Komponenten nicht vollständig (ist ein Bug, der hoffentlich bald korrigiert wird). Man muss dann das Formular veranlassen, sich neu zu zeichnen.
Es gibt einen Workaround im FMX-Sammelthread dazu.

Darlo 18. Apr 2013 11:28

AW: Firemonkey - TabItem zur Laufzeit einem TabControl zuweisen
 
Zitat:

Zitat von stahli (Beitrag 1211914)
Konkret zu dem Problem kann ich im Moment nichts sagen, aber versuche einfach mal eine Formulargrößenänderung (oder minimieren+maximieren).

FMX zeichnet manchmal Änderungen von Komponenten nicht vollständig (ist ein Bug, der hoffentlich bald korrigiert wird). Man muss dann das Formular veranlassen, sich neu zu zeichnen.
Es gibt einen Workaround im FMX-Sammelthread dazu.

[Nicht nachgewiesene Vermutung]
Hier liegt eher ein Bug im Styledesign von TTabItem vor. Die Breite der Registerkartenmarkierung ist abhängig von der Länge der Text-Eigenschaft.
Mit folgenden Code wird die Registerkarte nämlich sichtbar:
Delphi-Quellcode:
  setlength(mytext,1);
  TmpTI.Text := mytext;

Die Registerkarten werden auch mit dem Ausgangscode erstellt. Das sieht man daran, dass die Höhe des leeren Tabcontrols sich ändert.
Es scheint als würde nur die Breite der Registerkarten den Wert 0 haben.
[/Nicht nachgewiesene Vermutung]

Gruß

sintronic86 18. Apr 2013 11:35

AW: Firemonkey - TabItem zur Laufzeit einem TabControl zuweisen
 
Vielen Dank für die schnellen und vielen Antworten.

Tatsächlich hat es ausgereicht, dem TabItem einen Text zuzuweisen.
Da hätte ich auch selbst drauf kommen kommen! :?


Zur Thematik Styles in Firemonkey kann ich nur sagen, dass ich in letzter Zeit viel damit experimentiert habe
und auch eigene Styles erstellt habe. Das Prinzip ist echt klasse, aber ausgereift ist es auf jeden Fall noch nicht.

Darlo 18. Apr 2013 12:16

AW: Firemonkey - TabItem zur Laufzeit einem TabControl zuweisen
 
Ich finde die Styles auch klasse.
[Frust]
Wenn Du das Problem der Darstellung ohne Text-Zuweisung an EMBA melden würdest vermute ich eine Einzeilerantwort mit "works as designed" ...
[/Frust]

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:34 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-2025 by Thomas Breitkreuz