I'm working with an Inno Setup. I'm a beginner and I'm not so familiar with it.
I have two pages in my standard installer that are one after the other and whose elements I need to use (RepositoryPage
and ServicePage
(last page)).
RepositoryPage:
procedure CreateRepositoryPage;
var
i : Integer;
SqlNamesArray: TArrayOfString;
LblMonitorService, LblUsername, LblPassword : TNewStaticText;
begin
RepositoryPage := CreateInputQueryPage(wpSelectComponents, 'Configuration', '' , '');
{ Windows username. RepositoryPage.Edits[2] }
RepositoryPage.Add('', False);
{ Windows password. RepositoryPage.Edits[3] }
RepositoryPage.Add('', True);
LblMonitorService := TNewStaticText.Create(RepositoryPage);
with LblMonitorService do
begin
Parent := RepositoryPage.Surface;
Left := 0;
Width := RepositoryPage.SurfaceWidth;
Height := ScaleY(17);
AutoSize := False;
Caption := 'Dashboard service';
end;
LblUsername := TNewStaticText.Create(RepositoryPage);
with LblUsername do
begin
Parent := RepositoryPage.Surface;
Left := 0;
Top := LblMonitorService.Top + LblMonitorService.Height + ScaleY(17);
Width := RepositoryPage.SurfaceWidth;
Height := ScaleY(17);
AutoSize := False;
Caption := 'Windows account username (Domain\Username):';
end;
RepositoryPage.Edits[0].Top := LblUsername.Top + LblUsername.Height;
LblPassword := TNewStaticText.Create(RepositoryPage);
with LblPassword do
begin
Parent := RepositoryPage.Surface;
Left := 0;
Top := RepositoryPage.Edits[0].Top + RepositoryPage.Edits[0].Height + ScaleY(15);
Width := RepositoryPage.SurfaceWidth;
Height := ScaleY(17);
AutoSize := False;
Caption := 'Windows account password:';
end;
RepositoryPage.Edits[1].Top := LblPassword.Top + LblPassword.Height;
LogOnAsServiceCheckBox := TNewCheckBox.Create(RepositoryPage);
with LogOnAsServiceCheckBox do
begin
Parent := RepositoryPage.Surface;
Top := RepositoryPage.Edits[1].Top + RepositoryPage.Edits[1].Height + ScaleY(16);
Left := 0;
Width := RepositoryPage.SurfaceWidth;
Height := ScaleY(17);
Caption := 'Add "Log on as a service" permission';
Checked := True;
end;
RepositoryPage.Values[0] := ExpandConstant('{computername}') + '\' + ExpandConstant('{username}');
RepositoryPage.Values[1] := '';
{ Change text color for textboxes }
RepositoryPage.Edits[1].Font.Color := $ffffff;
end;
ServicePage:
[Code]
procedure CreateServicePage;
var
SSLNameArray : TArrayOfString;
i : Integer;
begin
ServicePage := CreateInputQueryPage(RepositoryPage.ID, 'Web server configuration', '' , '');
{ Username. ServicePage.Edits[0] }
ServicePage.Add('', False);
{ Password. ServicePage.Edits[1] }
ServicePage.Add('', True);
{ Confirm Password. ServicePage.Edits[2] }
ServicePage.Add('', True);
{ Http server configuration }
{ Http checkbox }
HttpServerOptionCheckBox := TNewCheckBox.Create(ServicePage);
with HttpServerOptionCheckBox do
begin
Parent := ServicePage.Surface;
Top := ScaleY(0);
Left := 0;
Width := ScaleX(350);
Caption := 'HTTP web server';
Checked := True;
OnClick := @OnHttpServerOptionCheckBox;
end;
{ Label for Http port }
LblHttpPort := TNewStaticText.Create(ServicePage);
with LblHttpPort do
begin
Parent := ServicePage.Surface;
Left := ScaleX(15);
Top := HttpServerOptionCheckBox.Top + HttpServerOptionCheckBox.Height + ScaleY(5);
Width := ServicePage.SurfaceWidth;
AutoSize := False;
TabOrder := 1;
Caption := 'Server port:';
end;
{ Edit for Http port }
HttpPortTextBox := TNewEdit.Create(ServicePage);
with HttpPortTextBox do
begin
Parent := ServicePage.Surface;
Top := LblHttpPort.Top + LblHttpPort.Height + ScaleY(2);
Left := ScaleX(15);
Width := ScaleX(60);
Text := '5019';
Font.Color := $ffffff;
end;
{ Test button for testing Http port }
TestHttpPortButton := TNewButton.Create(ServicePage);
with TestHttpPortButton do
begin
Parent := ServicePage.Surface;
Top := HttpPortTextBox.Top - ScaleY(2);
Left := HttpPortTextBox.Width + ScaleX(20);
Width := ScaleX(75);
Height := ScaleY(23);
OnClick := @TestHttpPortButtonOnClick;
Caption := 'Test';
end;
{ Checkbox for Http port firewall exception }
CreateAddFirewallexceptionHttpCheckBox := TNewCheckBox.Create(ServicePage);
with CreateAddFirewallexceptionHttpCheckBox do
begin
Parent := ServicePage.Surface;
Top := HttpPortTextBox.Top + HttpPortTextBox.Height + ScaleY(5);
Left := ScaleX(15);
Width := ScaleX(350);
Height := ScaleY(17);
Caption := 'Create a firewall exception for the specified port';
Checked := True;
end;
{ //////////////////////////////////////////////////////////////////////////////////// }
{ Https server checkbox }
HttpsServerOptionCheckBox := TNewCheckBox.Create(ServicePage);
with HttpsServerOptionCheckBox do
begin
Parent := ServicePage.Surface;
Top := CreateAddFirewallexceptionHttpCheckBox.Top + CreateAddFirewallexceptionHttpCheckBox.Height + ScaleY(20);
Left := 0;
Width := ScaleX(120);
Height := ScaleY(17);
Caption := 'HTTPS web server';
Checked := False;
OnClick := @OnHttpsServerOptionCheckBox;
end;
{ Https server port label }
LblHttpsPort := TNewStaticText.Create(ServicePage);
with LblHttpsPort do
begin
Parent := ServicePage.Surface;
Left := ScaleX(15);
Top := HttpsServerOptionCheckBox.Top + HttpsServerOptionCheckBox.Height + ScaleY(2);
Width := ScaleX(60);
Height := ScaleY(17);
AutoSize := False;
Caption := 'Server port: ';
end;
{ Https server port edit }
HttpsPortTextBox := TNewEdit.Create(ServicePage);
with HttpsPortTextBox do
begin
Parent := ServicePage.Surface;
Top := LblHttpsPort.Top + LblHttpsPort.Height;
Left := LblHttpsPort.Left;
Width := ScaleX(60);
Height := ScaleY(17);
Text := '4443';
Font.Color := $ffffff;
end;
{ Https server site name label }
LblSiteName := TNewStaticText.Create(ServicePage);
with LblSiteName do
begin
Parent := ServicePage.Surface;
Left := HttpsPortTextBox.Left + HttpsPortTextBox.Width + ScaleX(10);
Top := HttpsServerOptionCheckBox.Top + HttpsServerOptionCheckBox.Height + ScaleY(2);
Width := ScaleX(98);
Height := ScaleY(17);
AutoSize := False;
Caption := 'Host name or IP:';
end;
{ Https server site name edit }
HttpsSiteNameTextBox := TNewEdit.Create(ServicePage);
with HttpsSiteNameTextBox do
begin
Parent := ServicePage.Surface;
Top := LblSiteName.Top + LblSiteName.Height;
Left := LblSiteName.Left;
Width := ScaleX(140);
Height := ScaleY(17);
Text := '';
Font.Color := $ffffff;
end;
LblSSLName := TNewStaticText.Create(ServicePage);
with LblSSLName do
begin
Parent := ServicePage.Surface;
Left := HttpsSiteNameTextBox.Left + HttpsSiteNameTextBox.Width + ScaleX(10) ;
Top := HttpsServerOptionCheckBox.Top + HttpsServerOptionCheckBox.Height + ScaleY(2);
Width := ScaleX(50);
Height := ScaleY(17);
AutoSize := False;
Caption := 'SSL: ';
end;
SSLComboBox := TNewComboBox.Create(RepositoryPage);
with SSLComboBox do
begin
Parent := ServicePage.Surface;
Style := csDropDown;
Left := LblSSLName.Left;
Top := LblSSLName.Top + LblSSLName.Height;
Width := ScaleX(150);
Height := ScaleY(17);
ItemIndex := 0;
end;
if not (IsAppUpgrade or IsSameVersion) then begin
SSLNameArray := GetSSLCertificates();
for i:= 0 to GetArrayLength(SSLNameArray)-1 do begin
SSLComboBox.Items.Add(SSLNameArray[i])
end;
end;
{ Test button for testing Https port }
TestHttpsPortButton := TNewButton.Create(ServicePage);
with TestHttpsPortButton do
begin
Parent := ServicePage.Surface;
Top := SSLComboBox.Top - ScaleY(2);
Left := SSLComboBox.Left + SSLComboBox.Width + ScaleX(5);
Width := ScaleX(75);
Height := ScaleY(23);
OnClick := @TestHttpsPortButtonOnClick;
Caption := 'Test';
end;
CreateAddFirewallexceptionHttpsCheckBox := TNewCheckBox.Create(ServicePage);
with CreateAddFirewallexceptionHttpsCheckBox do
begin
Parent := ServicePage.Surface;
Top := HttpsSiteNameTextBox.Top + HttpsSiteNameTextBox.Height + ScaleY(5);
Left := ScaleX(15);
Width := ScaleX(350);
Height := ScaleY(17);
Caption := 'Create a firewall exception for the specified port';
Checked := True;
end;
{ User managment }
LblServicePageUser := TNewStaticText.Create(ServicePage);
with LblServicePageUser do
begin
Parent := ServicePage.Surface;
Top := CreateAddFirewallexceptionHttpsCheckBox.Top + CreateAddFirewallexceptionHttpsCheckBox.Height + ScaleY(15);
Left := 0;
Width := ServicePage.SurfaceWidth;
Height := ScaleY(0);
AutoSize := False;
Caption := 'Application user';
end;
LblServicePageUsername := TNewStaticText.Create(ServicePage);
with LblServicePageUsername do
begin
Parent := ServicePage.Surface;
Left := 0;
Top := LblServicePageUser.Top + LblServicePageUser.Height + ScaleY(5);
Width := ServicePage.SurfaceWidth;
Height := ScaleY(17);
AutoSize := False;
Caption := 'Application username: ';
end;
ServicePage.Values[0] := strMonitorUser;
ServicePage.Edits[0].Top := LblServicePageUsername.Top + LblServicePageUsername.Height;
LblServicePagePassword := TNewStaticText.Create(ServicePage);
with LblServicePagePassword do
begin
Parent := ServicePage.Surface;
Left := 0;
Top := ServicePage.Edits[0].Top + ServicePage.Edits[0].Height + ScaleY(5);
Width := ServicePage.SurfaceWidth;
Height := ScaleY(17);
AutoSize := False;
Caption := 'New password: ';
end;
ServicePage.Edits[1].Top := LblServicePagePassword.Top + LblServicePagePassword.Height;
LblServicePageConfirmPassword := TNewStaticText.Create(ServicePage);
with LblServicePageConfirmPassword do
begin
Parent := ServicePage.Surface;
Left := 0;
Top := ServicePage.Edits[1].Top + ServicePage.Edits[1].Height + ScaleY(2);
Width := ServicePage.SurfaceWidth;
Height := ScaleY(17);
AutoSize := False;
Caption := 'Confirm password: ';
end;
ServicePage.Edits[2].Top := LblServicePageConfirmPassword.Top + LblServicePageConfirmPassword.Height;
EnableServicePageElements;
{ Change text color for textboxes }
ServicePage.Edits[0].Font.Color := $ffffff;
ServicePage.Edits[1].Font.Color := $ffffff;
ServicePage.Edits[2].Font.Color := $ffffff;
OnHttpServerOptionCheckBox( HttpServerOptionCheckBox);
OnHttpsServerOptionCheckBox( HttpsServerOptionCheckBox);
end;
ConfigForm
contains all elements from ServicePage
and RepositoryPage
, it is only used to create a config file (that will be used later) and is also separate from the installer (have not pages before and after).
How can I make a custom ConfigForm
shown as an image below?
Check the example of using CreateCustomForm
function in CodeClasses.iss
example file:
procedure FormButtonOnClick(Sender: TObject);
var
Form: TSetupForm;
Edit: TNewEdit;
OKButton, CancelButton: TNewButton;
begin
Form := CreateCustomForm();
try
Form.ClientWidth := ScaleX(256);
Form.ClientHeight := ScaleY(128);
Form.Caption := 'TSetupForm';
Edit := TNewEdit.Create(Form);
Edit.Top := ScaleY(10);
Edit.Left := ScaleX(10);
Edit.Width := Form.ClientWidth - ScaleX(2 * 10);
Edit.Height := ScaleY(23);
Edit.Anchors := [akLeft, akTop, akRight];
Edit.Text := 'TNewEdit';
Edit.Parent := Form;
OKButton := TNewButton.Create(Form);
OKButton.Parent := Form;
OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
OKButton.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton.Width := ScaleX(75);
OKButton.Height := ScaleY(23);
OKButton.Anchors := [akRight, akBottom]
OKButton.Caption := 'OK';
OKButton.ModalResult := mrOk;
OKButton.Default := True;
CancelButton := TNewButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Anchors := [akRight, akBottom]
CancelButton.Caption := 'Cancel';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
Form.ActiveControl := Edit;
{ Keep the form from sizing vertically since we don't have any controls which can size vertically }
Form.KeepSizeY := True;
{ Center on WizardForm. Without this call it will still automatically center, but on the screen }
Form.FlipSizeAndCenterIfNeeded(True, WizardForm, False);
if Form.ShowModal() = mrOk then
MsgBox('You clicked OK.', mbInformation, MB_OK);
finally
Form.Free();
end;
end;