Delphi XE5 TLabel单词包装

Delphi XE5 TLabel单词包装,delphi,word-wrap,delphi-xe5,tlabel,Delphi,Word Wrap,Delphi Xe5,Tlabel,在Delphi XE5 Firemonkey移动应用程序中,我花了很长时间试图让单词包装与TLabel组件正确工作。背景是,我试图以编程方式在表单上用各种图像和标签填充TScrollBox组件,其中一些标签需要包装 有些帖子似乎指出,如果将组件宽度设置为预定义的大小,则将“自动调整大小”和“自动换行”属性设置为true,标签将根据需要换行并调整高度。不幸的是,在我的测试中,这似乎不起作用,而且一旦AutoSize为真,组件就会默认为一行长文本 currentBlurb

在Delphi XE5 Firemonkey移动应用程序中,我花了很长时间试图让单词包装与TLabel组件正确工作。背景是,我试图以编程方式在表单上用各种图像和标签填充TScrollBox组件,其中一些标签需要包装

有些帖子似乎指出,如果将组件宽度设置为预定义的大小,则将“自动调整大小”和“自动换行”属性设置为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  := [];

其他帖子建议使用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;


这已经让我抓狂了一个多星期了,如果有任何帮助,我将不胜感激。

看起来你的屏幕截图是相反的。谢谢,我想如果要得到一个包装的标签,我通常会关闭Autosize,将Wordwrap设置为true,并将标签边界拖动到所需的最大布局大小。设置任何定位锚等。只有这样,它才能与Wordwrap@BrianFrost,这看起来应该是一个答案。我尝试在设计视图中使用TLabel。首先将AutoSize设置为False,将Width设置为200,将Text设置为“这是一个测试这是一个测试这是一个测试这是一个测试这是一个测试”,然后将WordWrap设置为True(大小无变化),然后将AutoSize设置为True(宽度扩展为字符串长度,但高度无变化-GRRR)。然后,我尝试在VCL表单上执行完全相同的操作,效果很好,因此它显然是特定于FMX TLabel组件的。