Ветеран
Сообщения: 1133
Благодарности: 581
|
Профиль
|
Отправить PM
| Цитировать
Цитата Raf-9600:
А реально ли сделать так »
|
Сделал, не совсем как вы хотели, т.е. сделал отдельную страницу с выбором Steam или NoSteam.
Пример
Код: 
[Setup]
AppID={{9C9D1016-916D-40D5-B034-A0071759F1B7}
AppName=Half-Life 2
AppVerName=My Half-Life 2
DefaultDirName={pf}\Half-Life 2
DefaultGroupName=Half-Life 2
OutputDir=.
UninstallFilesDir={app}\UninstallDir
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
INST_MODE=Режим установки
INST_MODE_CPT=Пожалуйста, выберите в каком режиме будет устанавливаться программа
INST_EXPR=Steam
INST_EXPR_STR=Установка программы с параметрами Steam.
INST_CUST=NoSteam
INST_CUST_STR=Установка программы с параметрами NoSteam.
NEXT=Нажмите «Далее», чтобы продолжить.
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Check: MyFuncIcons
[Code]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
external 'GetModuleHandleA@kernel32.dll stdcall';
function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt;
external 'ExtractIconA@shell32.dll stdcall';
function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
external 'DrawIconEx@user32.dll stdcall';
var
SupportPage: TWizardPage;
Steam, NoSteam: TNewRadiobutton;
function MyFuncIcons: Boolean;
begin
if Steam.Checked = True then
Result:= False
else Result:= True;
end;
procedure InitializeWizard();
var
Str1, Str2, Str3: TNewStaticText;
Rect: TRect;
hIcon: LongInt;
begin
SupportPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:INST_MODE}'), ExpandConstant('{cm:INST_MODE_CPT}'));
Steam:= TNewRadiobutton.Create(SupportPage);
with Steam do
begin
SetBounds(ScaleX(20), ScaleY(40), ScaleX(200), ScaleY(16));
Font.Style:= [fsBold];
Caption:= ExpandConstant('{cm:INST_EXPR}');
Checked:= True;
Parent:= SupportPage.Surface;
end;
hIcon:= ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 118);
with TBitmapImage.Create(SupportPage) do
begin
SetBounds(ScaleX(36), Steam.Top + ScaleY(20), ScaleX(32), ScaleY(32));
with Bitmap do
begin
Width:= ScaleX(32);
Height:= ScaleY(32);
Rect.Right:= ScaleX(32);
Rect.Bottom:= ScaleY(32);
Rect.Left:= ScaleX(0);
Rect.Top:= ScaleY(0);
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
Parent:= SupportPage.Surface;
end;
Str1:= TNewStaticText.Create(SupportPage);
with Str1 do
begin
SetBounds(ScaleX(78), Steam.Top + ScaleY(20), ScaleX(349), ScaleY(32));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:INST_EXPR_STR}');
Parent:= SupportPage.Surface;
end;
NoSteam:= TNewRadiobutton.Create(SupportPage);
with NoSteam do
begin
SetBounds(ScaleX(20), Str1.Top + ScaleY(52), ScaleX(200), ScaleY(16));
Font.Style:= [fsBold];
Caption:= ExpandConstant('{cm:INST_CUST}');
Parent:= SupportPage.Surface;
end;
hIcon:= ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 119);
with TBitmapImage.Create(SupportPage) do
begin
SetBounds(ScaleX(36), NoSteam.Top + ScaleY(20), ScaleX(32), ScaleY(32));
with Bitmap do
begin
Width:= ScaleX(32);
Height:= ScaleY(32);
Rect.Right:= ScaleX(32);
Rect.Bottom:= ScaleY(32);
Rect.Left:= ScaleX(0);
Rect.Top:= ScaleY(0);
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
Parent:= SupportPage.Surface;
end;
Str2:= TNewStaticText.Create(SupportPage);
with Str2 do
begin
SetBounds(ScaleX(78), NoSteam.Top + ScaleY(20), ScaleX(349), ScaleY(50));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:INST_CUST_STR}');
Parent:= SupportPage.Surface;
end;
Str3:= TNewStaticText.Create(SupportPage);
with Str3 do
begin
SetBounds(ScaleX(36), ScaleY(221), ScaleX(381), ScaleY(16));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:NEXT}');
Parent:= SupportPage.Surface;
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
begin
if Steam.Checked = True then
WizardForm.DirEdit.Text:= ExpandConstant('{reg:HKLM\SOFTWARE\Valve\Steam,InstallPath|{pf}\ARPS}')
else WizardForm.DirEdit.Text:= ExpandConstant('{pf}\Half-Life 2');
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpSelectProgramGroup then
begin
if Steam.Checked = True then
Result:= True;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
if Steam.Checked = True then
begin
DelTree(ExpandConstant('{app}\UninstallDir'), True, True, True);
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9C9D1016-916D-40D5-B034-A0071759F1B7}_is1');
end;
end;
end;
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo,
MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
S := S + ExpandConstant('{cm:INST_MODE}') + NewLine;
if Steam.Checked = True then
S := S + Space + ExpandConstant('{cm:INST_EXPR}') + NewLine + NewLine
else
S := S + Space + ExpandConstant('{cm:INST_CUST}') + NewLine + NewLine;
S := S + MemoDirInfo + NewLine + Newline;
S := S + MemoGroupInfo + NewLine + Newline;
S := S + MemoTasksInfo + NewLine + NewLine;
Result := S;
end;
{
HINT: В режиме "Экспресс Режим" (Steam) может возникнуть ситуация, когда к примеру не хватает места
на жестком диске, а страница выбора папки установки в "Экспресс Режиме" будет пропущена,
в результате чего получится так, что установка сообщит о нехватке места уже в процессе
копирования файлов.
}
|