Firemonkey中是否有用于缩短按钮或标签文本的省略号/省略例程?例如,转:
"C:\a really\really\really long\very long path\even long path name" 转换为 "C:\a really\re..." 或 "C:\a really\re...path name"
VCL 有一些例程,但看起来查找 Firemonkey 的文本大小会更复杂。
我在 Delphi XE3 上使用 Firemonkey 2
提前致谢
...好吧,我根据 Mike Sutton 的建议创建了一个笨重的程序。它只在字符串第一部分的末尾添加省略号,但可以很容易地修改中间或结尾省略号的位置。它还考虑了当前对象的字体大小和样式。
用法是:
ShortenText(Button1, 'Start of text blah blah blah blah the END is here');
procedure ShortenText(anFMXObject: TTextControl; newText: string);
var
aTextObj: TText;
shortenTo: integer;
modText: string;
begin
if Length(newText) > 2 then
begin
modText:= newText+'...';
aTextObj:=TText.Create(anFMXObject.Parent);
aTextObj.Font.SetSettings(anFMXObject.Font.Family,
anFMXObject.Font.Size,
anFMXObject.Font.Style);
aTextObj.WordWrap:= false;
aTextObj.AutoSize:= true;
aTextObj.Text:= newText;
// this next bit generates the change necessary to redraw the new text (bug in XE3 as of Oct 2012)
aTextObj.HorzTextAlign:= TTextAlign.taCenter;
aTextObj.HorzTextAlign:= TTextAlign.taLeading;
// now shorten the text:
shortenTo:= round((Length(modText)/aTextObj.Width)*anFMXObject.Width)-1;
modText:= LeftStr(modText, shortenTo-3)+'...';
anFMXObject.Text:= modText;
FreeAndNil(aTextObj);
end;
end;