Delphi Berlin 10.1.2计算文本的显示高度

it delphi

问题的由来,我在界面上使用TRadioButton,由于TRadioButton要显示的内容变化,长度不一,对于过长的文本需要折行显示,通过设置TRadioButton.TextSettings.WordWrap=True即可,但折行后问题来了,太长的文本折行后,TRadioButton的高度限制,显示不全,就是说TRadioButton的高度不会随着折行自动增加,进一步查找属性,发现没有AutoSize之类属性来控制高度的自适应。

对于这个问题,我在官网QC上提了需求,有时间可以帮我去投票:
https://quality.embarcadero.com/browse/RSP-16606

那现在需要根据要显示的内容来计算出其高度并据此设置TRadioButton的高度,达到高度自适应的目的。
在官方的例子中找到实现方法,利用TTextLayout来计算,直接上代码:
//参数说明:
//D 参考对象,用他的字体大小,对齐方式等属性来计算文本的高度
//Width:文本的显示宽度,即文本在多大的宽度下折行,实际上我用的是D对象的宽度
//Text:要计算高度的文本
function GetTextHeight(const D: TText; const Width: single; const Text: string): Integer;
var
  Layout: TTextLayout;
begin
  // Create a TTextLayout to measure text dimensions
  Layout := TTextLayoutManager.DefaultTextLayout.Create;
  try
    Layout.BeginUpdate;
    try
      // Initialize layout parameters with those of the drawable
      Layout.Font.Assign(D.Font);

      Layout.VerticalAlign :=  D.TextSettings.VertAlign;
      Layout.HorizontalAlign := D.TextSettings.HorzAlign;
      Layout.WordWrap := D.WordWrap;
      Layout.Trimming := D.Trimming;
      Layout.MaxSize := TPointF.Create(Width, TTextLayout.MaxLayoutSize.Y);
      Layout.Text := Text;
    finally
      Layout.EndUpdate;
    end;
    // Get layout height
    Result := Round(Layout.Height);
    // Add one em to the height
    Layout.Text := 'm';
    Result := Result + Round(Layout.Height);
  finally
    Layout.DisposeOf;
  end;
end;
高度计算出来,利用这个方法的返回值重新设置TRadioButton的高度即可。经在多个机器上测试显示正常。



相关推荐

你的评论

就没有什么想说的吗?

最新博客

关于我们 加入传客 媒体报道 帮助中心 传客活动 免责声明 联系我们 移动版 移动应用

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X