作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望按钮尺寸(宽度和高度)尽可能小,但我希望它适合文本。有代码示例吗?Delphi XE4 FireMonkey 移动应用程序。
最佳答案
FireMonkey 通过使用 TTextLayout 的方法呈现文本类(class)。
我们可以通过类助手访问此方法,然后根据布局提供的信息更改按钮大小。
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;
<小时/>
这是一个更面向 future 的解决方案,不需要公开私有(private)类字段。
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;
此示例省略了任何自动换行或字符修剪。
关于delphi - 如何在Delphi FireMonkey中调整按钮大小以适合文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18430290/
我是一名优秀的程序员,十分优秀!