Firemonkey でボタンまたはラベルのテキストを短縮するための省略記号/楕円化ルーチンはありますか? たとえば、次のようにします。
「C:\a really\really\really long\very long path\さらに長いパス名」 を 「C:\a really\re...」 または 「C:\a really\re...path name」に
VCL の周りにはルーチンがありますが、Firemonkey のテキスト サイズを見つけることはより複雑になるようです。
Delphi XE3 で Firemonkey 2 を使用しています
前もって感謝します
... OK、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;