You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RAD Studio Delphi的FMX框架是否有VCL.MinimizeName的等效函数?

FMX 路径缩短功能实现说明
  • FMX 官方标准库目前没有内置和 VCL MinimizeName 完全等效的跨平台 API,你可以基于 FMX 自带的文本测量能力自行实现全平台适配的逻辑,同时兼容 Windows/Mac/iOS/Android 四个平台的字体渲染差异。
  • 核心实现逻辑如下:
    1. 优先保留完整文件名,将中间的路径层级替换为省略号...
    2. 每次裁剪路径后用对应控件的字体属性测量文本宽度,直到宽度匹配 TLabel 的可显示范围
    3. 极端情况下如果仅文件名本身就超出宽度,再对文件名做后缀裁剪

你可以直接参考以下可直接运行的实现代码:

uses
  System.SysUtils, System.IOUtils, FMX.Graphics;

function MinimizeNameFMX(const AFullPath: string; ACanvas: TCanvas; AMaxWidth: Single): string;
var
  LDirName: string;
  LFileName: string;
  LPathSegments: TArray<string>;
  LTempStr: string;
  I: Integer;
begin
  // 完整路径已符合宽度要求直接返回
  if ACanvas.MeasureText(AFullPath).Width <= AMaxWidth then
    Exit(AFullPath);

  LFileName := TPath.GetFileName(AFullPath);
  LDirName := TPath.GetDirectoryName(AFullPath);
  LPathSegments := LDirName.Split([TPath.DirectorySeparatorChar]);

  // 先测试仅保留文件名加前缀省略号的宽度
  Result := '...' + TPath.DirectorySeparatorChar + LFileName;
  if ACanvas.MeasureText(Result).Width <= AMaxWidth then
  begin
    // 尝试逐步拼接前面的路径段
    LTempStr := '';
    for I := 0 to High(LPathSegments) do
    begin
      if LTempStr.IsEmpty then
        LTempStr := LPathSegments[I]
      else
        LTempStr := LTempStr + TPath.DirectorySeparatorChar + LPathSegments[I];

      var TestStr := LTempStr + TPath.DirectorySeparatorChar + '...' + TPath.DirectorySeparatorChar + LFileName;
      if ACanvas.MeasureText(TestStr).Width > AMaxWidth then
        Break;

      Result := TestStr;
    end;
  end
  else
  begin
    // 文件名本身过长,裁剪文件名
    LTempStr := LFileName;
    while Length(LTempStr) > 3 do
    begin
      LTempStr := Copy(LTempStr, 1, Length(LTempStr) - 1);
      var TestStr := '...' + LTempStr;
      if ACanvas.MeasureText(TestStr).Width <= AMaxWidth then
      begin
        Result := TestStr;
        Break;
      end;
    end;
  end;
end;

使用时直接传入对应参数即可:

// 示例:给Label1设置缩短后的路径
Label1.Text := MinimizeNameFMX('你的完整路径字符串', Label1.Canvas, Label1.Width);

内容的提问来源于stack exchange,提问作者Juan Jimenez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:51:05