Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FMX TTabControl - TTabItem während der Laufzeit entfernen (https://www.delphipraxis.net/211344-fmx-ttabcontrol-ttabitem-waehrend-der-laufzeit-entfernen.html)

Wiener 1. Sep 2022 15:40

Delphi-Version: 10.4 Sydney

FMX TTabControl - TTabItem während der Laufzeit entfernen
 
Hallo Leute,

habe zwar gesucht aber leider nur viel über die VCL Komponente gefunden.
Mein Problem ich bekomme die TTabItems einfach nicht vom Control entfernt.
Hat wer eine Lösung oder Tip für mich :-)

Delphi-Quellcode:
if ObjektFrame.TabControlKfzSparte.TabCount >= 0 then
      begin
       for x:= 0 to ObjektFrame.TabControlKfzSparte.TabCount -1 do
         begin
            if Assigned(ObjektFrame.TabControlKfzSparte.Tabs[x]) then
            begin
               ObjektFrame.TabControlKfzSparte.BeginUpdate;
                  ObjektFrame.TabControlKfzSparte.Tabs[x].Free; // RemoveObject(x);
               ObjektFrame.TabControlKfzSparte.EndUpdate;
            end;
         end;
         //ObjektFrame.TabControlKfzSparte.DeleteChildren;
      end;

      for x := 0 to DataModule1.FDQuery_Sonstiges.RecordCount-1 do
      begin
         if DataModule1.FDQuery_Sonstiges.FieldByName('Sparten').AsString <> 'KFZ-Kasko (nur bis inkl. Vers. 212-02 zu verw.)' then
            Temptext:= DataModule1.FDQuery_Sonstiges.FieldByName('Sparten').AsString
         else
            Temptext:= 'KFZ-Kasko';

         // TabItems der Sparten erstellen
         Ttab:= TTabItem.Create(ObjektFrame);
         Ttab.Parent:= ObjektFrame.TabControlKfzSparte;
         Ttab.Text:= Temptext;
         ObjektFrame.TabControlKfzSparte.BeginUpdate;
            ObjektFrame.TabControlKfzSparte.AddObject(Ttab);
         ObjektFrame.TabControlKfzSparte.EndUpdate;

         DataModule1.FDQuery_Sonstiges.Next;
      end;

      ObjektFrame.TabControlKfzSparte.First();

TurboMagic 1. Sep 2022 21:40

AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
 
Falls das nicht gehen sollte: kann man es einfach Visible := false machen?

Harry Stahl 1. Sep 2022 23:49

AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
 
Bin gerade unterwegs und habe kein Delphi zur Hand. Gab es da nicht auch ein .delete für die Tabitems?

Wie auch immer, eine Liste muss man von count-1 Down to 0 durchlaufen, wenn man einzelne Einträge löschen will…

Wiener 2. Sep 2022 08:50

AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
 
Zitat:

Zitat von Harry Stahl (Beitrag 1511121)
Bin gerade unterwegs und habe kein Delphi zur Hand. Gab es da nicht auch ein .delete für die Tabitems?

Wie auch immer, eine Liste muss man von count-1 Down to 0 durchlaufen, wenn man einzelne Einträge löschen will…

Danke
habs gelöst:

Delphi-Quellcode:
if ObjektFrame.TabControlKfzSparte.TabCount >= 0 then
      begin
       x:= ObjektFrame.TabControlKfzSparte.TabCount -1;
       while ObjektFrame.TabControlKfzSparte.TabCount -1 >= 0 do
         begin
               ObjektFrame.TabControlKfzSparte.BeginUpdate;
                  ObjektFrame.TabControlKfzSparte.Delete(x);
               ObjektFrame.TabControlKfzSparte.EndUpdate;
               dec(x,1);
         end;
      end;

BerndS 2. Sep 2022 09:38

AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
 
Das BeginUpdate/EndUpdate würde ich noch verschieben, damit es nur einmal aufgerufen wird.
Delphi-Quellcode:
if ObjektFrame.TabControlKfzSparte.TabCount >= 0 then
begin
  ObjektFrame.TabControlKfzSparte.BeginUpdate;
  try
    x:= ObjektFrame.TabControlKfzSparte.TabCount -1;
    while ObjektFrame.TabControlKfzSparte.TabCount -1 >= 0 do
    begin
       ObjektFrame.TabControlKfzSparte.Delete(x);
       dec(x,1);
    end;
  finally
    ObjektFrame.TabControlKfzSparte.EndUpdate;
  end;
end;

freimatz 2. Sep 2022 12:53

AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
 
Wie wärs mit https://www.delphipraxis.net/18-gui-...mmon-controls/

Dennis07 5. Sep 2022 12:56

AW: FMX TTabControl - TTabItem während der Laufzeit entfernen
 
Hatte das auch mal, und bin an ein Problem gestoßen: Falls das der Tab selektiert ist, auf dem sich der Schließen-Button befindet, dann klappt das nicht so wirklich.
Embarcadero im QP so: Wir wollen nicht, dass so etwas geht, weil das das gegen unsere Design-Philosophie verstößt.
Trotzdem dann mit TTask hinbekommen...

Hier der Weg, wie es gemacht werden sollte:

Delphi-Quellcode:
TTask.Run(
    procedure
    begin
      TThread.Synchronize(nil,
        procedure
        begin
         TabItem1.DisposeOf;
         if TabControl1.TabIndex>TabControl1.TabCount-1
           then TabControl1.TabIndex:=TabControl1.TabCount-1
        end);
    end);


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