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

时间:2017-05-29 17:27:04

标签: inno-setup

我正在使用此代码:Inno Setup - How to create a custom form that allows me to locate the files to decompress?。如何从另一个对话框打开目录浏览对话框而不隐藏它?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

遗憾的是,BrowseForFolder函数打开的对话框实现了WizardForm作为所有者窗口。这有效地移动了WizardForm后面的所有其他打开的对话框,而#34;浏览"对话框正在显示(请注意,对话框未隐藏,它们只是被WizardForm遮挡了。)

你能做什么:

  • 从头开始重新实施BrowseForFolder。这是一项艰巨的任务。
  • 您可以使用CreateInputDirPage代替您的解决方案I have suggested you at the very beginning 有关示例,请参阅Inno Setup How to show network on a browse dialog?
    虽然我必须承认,现在据我所知,你需要在不同的文件夹中允许不同的文件,这可能不再是最好的解决方案了。
  • 作为一种变通方法,您可以滥用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();
    begin
      FakePage :=
        CreateInputDirPage(wpWelcome, '', '', '', False, SetupMessage(msgButtonNewFolder));
      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;
    

    enter image description here