TLayout与TLSel一起使用自动调整大小

时间:2016-04-26 19:58:58

标签: delphi firemonkey

我正在使用最新的Delphi 10.1并创建一个多设备应用程序。我的TLayout Align设置为top。我在提及的TLabel中有一个TLayoutAlign设置为Client,其TLabel.AutoSize设置为True

问题是,当标签文字很长时,TLabel会增长但TLayout不会增长。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

更改文字后,您就会知道标签的新尺寸 Label.Width将更新以反映已调整大小的宽度。

您有3个选项。

  1. 每当您更改标签的文本时,也请阅读其width并更新相关的TLayout以匹配(不推荐)。

  2. 分配标签的OnResize事件并执行以下操作(推荐):

  3.     procedure TForm45.Label1Resize(Sender: TObject);
        const
          ExtraWidthOfLayout = 10;
        var
          Lbl: TLabel;
          Layout: TLayout;
        begin
          if (Sender is TLabel) and (TLabel(Sender).Parent is TLayout) then begin
            Lbl:= TLabel(Sender);
            Layout:= TLayOut(Lbl.Parent);
            Layout.Width:= Lbl.Width + ExtraWidthOfLayout;
          end;
        end;
    

    请注意,您可以对所有标签使用相同的事件。

    1. 创建一个新的控件,其中包含一个融合的布局和覆盖TLabel.DoResize的标签。