Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 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) может возникнуть ситуация, когда к примеру не хватает места
       на жестком диске, а страница выбора папки установки в "Экспресс Режиме" будет пропущена,
       в результате чего получится так, что установка сообщит о нехватке места уже в процессе
       копирования файлов.
}

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:29, 02-09-2009 | #44