Inno Setup - 从另一个对话框打开目录浏览对话框而不隐藏它

2024-01-19

我正在使用这段代码:Inno Setup - 如何创建自定义表单以允许我找到要解压缩的文件? https://stackoverflow.com/questions/44145316/inno-setup-how-to-create-a-custom-form-that-allows-me-to-locate-the-files-to-d/44214348?noredirect=1#comment75503426_44214348如何从另一个对话框打开目录浏览对话框而不隐藏它?


打开的对话框BrowseForFolder https://jrsoftware.org/ishelp/index.php?topic=isxfunc_browseforfolder不幸的是,函数被实现为具有WizardForm作为业主窗口。这有效地将所有其他打开的对话框移到了后面WizardForm,同时显示“浏览”对话框(请注意,这些对话框并未隐藏,它们只是被WizardForm).


你可以做什么:

  • 重新实施BrowseForFolder从头开始。这是一项艰巨的任务。

  • 您可以使用CreateInputDirPage https://jrsoftware.org/ishelp/index.php?topic=isxfunc_createinputdirpage而不是你的解决方案,我在你的一开始就建议你上一个问题 https://stackoverflow.com/q/44145316/850848.
    有关示例,请参见Inno Setup 如何在浏览对话框中显示网络? https://stackoverflow.com/q/39096540/850848
    尽管我必须承认,现在我明白了,您需要允许不同的文件夹中存在不同的文件,但这可能不再是最好的解决方案。

  • 作为解决方法,您可以通过以下方式滥用不同的浏览对话框实现:,这不会遇到问题BrowseForFolder:

    var
      FakePage: TInputDirWizardPage;
    
    procedure BrowseForFolderEx(var Directory: String);
    begin
      FakePage.Values[0] := Directory;
      FakePage.Buttons[0].OnClick(FakePage.Buttons[0]);
      Directory := FakePage.Values[0];
    end;
    
    procedure InitializeWizard();
    var
      NewFolderName: string;
    begin
      NewFolderName := SetupMessage(msgButtonNewFolder);
      FakePage := CreateInputDirPage(wpWelcome, '', '', '', False, NewFolderName);
      FakePage.Add('');
    end;
    
    function ShouldSkipPage(PageID: Integer): Boolean;
    begin
      Result := (PageID = FakePage.ID);
    end;
    

    Use BrowseForFolderEx代替BrowseForFolder.

    procedure SelectFileBrowseButtonClick(Sender: TObject);
    var
      Dir: string;
    begin
      Dir := GetSelectFilePath;
      BrowseForFolderEx(Dir);
      SelectFilePathEdit.Text := AddBackslash(Dir);
    end;
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Inno Setup - 从另一个对话框打开目录浏览对话框而不隐藏它 的相关文章

随机推荐