是否有用于缩短 Firemonkey 中的按钮或标签文本的省略号/省略号例程?
例如,转向:

"C:\a 真的\真的\真的很长\很长的路径\甚至更长的路径名"
进入
"C:\a 真的\re..."
或者
"C:\a 真的\re...路径名"

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;

最佳答案

我建议使用 TText 并将 AutoSize 设置为 True 并将 Wrap 设置为 False 然后您可以简单地读取 Width 属性。

请注意,XE3 中存在一个错误,并且在运行时设置 Text 属性不会更新内容,因此您需要手动调用 Realign(这是 protected ,因此您需要子类化 TText 以使其工作)。

关于delphi - 用省略号缩短 Firemonkey 中的标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13071591/

10-12 19:57