使用省略号缩短Firemonkey中的标签

时间:2012-10-25 15:06:39

标签: delphi firemonkey ellipsis delphi-xe3

是否有省略号/ ellipsify例程来缩短Firemonkey中的按钮或标签文本? 转过来:

“C:\真的\真的\非常长\非常长的路径\甚至更长的路径名称”“C:\ a a really \ re ...” 要么 “C:\ a a really \ re ...路径名称”

VCL有一些例程,但看起来更容易找到Firemonkey的文本大小。

我在Delphi XE3上使用Firemonkey 2

提前致谢

......好吧我从Mike Sutton的建议中创造了一个笨重的程序。 它只在字符串第1部分的末尾添加省略号,但可以很容易地修改中间或末尾省略号位置。它还考虑了当前对象的字体大小和样式。

用法是:

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;

1 个答案:

答案 0 :(得分:1)

我建议使用TText,AutoSize设置为True,Wrap设置为False,然后您只需读取Width属性。

请注意,XE3中存在一个错误,并且在运行时设置Text属性并不会更新内容,因此您需要手动调用Realign(受保护,因此您&# 39; ll想要继承TText以使其工作)。