Inno Setup - Проверьте, существует ли несколько папок
У меня есть пользовательская страница удаления, которая вызывается с этой строкой:
UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigsPage;
Теперь, это просто показывает страницу каждый раз, когда запускается деинсталлятор, но мне нужно, чтобы она отображалась только при наличии определенных папок (их 6). Я мог бы сделать if
заявление с кучей or
Да, но мне интересно, есть ли более аккуратный способ сделать это.
1 ответ
В общем, нет лучшего способа, чем звонить DirExists
для каждой папки:
if DirExists('C:\path1') or
DirExists('C:\path2') or
DirExists('C:\path3') then
begin
{ ... }
end;
Хотя при обработке набора файлов / папок желательно хранить их список в каком-либо контейнере (например, TStringList
или же array of string
), чтобы разрешить их (повторную) массовую обработку. У вас уже есть это (Dirs: TStringList
) из моего решения вашего другого вопроса.
var
Dirs: TStringList;
begin
Dirs := TStringList.Create();
Dirs.Add('C:\path1');
Dirs.Add('C:\path2');
Dirs.Add('C:\path2');
end;
function AnyDirExists(Dirs: TStringList): Boolean;
var
I: Integer;
begin
for I := 0 to Dirs.Count - 1 do
begin
if DirExists(Dirs[I]) then
begin
Result := True;
Exit;
end;
end;
Result := False;
end;
Но я знаю из вашего другого вопроса, что вы сопоставляете все пути с флажками. Следовательно, все, что вам нужно сделать, это проверить, есть ли флажок:
if CheckListBox.Items.Count > 0 then
begin
UninstallProgressForm.InnerNotebook.ActivePage := UninstallConfigssPage;
{ ... }
if UninstallProgressForm.ShowModal = mrCancel then Abort;
{ ... }
UninstallProgressForm.InnerNotebook.ActivePage := UninstallProgressForm.InstallingPage;
end;