在 TInputDirWizardPage 上浏览文件夹时生成的 Inno Setup 事件?

Inno Setup event that is generated when folder is browsed on TInputDirWizardPage?

我正在使用自定义 TInputDirWizardPage 为我的安装输入三个不同的目标文件夹。

当第一个文件夹改变时,我想自动改变第三个文件夹的路径。是否可以创建在第一个文件夹使用浏览按钮并选择特定文件夹时发生的事件?如果是这样,是否也可以通过编程方式更改第 3 个文件夹的路径?

您可以覆盖 TInputDirWizardPage.Buttons[0].OnClick 事件处理程序:

var
  DirPage: TInputDirWizardPage;
  PrevFirstButtonClick: TNotifyEvent;

procedure FirstButtonClick(Sender: TObject);
var
  PrevValue: string;
begin
  PrevValue := DirPage.Values[0];

  { Call remembered handler }
  PrevFirstButtonClick(Sender);

  if DirPage.Values[0] <> PrevValue then
  begin
    { And do whatever you want to do when the value changes }
    MsgBox(Format('Value changed from "%s" to "%s".', [PrevValue, DirPage.Values[0]]),
      mbInformation, MB_OK);
  end;
end;

procedure InitializeWizard();
begin
  DirPage := CreateInputDirPage(
    wpSelectDir, SetupMessage(msgWizardSelectDir), '', '', False, '');
  { add directory input page items }
  DirPage.Add('Path to Apache:');
  DirPage.Add('Path to PHP:');
  DirPage.Add('Path to Server Files:');

  { Remember the standard handler }
  PrevFirstButtonClick := DirPage.Buttons[0].OnClick;
  { And assign our override } 
  DirPage.Buttons[0].OnClick := @FirstButtonClick;
end;

代码需要 Inno Setup 的 Unicode 版本。奇怪的是调用DirPage.Buttons[0].OnClick在Ansi版本中不起作用。