3

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;
4

1 に答える 1

1

私はあなたの問題をシミュレートすることはできません。私はこの最小限のコードを使用しました:

[Code]
var
  CustomPageID: Integer;

procedure InitializeWizard;
var
  EditBox: TEdit;
  CustomPage: TWizardPage;
begin
  CustomPage := CreateCustomPage(wpWelcome, '', '');
  CustomPageID := CustomPage.ID;
  EditBox := TEdit.Create(WizardForm);
  EditBox.Parent := CustomPage.Surface;
end;

procedure CurPageChanged(CurPageID: Integer);
var
  EditBox: TEdit;
  Component: TComponent;
  CustomPage: TWizardPage;
begin
  if (CurPageID = CustomPageID) then
  begin
    CustomPage := PageFromID(CustomPageID);
    Component := CustomPage.Surface.Controls[0];
    if (Component is TEdit) then
    begin
      MsgBox('Controls[0] is assigned and is TEdit', mbInformation, MB_OK);
      EditBox := TEdit(Component);
      EditBox.Text := 'Hi, I''m just a modified edit text!';
    end;
  end;
end;
于 2012-07-27T13:53:43.483 に答える