加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何调整按钮大小以适合Delphi FireMonkey中的文本?

发布时间:2020-12-15 04:09:07 所属栏目:大数据 来源:网络整理
导读:我希望按钮大小(宽度和高度)尽可能小,但我希望它适合文本.任何代码示例? Delphi XE4 FireMonkey移动应用程序. 解决方法 FireMonkey使用 TTextLayout类通过方法呈现文本.我们可以通过类助手访问此方法,然后根据布局提供的信息更改按钮大小. uses FMX.TextLay
我希望按钮大小(宽度和高度)尽可能小,但我希望它适合文本.任何代码示例?
Delphi XE4 FireMonkey移动应用程序.

解决方法

FireMonkey使用 TTextLayout类通过方法呈现文本.我们可以通过类助手访问此方法,然后根据布局提供的信息更改按钮大小.
uses FMX.TextLayout;

type
  TextHelper = class helper for TText
     function getLayout : TTextLayout;
  end;

function TextHelper.getLayout;
begin
  result := Self.fLayout;
end;

procedure ButtonAutoSize(Button : TButton);
var
  bCaption : TText;
  m : TBounds;
begin
  bCaption := TText(Button.FindStyleResource('text',false));
  bCaption.HorzTextAlign := TTextAlign.taLeading;
  bCaption.VertTextAlign := TTextAlign.taLeading;
  m := bCaption.Margins;
  Button.Width  := bCaption.getLayout.Width  + m.Left + m.Right;
  Button.Height := bCaption.getLayout.Height + m.Top  + m.Bottom;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   ButtonAutoSize(Sender as TButton);
end;

更新

这是一个更加面向未来的解决方案,不需要公开私有类字段.

uses FMX.Objects;

procedure ButtonAutoSizeEx(Button: TButton);
var
  Bitmap: TBitmap;
  Margins: TBounds;
  Width,Height: Single;
begin
  Bitmap := TBitmap.Create;
  Bitmap.Canvas.Font.Assign(Button.TextSettings.Font);
  Width := Bitmap.Canvas.TextWidth(Button.Text);
  Height := Bitmap.Canvas.TextHeight(Button.Text);
  Margins := (Button.FindStyleResource('text',false) as TText).Margins;
  Button.TextSettings.HorzAlign := TTextAlign.Leading;
  Button.Width := Width + Margins.Left + Margins.Right;
  Button.Height := Height + Margins.Top + Margins.Bottom;
end;

此示例省略了任何自动换行或字符修剪.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读