Inno Setup Compiler 5.5.1 で作成しているインストーラー用の Pascal スクリプトを書き込もうとしています。現在、テキスト フィールド (TEdit コンポーネント) からユーザー入力を受け取り、コマンドを実行するカスタム ウィザード ページを追加しようとしています。NextButtonClick 関数を定義し、ページ ID が定義したカスタム ページであることを確認し、フィールドからユーザー入力を取得しようとします。ページの Surface プロパティのコンポーネントから取得すると、TComponent として返されます。次を取得するには、TEdit にキャストする必要があるため、キャストしてみましたが、nil が返されているようです。ここ数日間行ってきた Inno のスクリプト作成以外に、私は Pascal の経験があまりないので、何か間違ったことをしている可能性があります。しかし、私は助けていただければ幸いです!
これは、参照用の問題を提供するコードのチャンクです(デバッグ行が残っています):
function NextButtonClick(CurPageID: Integer): Boolean;
var
ResultCode: Integer;
CurrPage: TWizardPage;
Server : TComponent;
Server2: TEdit;
SurfacePage : TNewNotebookPage;
ServerStr : String;
begin
if CurPageID = 100 then
begin
CurrPage := PageFromID(100);
SurfacePage := CurrPage.Surface;
Server := SurfacePage.Controls[0];
Server2 := TEdit(Server); // RETURNS NIL HERE
if Server2 = nil then
MsgBox('', mbInformation, MB_OK);
ServerStr := Server2.Text;
MsgBox(ServerStr, mbInformation, MB_OK);
//ShellExec('', 'sqlcmd', '-S ' + ServerStr + ' -Q ":r setMemUsage.sql"', ExpandConstant('{app}') + '\sql', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
Result := True;
end;