我在尝试使用 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 := [];
其他帖子建议使用 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;
这已经让我发疯了一个多星期了,所以任何帮助都将不胜感激。