123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- [Setup]
- AppName=My Program
- AppVersion=1.5
- WizardStyle=modern
- DisableWelcomePage=no
- DefaultDirName={autopf}\My Program
- DisableProgramGroupPage=yes
- UninstallDisplayIcon={app}\MyProg.exe
- OutputDir=userdocs:Inno Setup Examples Output
- PrivilegesRequired=lowest
- [Files]
- Source: "MyProg.exe"
- Source: "MyProg.chm"
- Source: "Readme.txt"
- [Registry]
- Root: HKA
- Root: HKA
- Root: HKA
- Root: HKA
- Root: HKA
- [Dirs]
- Name: {code:GetDataDir}
- [Code]
- var
- UserPage: TInputQueryWizardPage
- UsagePage: TInputOptionWizardPage
- LightMsgPage: TOutputMsgWizardPage
- KeyPage: TInputQueryWizardPage
- ProgressPage: TOutputProgressWizardPage
- DataDirPage: TInputDirWizardPage
-
- procedure InitializeWizard
- begin
- { Create the pages }
-
- UserPage := CreateInputQueryPage(wpWelcome,
- 'Personal Information', 'Who are you?',
- 'Please specify your name and the company for whom you work, then click Next.')
- UserPage.Add('Name:', False)
- UserPage.Add('Company:', False)
- UsagePage := CreateInputOptionPage(UserPage.ID,
- 'Personal Information', 'How will you use My Program?',
- 'Please specify how you would like to use My Program, then click Next.',
- True, False)
- UsagePage.Add('Light mode (no ads, limited functionality)')
- UsagePage.Add('Sponsored mode (with ads, full functionality)')
- UsagePage.Add('Paid mode (no ads, full functionality)')
- LightMsgPage := CreateOutputMsgPage(UsagePage.ID,
- 'Personal Information', 'How will you use My Program?',
- 'Note: to enjoy all features My Program can offer and to support its development, ' +
- 'you can switch to sponsored or paid mode at any time by selecting ''Usage Mode'' ' +
- 'in the ''Help'' menu of My Program after the installation has completed.'#13#13 +
- 'Click Back if you want to change your usage mode setting now, or click Next to ' +
- 'continue with the installation.')
- KeyPage := CreateInputQueryPage(UsagePage.ID,
- 'Personal Information', 'What''s your registration key?',
- 'Please specify your registration key and click Next to continue. If you don''t ' +
- 'have a valid registration key, click Back to choose a different usage mode.')
- KeyPage.Add('Registration key:', False)
- ProgressPage := CreateOutputProgressPage('Personal Information',
- 'What''s your registration key?')
- DataDirPage := CreateInputDirPage(wpSelectDir,
- 'Select Personal Data Directory', 'Where should personal data files be installed?',
- 'Select the folder in which Setup should install personal data files, then click Next.',
- False, '')
- DataDirPage.Add('')
- { Set default values, using settings that were stored last time if possible }
- UserPage.Values[0] := GetPreviousData('Name', ExpandConstant('{sysuserinfoname}'))
- UserPage.Values[1] := GetPreviousData('Company', ExpandConstant('{sysuserinfoorg}'))
- case GetPreviousData('UsageMode', '') of
- 'light': UsagePage.SelectedValueIndex := 0
- 'sponsored': UsagePage.SelectedValueIndex := 1
- 'paid': UsagePage.SelectedValueIndex := 2
- else
- UsagePage.SelectedValueIndex := 1
- end
- DataDirPage.Values[0] := GetPreviousData('DataDir', '')
- end
- procedure RegisterPreviousData(PreviousDataKey: Integer)
- var
- UsageMode: String
- begin
- { Store the settings so we can restore them next time }
- SetPreviousData(PreviousDataKey, 'Name', UserPage.Values[0])
- SetPreviousData(PreviousDataKey, 'Company', UserPage.Values[1])
- case UsagePage.SelectedValueIndex of
- 0: UsageMode := 'light'
- 1: UsageMode := 'sponsored'
- 2: UsageMode := 'paid'
- end
- SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode)
- SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0])
- end
- function ShouldSkipPage(PageID: Integer): Boolean
- begin
- { Skip pages that shouldn't be shown }
- if (PageID = LightMsgPage.ID) and (UsagePage.SelectedValueIndex <> 0) then
- Result := True
- else if (PageID = KeyPage.ID) and (UsagePage.SelectedValueIndex <> 2) then
- Result := True
- else
- Result := False
- end
- function NextButtonClick(CurPageID: Integer): Boolean
- var
- I: Integer
- begin
- { Validate certain pages before allowing the user to proceed }
- if CurPageID = UserPage.ID then begin
- if UserPage.Values[0] = '' then begin
- MsgBox('You must enter your name.', mbError, MB_OK)
- Result := False
- end else begin
- if DataDirPage.Values[0] = '' then
- DataDirPage.Values[0] := 'C:\' + UserPage.Values[0]
- Result := True
- end
- end else if CurPageID = KeyPage.ID then begin
- { Just to show how 'OutputProgress' pages work.
- Always use a try..finally between the Show and Hide calls as shown below. }
- ProgressPage.SetText('Authorizing registration key...', '')
- ProgressPage.SetProgress(0, 0)
- ProgressPage.Show
- try
- for I := 0 to 10 do begin
- ProgressPage.SetProgress(I, 10)
- Sleep(100)
- end
- finally
- ProgressPage.Hide
- end
- if GetSHA1OfString('codedlg' + KeyPage.Values[0]) = '8013f310d340dab18a0d0cda2b5b115d2dcd97e4' then
- Result := True
- else begin
- MsgBox('You must enter a valid registration key. (Hint: The key is "inno".)', mbError, MB_OK)
- Result := False
- end
- end else
- Result := True
- end
- function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo,
- MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String
- var
- S: String
- begin
- { Fill the 'Ready Memo' with the normal settings and the custom settings }
- S := ''
- S := S + 'Personal Information:' + NewLine
- S := S + Space + UserPage.Values[0] + NewLine
- if UserPage.Values[1] <> '' then
- S := S + Space + UserPage.Values[1] + NewLine
- S := S + NewLine
-
- S := S + 'Usage Mode:' + NewLine + Space
- case UsagePage.SelectedValueIndex of
- 0: S := S + 'Light mode'
- 1: S := S + 'Sponsored mode'
- 2: S := S + 'Paid mode'
- end
- S := S + NewLine + NewLine
-
- S := S + MemoDirInfo + NewLine
- S := S + Space + DataDirPage.Values[0] + ' (personal data files)' + NewLine
- Result := S
- end
- function GetUser(Param: String): String
- begin
- { Return a user value }
- { Could also be split into separate GetUserName and GetUserCompany functions }
- if Param = 'Name' then
- Result := UserPage.Values[0]
- else if Param = 'Company' then
- Result := UserPage.Values[1]
- end
- function GetDataDir(Param: String): String
- begin
- { Return the selected DataDir }
- Result := DataDirPage.Values[0]
- end
|