2016-08-05 5 views
1

カスタム 'CreateInputOptionPage'を作成するためのこのサポートページでは、それらを変数に割り当てるだけでページの値を保存することをお勧めします。しかし、この課題がいつ起こるべきかは明らかではありません。グローバル変数を使用せずにカスタムウィザードページから値を読み取る

私が知る限り、ページを作成するときにこの権利を割り当てると、デフォルト値が取得されます。これは、ページが作成されるときに、ユーザーがまだ「入力クエリ」を入力していないので意味があります。

したがって、私は、ページの変数(Page.Values[0])にアクセスするために必要な、それを行うためにはfunction NextButtonClick(CurPageID: Integer): Boolean;

を使用して、「次へ」ボタンをクリックする変数にページから値を割り当てるために推論しましたNextButtonClickの機能です。 Pageは別の関数で定義されているため、これらの値にアクセスしてPageをグローバル変数にする唯一の方法はありますか?それは私がやるべきことですが、そこにいる誰かがグローバル変数に代わるものを持っているのだろうかと思っていました。

これまでのコードのスタブ。

; Script generated by the Inno Setup Script Wizard. 
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 

#define MyAppName "O" 
#define MyAppVersion "0.0" 
#define MyAppPublisher "O." 
#define MyAppURL "http://www.o.com/" 

[Setup] 
; NOTE: The value of AppId uniquely identifies this application. 
; Do not use the same AppId value in installers for other applications. 
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) 
AppId={{ED5F31B8-32DD-4175-833A-C6D7CBD90DD9} 
AppName={#MyAppName} 
AppVersion={#MyAppVersion} 
DefaultDirName={sd}\{#MyAppName} 
AllowNoIcons=yes 
OutputDir={desktop} 
OutputBaseFilename=dummy 
Compression=lzma 
SolidCompression=yes 

[code] 

var 
    Page: TInputOptionWizardPage; 
    InstallationTypeIsClient: boolean; 

procedure InitializeWizard(); 
begin 
    Page := CreateInputOptionPage(wpWelcome,'Installation Type', 'Select Installation Type', 'No really, do some selecting', True, False) 
    Page.Add('Server Install'); 
    Page.Add('Client Install'); 
    Page.Values[1] := True; 
end; 

function NextButtonClick(CurPageID: Integer): Boolean; 
begin 
    if CurPageID=100 then 
    begin 
    InstallationTypeIsClient := Page.Values[1]; 
    MsgBox('InstallationTypeIsClient value is ' + Format('%d', [InstallationTypeIsClient]), mbInformation, MB_OK); 
    end; 
    Result := True; 
end; 
+0

グローバル変数にはどのような問題がありますか? –

+0

なし、私は単なる素人プログラマーであり、グローバル変数が汚いと言われています。 –

+0

はい、アプリケーション全体を開発しているときに、スタンドアロンコードで汚れています。この場合、既存のアプリケーションのイベントフックを実装するだけなので、他に選択肢はありません。 –

答えて

1

グローバル変数を使用してカスタムページへの参照を格納することは、正しい方法であり、最も簡単です。

本当に別の変数にユーザー値を格納する必要があるかどうかは疑問ですが、必要なときにカスタムページから値を読み取るだけです。


唯一の他の方法は、再帰的にWizardFormの子コントロールにカスタムページを検索することです。コードがたくさんあり、非常に非効率的です。

再帰コンポーネントiteractionの例については、my answer to Inno Setup: OnHover eventを参照してください。

関連する問題