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

Inno Setup - Opening directory browse dialog from another dialog without hiding it

我正在使用此代码:如何从另一个对话框打开目录浏览对话框而不隐藏它?

不幸的是,BrowseForFolder 函数打开的对话框实现了 WizardForm 作为所有者 window。这有效地将所有其他打开的对话框移到 WizardForm 后面,而显示 "browse" 对话框(请注意,对话框没有隐藏,它们只是被 WizardForm 遮挡)。


你能做什么:

  • 从头开始重新实施 BrowseForFolder。这是一项艰巨的任务。
  • 您可以使用 CreateInputDirPage instead of your solution, what .
    有关示例,请参阅
    尽管我必须承认,现在我明白了,您需要允许不同文件夹中的不同文件,但这可能不再是最佳解决方案。
  • 作为变通方法,您可以滥用 TInputDirWizardPage 的不同浏览对话框实现,而不会遇到 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;
    

    使用 BrowseForFolderEx 代替 BrowseForFolder

    procedure SelectFileBrowseButtonClick(Sender: TObject);
    var
      Dir: string;
    begin
      Dir := GetSelectFilePath;
      BrowseForFolderEx(Dir);
      SelectFilePathEdit.Text := AddBackslash(Dir);
    end;