Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
4.242 Beiträge
 
Delphi 12 Athens
 
#7

AW: Hat schon mal jemand TFormTabsBar verwendet?

  Alt 13. Jun 2025, 12:31
Gibt es einen ähnlichen Ansatz von TFormTabsBar auch für FMX?
Dafür nutze ich Frames und FMX.TabControl.TTabControl

Auf die Tabs lege ich TRectangle, weil die sich auch einfärben lassen, TLayout genügt aber auch,
ist meiner Meinung nach aber nicht viel schlanker als ein TRectangle.

Dann kann man die einzelnen Frames separat bearbeiten und per Runtime auf die Rectangles legen.

ungefähr so
Delphi-Quellcode:

procedure Frame_Embed_To( const AFrame : TFrame;
                                   const ACarrier : TControl;
                                   const AAlign : TAlignLayout = TAlignLayout.Client );
begin

    if not Assigned( ACarrier ) then
    begin
        Exit; //<== GUARD ==============================================
    end;

    if not Assigned( AFrame ) then
    begin
        Exit; //<== GUARD ==============================================
    end;

    ACarrier.BeginUpdate;

    try
        AFrame.Parent := nil;

        AFrame.Parent := ACarrier;
        AFrame.Align := AAlign;

    finally
        ACarrier.EndUpdate;
        ACarrier.Repaint;
    end;

end;


procedure Frame_Embed_ReleaseFrom( const AFrame : TFrame;
                                   const ACarrier : TControl );
begin

    if Assigned( ACarrier ) and Assigned( AFrame) then
    begin

        ACarrier.BeginUpdate;

        try
            AFrame.Parent := nil;

        finally
            ACarrier.EndUpdate;
            ACarrier.Repaint;
        end;
    end;

end;
Man kann auch TForm auf diese Weise zuweisen, dann muss man nur die ganzen Komponenten rüberholen.
Hatte so funktioniert, ist aber schon lange nicht mehr benutzt, seitdem ich alles auf Frames umgestellt habe.

Delphi-Quellcode:

procedure Form_Embed_To(const AForm:TCustomForm; const AParent:TControl);
var
  chld: TFmxObject;
  I: Integer;
begin
  if Assigned( AParent ) then
  begin
      AParent.BeginUpdate;

      I := 0;
      while AForm.ChildrenCount > 0 do
      begin
        chld := AForm.Children[I];
        if chld.Name <> 'then
          AForm.Children[I].Parent := AParent
        else
          Inc(I);
      end;

      AParent.EndUpdate;
  end;
end;

procedure Form_Embed_ReleaseFrom(const AForm:TCustomForm; const AParent:TControl);
var
  I: Integer;
  chld: TFmxObject;
begin

  I := 0;
  while AParent.ChildrenCount > I do
  begin
    chld := AParent.Children[I];
    if chld.Name <> 'then
      chld.Parent := AForm
    else
      Inc(I);
  end;
end;

Geändert von Rollo62 (13. Jun 2025 um 12:44 Uhr)
  Mit Zitat antworten Zitat