2017-05-29 76 views

回答

1

通过BrowseForFolder功能打开的对话框不幸的是实现为具有WizardForm作为所有者的窗口。当显示“浏览”对话框时(注意对话框没有隐藏,它们只是被WizardForm遮住),这有效地将所有其他打开的对话框移动到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