2

我在尝试使用 Delphi XE5 Firemonkey 移动应用程序中的 TLabel 组件正确地进行自动换行。背景是我正在尝试以编程方式在具有各种图像和标签的表单上填充 TScrollBox 组件,并且某些标签需要换行。

一些帖子似乎表明,如果您将组件宽度设置为预定义大小,则将 AutoSize 和 WordWrap 属性设为 true,标签将根据需要换行并调整高度。不幸的是,在我的测试中,这似乎不起作用,并且只要 AutoSize 为真,组件就会默认为一行长文本。

      currentBlurb                 := TLabel.Create(self);
      currentBlurb.parent          := scrollNews;
      currentBlurb.Width           := scrollNews.Width - 50;
      currentBlurb.Position.X      := 25;
      currentBlurb.Position.Y      := scrollPosition;
      currentBlurb.WordWrap        := true;
      currentBlurb.AutoSize        := true;
      currentBlurb.Font.Size       := 12;
      currentBlurb.Font.Style      := [];
      currentBlurb.Visible         := true;
      currentBlurb.Text            := resultArticles.O[articleIndex].S['blurb'];
      currentBlurb.StyledSettings  := [];

截图 1

其他帖子建议使用 MeasureText 过程来计算包装文本的高度,但是这种计算在接近正确高度时似乎对我不起作用,因为它随机切断了一些底部文本。

      currentBlurb                 := TLabel.Create(self);
      currentBlurb.parent          := scrollNews;
      currentBlurb.AutoSize        := false;
      currentBlurb.WordWrap        := true;
      currentBlurb.Position.X      := 25;
      currentBlurb.Position.Y      := scrollPosition;
      currentBlurb.Width           := scrollNews.Width - 50;
      currentBlurb.Font.Size       := 12;
      currentBlurb.Font.Style      := [];
      currentBlurb.Visible         := true;
      currentBlurb.Text            := resultArticles.O[articleIndex].S['blurb'];
      currentBlurb.StyledSettings  := [];

      { The TLabel component doesn't seem to wrap as the documentation would suggest }
      { so we need to manually calculate the height of the label after wrapping      }

      rectBlurb := TRectF.Create(0, 0, currentBlurb.Width, 10000);
      currentBlurb.Canvas.MeasureText
      (
        rectBlurb,
        currentBlurb.Text,
        True,
        [],
        TTextAlign.taLeading,
        TTextAlign.taLeading
      );

      currentBlurb.Height          := rectBlurb.Height;

      scrollPosition := scrollPosition + trunc(currentBlurb.Height) + 50;

截图 2

这已经让我发疯了一个多星期了,所以任何帮助都将不胜感激。

4

0 回答 0