我有一段时间试图在Delphi XE5 Firemonkey移动应用程序中使用TLabel组件正确处理自动换行。背景是我试图以编程方式在具有各种图像和标签的表单上填充TScrollBox组件,并且一些标签将需要包装。
有些帖子似乎表明,如果将组件宽度设置为预定义大小,则将AutoSize和WordWrap属性设置为true,标签将换行并根据需要调整高度。不幸的是,在我的测试中,似乎这不起作用,并且只要AutoSize为true,组件默认为单个长行文本。
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;
这让我疯狂了一个多星期了,所以任何帮助都会非常感激。