Inno Setup цикл от А до Я

Я пытаюсь написать функцию, которая будет проверять наличие определенного каталога на каждом диске по очереди, сохранять путь, где он найден, как переменную и возвращать true, если он существует, и false в противном случае:

function IsDirPresent(): Boolean;
var
  chrDriveLetter: Char;
  strMyDir: String;
begin
  for chrDriveLetter := 'A' to 'Z' do
    begin
      if DirExists(chrDriveLetter + ':\MyDir') then
        strMyDirPath := chrDriveLetter + ':\MyDir'
    end;
  if strMyDirPath <> '' then
    Result := True;
end;

При компиляции я получаю ошибку несоответствия типов в моей строке цикла. Я изо всех сил пытаюсь выяснить, что не так с циклом, и не смог найти никакой информации о том, как правильно создать цикл от A до Z в Inno Setup.

1 ответ

Решение

Ваш цикл действителен для языка Паскаль, потому что Char тип является порядковым, и его константы диапазона имеют одинаковый тип, так что я предполагаю, что это конкретное ограничение нотации языка Pascal Script. Я не знаю, есть ли какой-то синтаксический обход, или если Char Тип даже разрешено использовать для переменной управления цикла.

Я могу только предоставить вам обходной путь, работающий с переменной управления циклами целочисленного типа. Он использует Ord а также Chr функции. Первый возвращает порядковый номер символа, последний ASCII-символ из порядкового значения:

var
  C: Char;
  I: Integer;
begin
  for I := Ord('A') to Ord('Z') do
  begin
    C := Chr(I);
    ...
  end;
end;
Другие вопросы по тегам