5

セットアップでは、ラジオ ボタンを使用して 32 ビット バージョンまたは 64 ビット バージョンのいずれかをインストールするオプションをユーザーに提供します。

次に、「_32」または「_64」を AppID に追加します。

スクリプト化された定数を使用して AppID を変更できることはわかっていますが、セットアップの開始中に必要な関数が呼び出されます。しかし、この時点ではまだラジオ ボタンが存在しないため、"Could not call proc" というエラーが表示されます。

Inno Setup のヘルプを調べたところ、インストール プロセスが開始される前であればいつでも AppID を変更できることがわかりました (正しく理解できていれば)。

では、どうすればこれを行うことができますか?

あなたの答えを楽しみにしています!

4

1 に答える 1

10

特定のディレクティブ値の一部の{code:...}関数は複数回呼び出され、これAppIdはその 1 つです。より具体的には、2回呼び出されます。ウィザード フォームが作成される前に 1 回、インストールが開始される前に 1 回。できることは、値を取得しようとしているチェックボックスが存在するかどうかを確認することだけです。Assigned次のように簡単に尋ねることができます。

[Setup]
AppId={code:GetAppID}
...

[Code]
var  
  Ver32RadioButton: TNewRadioButton;
  Ver64RadioButton: TNewRadioButton;

function GetAppID(const Value: string): string;
var
  AppID: string;
begin
  // check by using Assigned function, if the component you're trying to get a
  // value from exists; the Assigned will return False for the first time when
  // the GetAppID function will be called since even WizardForm not yet exists
  if Assigned(Ver32RadioButton) then
  begin
    AppID := 'FDFD4A34-4A4C-4795-9B0E-04E5AB0C374D';
    if Ver32RadioButton.Checked then
      Result := AppID + '_32'
    else
      Result := AppID + '_64';
  end;
end;

procedure InitializeWizard;
var
  VerPage: TWizardPage;
begin
  VerPage := CreateCustomPage(wpWelcome, 'Caption', 'Description');
  Ver32RadioButton := TNewRadioButton.Create(WizardForm);
  Ver32RadioButton.Parent := VerPage.Surface;
  Ver32RadioButton.Checked := True;
  Ver32RadioButton.Caption := 'Install 32-bit version';
  Ver64RadioButton := TNewRadioButton.Create(WizardForm);
  Ver64RadioButton.Parent := VerPage.Surface;
  Ver64RadioButton.Top := Ver32RadioButton.Top + Ver32RadioButton.Height + 4;
  Ver64RadioButton.Caption := 'Install 64-bit version';
end;
于 2013-04-15T00:12:23.297 に答える