jtcramer
jtcramer

Reputation: 107

Inno Setup/Pascal Scripting - Casting Returning Nil

I'm trying to write some Pascal script for a installer I'm making with Inno Setup Compiler 5.5.1. I'm currently trying to add a custom wizard page that executes a command, taking user input from text fields (TEdit components). I defined the NextButtonClick function, and it checks that the Page ID is the custom page I defined and attempts to retrieve the user input from the field. When I get it from the components of the Page's Surface property, it gets returned as a TComponent. To get the next I need to cast it to a TEdit, so I tried casting it and it seems to be returning nil. Besides the scripting for Inno I've been doing for the past few days, I don't have much experience with Pascal, so I could possibly be doing something wrong. But I'd appreciate the help!

Here's the chunk of code giving me an issue for reference (with debugging lines left in):

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;

Upvotes: 3

Views: 3449

Answers (1)

TLama
TLama

Reputation: 76693

I can't simulate your problem. I've used this minimalistic code:

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

Upvotes: 1

Related Questions