Reputation: 25
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?
Upvotes: 1
Views: 3159
Reputation: 202118
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;
Upvotes: 1
Reputation: 5472
Did you check Install Designer for Inno Setup?
That is a new tool that helps you design Inno Setup dialog pages easily without any scripting (WYSIWIG editor with Drag & Drop).
With is it is much faster to create any page in Inno Setup than writing code manually.
(I am developer of that tool and if you have any issues feel free to post any questions here on SO).
Upvotes: 0