【问题标题】:With Inno Setup how can I rename and copy a file a user chooses (an image) to the program files directory使用 Inno Setup 如何重命名用户选择的文件(图像)并将其复制到程序文件目录
【发布时间】:2014-06-27 14:48:18
【问题描述】:

我了解如何创建自定义向导页面。只是不确定如何添加文件选择器,并将其限制为 .jpg 文件类型。我有一个在安装结束时运行的代码部分,用于在安装过程中获取用户定义的输入并修改设置文件,只需要了解如何获取他们在设置屏幕步骤中选择的文件的值,然后复制它,重命名,然后转储到程序文件夹中。

【问题讨论】:

    标签: file-io inno-setup


    【解决方案1】:

    如何创建过滤输入文件向导页面项?

    为了选择文件,您应该使用单独的输入文件向导页面,您可以通过CreateInputFilePage 创建该页面。然后,TInputFileWizardPage 页面对象类的Add 方法包含AFilter 参数,您可以在其中指定可以通过其关联的文件打开对话框选择的文件的过滤器。在这个例子中,我们只允许用户选择 *.jpg 文件:

    [Setup]
    AppName=My Program
    AppVersion=1.5
    DefaultDirName={pf}\My Program
    
    [Code]
    var
      InputPage: TInputFileWizardPage;
    
    procedure InitializeWizard;
    begin
      // create the input file wizard page
      InputPage := CreateInputFilePage(wpWelcome, 'Caption', 'Description',
        'SubCaption');
      // and insert one item in which the user will be restricted to select
      // only *.jpg files
      InputPage.Add('Prompt', 'JPG files (*.jpg)|*.jpg', '.jpg');
    end;
    

    如何手动调用过滤后的文件打开对话框?

    如果该输入文件向导页面不适合您的设计并且您想自己制作,那么您需要GetOpenFileName 函数来显示打开文件对话框。甚至这个函数也包含一个参数,您可以在其中指定过滤器字符串。在这种情况下,它是 Filter 参数。在这个脚本示例中,如何使用 *.jpg 文件过滤器调用文件打开对话框:

    [Setup]
    AppName=My Program
    AppVersion=1.5
    DefaultDirName={pf}\My Program
    
    [Code]
    procedure InitializeWizard;
    var
      FileName: string;
    begin
      if GetOpenFileName('Prompt', FileName, 'C:\InitialDirectory',
        'JPG files (*.jpg)|*.jpg', '.jpg')
      then
        MsgBox(Format('Selected file: %s', [FileName]), mbInformation, MB_OK);
    end;
    

    如何构建过滤字符串?

    正如您在上面的代码中看到的,过滤器字符串由标题部分和过滤部分组成,由| 字符分隔。您还可以通过| 字符分隔每个过滤器字符串来指定多个过滤器,或者您可以通过; 分隔扩展名来为单个过滤器指定多个扩展名。

    所以,例如创建一个名为 JPG files 的过滤器,仅过滤您可以编写的 *.jpg 文件:

    JPG files|*.jpg
    

    要制作两个过滤器,假设一个用于 *.jpg 文件,一个用于您可以编写的 *.jpeg 文件:

    JPG files|*.jpg|JPEG files|*.jpeg
    

    最后,要为 *.jpg 和 *.jpeg 文件创建一个过滤器,您可以编写:

    JPEG files|*.jpg;*.jpeg
    

    有关详细信息,我建议您参考 Delphi 参考页面中的 TOpenDialog.Filter 属性。

    【讨论】:

    • 添加:如果 FileCopy(InputPage.Values[0], ExpandConstant('{userappdata}\Publisher\ProgramName\company_logo.jpg'), False) then ..... 这将采用他们从您上面显示的(很棒的)代码中选择的文件,然后进行文件复制。谢谢,工作完美。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多