Проверка данных на пользовательской странице при нажатии кнопки «Далее» в Inno Setup - PullRequest
2 голосов
/ 22 мая 2019

Мне удалось получить базовый сценарий, работающий для отображения мастера (используя CreateInputFilePage), чтобы пользователь мог определить местоположение файла, которое я использую для обновления некоторых настроек в файле XML. Однако я хотел бы выполнить некоторую базовую проверку ввода в выбранный файл, а не просто принимать то, что предоставляет пользователь. Например, отображение окна сообщения, если пользователь пытается нажать ** Далее "*, когда содержимое недопустимо. Я не совсем уверен, как обрабатывать события, возникающие в мастере, и как применять любые виды правил проверки данных, прежде чем продолжить к следующей задаче. В настоящее время я определил простую InitializeWizard процедуру.

[Code]
var
  Page: TInputFileWizardPage;

procedure InitializeWizard;
begin
  { wizard }
  Page := CreateInputFilePage(
    wpWelcome, 'Select dFile Location', 'Where is dFile located?',
    'Select where dFile.dba file is located, then click Next.' );

  { Add item (with an empty caption) }
  Page.Add('location of dFile.dba', '*.dba|*.*', '.dba' );
end;

Затем я восстанавливаю имя и местоположение файла при срабатывании события CurStepChanged и использую его для обновления некоторых настроек в файле XML

procedure CurStepChanged(CurStep: TSetupStep);
var
  dFull: String;
  dPath: String;
  dName: String;
begin
  if (CurStep = ssPostInstall) then
  begin
    { recover dFile location }
    dFull:= Page.Values[0];

    dPath := ExtractFilePath( dFull );
    dName := ExtractFileName( dFull );

    { write dFile location and name to settings.xml }
    UpdateSettingsXML( dPath, 'dFileDirectory' );
    UpdateSettingsXML( dName, 'dFileName' );
  end;
end;

1 Ответ

1 голос
/ 22 мая 2019

Вы можете использовать OnNextButtonClick событие по вашему выбору TWizardPage для проверки:

function FileIsValid(Path: string): Boolean;
begin
  Result := { Your validation };
end;

var
  Page: TInputFileWizardPage;

function FilePageNextButtonClick(Sender: TWizardPage): Boolean;
begin
  Result := True;
  if not FileIsValid(Page.Values[0]) then
  begin
    MsgBox('File is not valid', mbError, MB_OK);
    Result := False;
  end;
end;

procedure InitializeWizard;
begin
  Page := CreateInputFilePage(...);

  Page.Add(...);

  Page.OnNextButtonClick := @FilePageNextButtonClick;
end;

Альтернативный подход см. Inno SetupОтключить кнопку «Далее», если ввод неверен .

...