【问题标题】:Inno Setup shorten file path string to fit FilenameLabelInno Setup 缩短文件路径字符串以适应 FilenameLabel
【发布时间】:2019-11-07 03:07:03
【问题描述】:

在WizardForm.InstallingPage 上,WizardForm.FilenameLabel 自动截断包含文件路径的字符串,以包括开头的驱动器号,后跟最大可显示路径,从路径的顶层截断,以适应标签的大小,以便始终显示文件名,例如C:\...\LongFilePathNameWithMultipleSubDirectories\Filename.ext。

我查看了Length、Pos、Copy 和ExtractFileDrive 字符串函数,但考虑到路径和文件名的可能性几乎是无限的,因为用户可以选择任何安装路径希望,我正在努力寻找一种方法来显示路径的最大可能长度,而不会截断文件名。

我想我需要一个像Pos 这样的函数,它返回匹配的数量和它找到的每个\ 的索引,这意味着我可以在每个索引之间使用Length 来确定@​​987654332@ 的来源,但我找不到任何方法。

【问题讨论】:

  • 所以您想要在任何... 截断之前路径中的最大字符数? - 这是一件非常奇怪的事情 - 您将需要考虑正在使用的特定字体,下载 inno 源代码并查看 cmnfunc.pas 中的 MinimizePathName() 以了解它如何与 GetTextWidth() 一起使用。跨度>
  • 我基本上想模拟 Inno Setup 在提取文件时对 FilenameLabel 显示所做的操作。因此,如果C:\First Folder\Second Folder\Third Folder\Filename.ext 太长而无法容纳FilenameLabel,那么它将酌情截断如下C:\...\Second Folder\Third Folder\Filename.ext 或C:\...\Third Folder\Filename.ext 以适应,但也显示可能的最大路径量。
  • 这正是我需要的功能。我不知道我是如何在文档中错过它的。如果您想将其添加为答案,我会接受。

标签: inno-setup pascalscript


【解决方案1】:

您可以使用MinimizePathName function。

类似这样的:

YourLabelControl.Caption :=
   MinimizePathName(
     'C:\First Folder\Second Folder\Third Folder\Filename.ext',
     YourLabelControl.Font, YourLabelControl.Width);

(未经测试)

【讨论】:

    【解决方案2】:

    MinimizePathName() 函数可用于脚本,它接受一个字符串和一个字体并返回一个重新格式化的字符串,该字符串将适合给定字体中给定数量的像素。

    【讨论】:

      猜你喜欢
      • 2019-09-28
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多