Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)

Модерирует : gyra, Maz

Widok (23-11-2010 10:55): лимит страниц. продолжаем здесь  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

skitonline

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
#define GameID "{84ED213F-B9A7-4504-86AD-76D7DC37A6CC}"
 
#define GameName "Prince of Persia - Пески Времени"
#define GameVerName "Prince of Persia - Пески Времени v1.81"
 
#define NeedSize "1400"
 
#define Processor "800"
#define VideoCard "128"
#define RAM "256"
#define WinVerMajor "5"
#define WinVerMinor "1"
#define ServicePack "2"
 
#define ArcLocation "{src}\*Принц Персии - Пески времени.arc"
 
[Setup]
AppId={{#GameID}
AppName={#GameName}
AppVerName={#GameName}
AppPublisher=Skit
AppVersion=1.81
AppReadmeFile={group}\ReadMe !!!.txt
DefaultDirName={pf}\Prince of Persia - Пески Времени
DefaultGroupName=R.G Games\Prince of Persia - Пески Времени
OutputBaseFilename=Prince of Persia - Пески Времени
DirExistsWarning=no
MinVersion=0,5.01
VersionInfoDescription={#GameName}
SetupIconFile=C:\Documents and Settings\Skit\Рабочий стол\PoP\Icons\PrinceOfPersia.ico
DiskSpanning=yes
SlicesPerDisk=3
DiskSliceSize=1566000000
DisableReadyPage=True
 
[Files]
 
Source: InstallFiles\*; Flags: dontcopy
Source: Slides\*; Flags: dontcopy
Source: Icons\*; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
 
Source: InstallFiles\WizardImage.jpg; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\botva2.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\ProgressBackground.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\ProgressImg.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\StatusPanel2.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\StatusPanel.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\Button.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\Tiger.cjstyles; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\Workspace.png; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\ISSkin.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
Source: InstallFiles\InnoCallback.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system
 
;Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;
;Source: "C:\Program Files\EA Games\Need for Speed Undercover\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ;
 
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
 
[Messages]
rus.WinVersionTooLowError=Программа установки несовместима с версией Вашей операционной системы.
rus.SetupWindowTitle={#GameName}
rus.ExitSetupMessage=Вы действительно хотите отменить установку игры {#GameName}?
rus.SelectDirDesc=В какую папку Вы хотите установить игру {#GameName}?
rus.NoProgramGroupCheck2=Не создавать папку в меню «Пуск»
rus.InstallingLabel=Пожалуйста, подождите, пока игра установится на Ваш компьютер.
rus.UninstallAppTitle=Удаление
rus.UninstallAppFullTitle={#GameName}
rus.ConfirmUninstall=Вы действительно хотите удалить игру {#GameName}?
rus.UninstalledAll=Игра {#GameName} была полностью удалена с Вашего компьютера.
rus.UninstalledMost=Удаление игры {#GameName} завершено.%n%nЧасть элементов не удалось удалить. Вы можете удалить их самостоятельно.
 
rus.ButtonBack=< Назад
rus.ButtonNext=Далее >
rus.ButtonInstall=Установить
rus.ButtonFinish=Завершить
rus.ButtonWizardBrowse=Обзор...
 
[CustomMessages]
rus.Welcome=Приветствие
rus.System=Система
rus.Catalogue=Каталог
rus.StartMenu=Меню «Пуск»
rus.Task=Задачи
rus.Installing=Установка
rus.Uninstalling=Удаление
rus.Finish=Завершение
rus.Welcome1=Вас приветствует Мастер установки игры%n{#GameName}
rus.Welcome2=Программа установит игру {#GameVerName} на Ваш компьютер.%n%nРекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или  «Отмена», чтобы выйти из программы установки.
rus.Requirements1=Проверка системных требований
rus.Requirements2=Программа установки обнаружила следующие необходимые компоненты
rus.Requirements3=Все компоненты удовлетворяют требованиям игры.
rus.Requirements4=Компоненты, выделенные красным, не удовлетворяют требованиям игры.
rus.DeviceDriver=Драйвер устройства не обнаружен
rus.Processor=Процессор
rus.VideoCard=Видеоадаптер
rus.SoundCard=Звуковая карта
rus.RAM=Память (ОЗУ)
rus.OperationSystem=Операционная система
rus.TotalSpace=Размер жесткого диска:
rus.FreeSpace=Доступно места на диске:
rus.NeedSpace=Требуется места на диске:
rus.SelectTasksLabel=Выберите дополнительные задачи, которые должны выполниться при установке игры, после этого нажмите «Установить».
rus.Language=
rus.LanguageRus=
rus.LanguageUS=
rus.StartMenuLbl=Нажмите «Установить», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
rus.TasksName=Выберите дополнительные задачи
rus.TasksDescription=Какие дополнительные задачи необходимо выполнить?
rus.DirectX=
rus.QuickLaunch=Создать ярлык в Панели быстрого запуска
rus.Desktop=Создать ярлык на Рабочем столе
rus.DirectXInstall=Идет обновление DirectX...
rus.AllProgress=Прогресс распаковки файлов:
rus.Remains=Осталось ждать
rus.Hour=час
rus.Min=мин
rus.Sec=сек
rus.FinishedHeading=Установка игры {#GameName} успешно завершена.
rus.FinishedLabel=Игра {#GameVerName} была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий ярлык в меню «Пуск» или на Рабочем столе.
rus.FinishedLabel2=Нажмите «Завершить», чтобы выйти из программы установки.
rus.Uninstall=Удалить {#GameName}
rus.DeleteSave=Удалить сохраненные игры и профили?
rus.WizardUninst=Состояние удаления
rus.UninstDescript=Пожалуйста, подождите, пока игра будет удалена с Вашего компьютера.
rus.StatusUninst=Удаление игры {#GameName}...
rus.AllProgressUninst=Общий прогресс удаления игры:
 
[Icons]
Name: {group}\{#GameName}; Filename: {app}\PrinceOfPersia.EXE; WorkingDir: {app}; Comment: Запустить игру; Check: NoIcons
Name: {group}\{cm:UninstallProgram,Prince Of Persia The Sands of Time}; Filename: {uninstallexe}
Name: {group}\Открыть файл ReadMe; Filename: {app}\RedMe !!!.txt; WorkingDir: {app}; IconFilename: {app}\1.ico; Comment: Просмотреть файл ReadMe.txt; Check: NoIcons
Name: {userdesktop}\{#GameName}; Filename: {app}\PrinceOfPersia.EXE; WorkingDir: {app}; Check: Desktop; IconFilename: {app}\autorun.ico
 
[Run]
Filename: {src}\Redist\DirectX\dxsetup.exe; WorkingDir: {src}\DirectX; Parameters: /silent; Check: DirectX; Flags: waituntilterminated; BeforeInstall: DirectXProgress
 
[Code]
 
type
  TTimerProc = procedure (h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
  TBtnEventProc = procedure (h:HWND);
  TPBProc = function  (h:hWnd;Msg,wParam,lParam:Longint):Longint;
 
  TImgPB = record
    Left,
    Top,
    Width,
    Height,
    MaxWidth  : integer;
    img1,img2 : Longint;
  end;
 
  TALabel = array of TLabel;
 
const
  BtnClickEventID      = 1;
  BtnMouseEnterEventID = 2;
  LanguageButtonCount  = 2;
  BASS_ACTIVE_PAUSED   = 3;
  BASS_SAMPLE_LOOP     = 4;
  WFDiskTimerID        = 1;
  WFSysReqTimerID      = 2;
 
var
  SystemPage, SelectTasksPage: TWizardPage;
 
  Rus: boolean;
  MusicButton,
  hCancelBtn, hNextBtn, hBackBtn, hDirBrowseBtn, hGroupBrowseBtn,  hCancelUninstBtn,
  NoIconsCheck, DesktopCheck, QuickLaunchCheck, DirectXCheck, mp3Handle: HWND;
 
  WFButtonFont, UPFButtonFont: TFont;
  CurrentImage, ProgressStep: integer;
  mp3Name, OldDisk, TimeLeft: string;
 
  Welcome, System, Catalogue, StartMenu, Tasks, Installing, Finish, Uninstalling,
 
  PageNameLabel, PageDescriptionLabel,
  WelcomeLabel1, WelcomeLabel2,
  RequirementsLbl, ProcessorLbl, VideoCardLbl, SoundCardLbl, RAMLbl, SystemLbl,
  ProcessorNameLbl, VideoCardNameLbl, SoundCardNameLbl, RAMTotalLbl, SystemNameLbl,
 
  SelectDirBrowseLabel, DirEditLabel, TotalSpaceLabel, NeedSpaceLabel, FreeSpaceLabel,
  SelectStartMenuFolderBrowseLabel, GroupEditLabel, NoIconsLabel,
  SelectTasksLabel, DesktopLabel, QuickLaunchLabel, DirectXLabel, LanguageLabel, LngNameLbl,
  FilenameLabel, StatusLabel, ProgressInfoLabel,
  FinishedHeadingLabel, FinishedLabel,
  WizardUninstLabel, UninstPageDescriptLabel, StatusUninstLabel : TLabel;
 
  StatusPanel, RequirementsPanel, Edit,DirFolder,HardDrivePanel,
  GroupFolder,WizardImg,OldPosition, HDD, PBOldProc: Longint;
 
  FreeMB, TotalMB: Cardinal;
  sTime, eTime: DWORD;
  NewPB: TImgPB;
  AImg: array of Longint;
  LanguageButton: array [1..LanguageButtonCount] of HWND;
  ASysReq, ADisk: TALabel;
  Keys: TArrayOfString;
  LastTimerEvent: DWORD;
 
function WrapBtnCallback(Callback: TBtnEventProc; ParamCount: Integer): Longword; external 'wrapcallback@{tmp}\innocallback.dll stdcall delayload';
function BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND;  external 'BtnCreate@{tmp}\botva2.dll stdcall delayload';
procedure BtnRefresh(h:HWND); external 'BtnRefresh@{tmp}\botva2.dll stdcall delayload';
function BtnGetChecked(h:HWND):boolean; external 'BtnGetChecked@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetChecked(h:HWND; Value:boolean); external 'BtnSetChecked@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetText(h:HWND; Text:PAnsiChar);  external 'BtnSetText@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetVisibility(h:HWND; Value:boolean); external 'BtnSetVisibility@{tmp}\botva2.dll stdcall delayload';
function BtnGetEnabled(h:HWND):boolean; external 'BtnGetEnabled@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEnabled(h:HWND; Value:boolean); external 'BtnSetEnabled@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFont(h:HWND; Font:Cardinal); external 'BtnSetFont@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetFontColor(h:HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor: Cardinal); external 'BtnSetFontColor@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetEvent(h:HWND; EventID:integer; Event:Longword); external 'BtnSetEvent@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetCursor(h:HWND; hCur:Cardinal); external 'BtnSetCursor@{tmp}\botva2.dll stdcall delayload';
procedure BtnSetPosition(h:HWND; NewLeft, NewTop, NewWidth, NewHeight: integer); external 'BtnSetPosition@{tmp}\botva2.dll stdcall delayload';
function GetSysCursorHandle(id:integer):Cardinal; external 'GetSysCursorHandle@{tmp}\botva2.dll stdcall delayload';
 
function ImgLoad(Wnd :HWND; FileName AnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetPosition(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer); external 'ImgSetPosition@{tmp}\botva2.dll stdcall delayload';
procedure ImgRelease(img :Longint); external 'ImgRelease@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisibility(img :Longint; Visible :boolean); external 'ImgSetVisibility@{tmp}\botva2.dll stdcall delayload';
function ImgGetVisibility(img:Longint):boolean; external 'ImgGetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown;  external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';
 
function sndPlaySound(lpszSoundName: AnsiString; uFlags: cardinal):integer; external 'sndPlaySoundA@winmm.dll stdcall';
 
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function WrapTimerProc(callback:TTimerProc; paramcount:integer):LongWord; external 'wrapcallback@{tmp}\innocallback.dll stdcall delayload';
 
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function CallBackProc(P:TPBProc;ParamCount:integer):LongWord; external 'wrapcallback@{tmp}\innocallback.dll stdcall delayload';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
function GetTickCount: DWord; external 'GetTickCount@kernel32 stdcall';
 
procedure LoadSkin(lpszPath: PAnsiChar; lpszIniFileName: PAnsiChar); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload';
procedure UnloadSkin; external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';
 
//================== Подключение модулей ==================//
  #include "FreeArc.iss"
//================== Подключение модулей ==================//
 
function InitializeSetup: Boolean;
begin
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('innocallback.dll');
  ExtractTemporaryFile('Click.wav');
  ExtractTemporaryFile('isskin.dll');
  ExtractTemporaryFile('Tiger.cjstyles');
 
  LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
  Result:=True;//При отключении модуля "AutoRun", исправить на Result:=True;
end;
 
//************************************************ [Начало - Вставка изображений] ***************************************************//
 
procedure CreateWizardImage;
var
  i: integer;
begin
  WizardForm.ClientWidth:=ScaleX(798);
  WizardForm.ClientHeight:=ScaleY(543);
  WizardForm.Center;
  WizardForm.OuterNotebook.Hide;
  WizardForm.InnerNotebook.Hide;
  WizardForm.Bevel.Hide;
 
  ExtractTemporaryFile('WizardImage.jpg');
  ExtractTemporaryFile('button.png');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('StatusPanel.png');
  ExtractTemporaryFile('StatusPanel2.png');
  ExtractTemporaryFile('Workspace.png');
  ExtractTemporaryFile('RequirementsPanel.png');
  ExtractTemporaryFile('Edit.png');
  ExtractTemporaryFile('DirFolder.png');
  ExtractTemporaryFile('HardDrivePanel.png');
  ExtractTemporaryFile('HDD.png');
  ExtractTemporaryFile('GroupFolder.png');
  ExtractTemporaryFile('CheckBox.png');
  //ExtractTemporaryFile('ru.png');
  //ExtractTemporaryFile('us.png');
  ExtractTemporaryFile('ProgressBackground.png');
  ExtractTemporaryFile('ProgressImg.png');
 
  ExtractTemporaryFile('WFEnter.wav');
  ExtractTemporaryFile('Check.wav');
  ExtractTemporaryFile('Music.mp3');
  ExtractTemporaryFile('BASS.dll');
 
  ExtractTemporaryFile('1.jpg');
  ExtractTemporaryFile('2.jpg');
  ExtractTemporaryFile('3.jpg');
  ExtractTemporaryFile('4.jpg');
  ExtractTemporaryFile('5.jpg');
 
  WizardImg:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\WizardImage.jpg'),ScaleX(0),ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
 
  SetArrayLength(AImg,5);
  for i:=0 to GetArrayLength(AImg)-1 do begin
    AImg[i]:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\'+IntToStr(i+1)+'.jpg'),0,0,WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
    ImgSetVisibility(AImg[i],False);
  end;
 
  ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\StatusPanel.png'),ScaleX(0), ScaleY(95),WizardForm.ClientWidth,ScaleY(20),True,True);
  StatusPanel:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\StatusPanel2.png'),ScaleX(0), ScaleY(95),ScaleX(114),ScaleY(20),True,True);
  ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Workspace.png'),ScaleX(42), ScaleY(160),ScaleX(714),ScaleY(309),True,True);
  RequirementsPanel:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\RequirementsPanel.png'),ScaleX(100), ScaleY(292),ScaleX(601),ScaleY(146),True,True);
  Edit:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Edit.png'),ScaleX(120), ScaleY(305),ScaleX(460),ScaleY(22),True,True);
  DirFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\DirFolder.png'),ScaleX(60), ScaleY(260),ScaleX(50),ScaleY(70),True,True);
  HardDrivePanel:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\HardDrivePanel.png'),ScaleX(120), ScaleY(363),ScaleX(460),ScaleY(70),True,True);
  HDD:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\HDD.png'),ScaleX(60), ScaleY(372),ScaleX(50),ScaleY(50),True,True);
  GroupFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\GroupFolder.png'),ScaleX(60), ScaleY(260),ScaleX(50),ScaleY(70),True,True);
 
  ImgApplyChanges(WizardForm.Handle);
end;
 
//************************************************ [Конец - Вставка изображений] ***************************************************//
 
//************************************************ [Начало - Текстуры кнопок] ***************************************************//
 
procedure SetStateNewButtons;
begin
  with WizardForm.BackButton do begin
    BtnSetText(hBackBtn,PAnsiChar(Caption));
    BtnSetVisibility(hBackBtn,Visible);
    BtnSetEnabled(hBackBtn,Enabled);
  end;
  with WizardForm.NextButton do begin
    BtnSetText(hNextBtn,PAnsiChar(Caption));
    BtnSetVisibility(hNextBtn,Visible);
    BtnSetEnabled(hNextBtn,Enabled);
  end;
  with WizardForm.CancelButton do begin
    BtnSetText(hCancelBtn,PAnsiChar(Caption));
    BtnSetVisibility(hCancelBtn,Visible);
    BtnSetEnabled(hCancelBtn,Enabled);
  end;
  BtnSetText(hDirBrowseBtn,PAnsiChar(WizardForm.DirBrowseButton.Caption));
  BtnSetText(hGroupBrowseBtn,PAnsiChar(WizardForm.GroupBrowseButton.Caption));
end;
 
procedure WizardFormBtnClick(hBtn:HWND);
var
  Btn:TButton;
begin
  sndPlaySound(ExpandConstant('{tmp}\Click.wav'),$0001);
  case hBtn of
    hCancelBtn: Btn:=WizardForm.CancelButton;
    hNextBtn: Btn:=WizardForm.NextButton;
    hBackBtn: Btn:=WizardForm.BackButton;
    hDirBrowseBtn: Btn:=WizardForm.DirBrowseButton;
    hGroupBrowseBtn: Btn:=WizardForm.GroupBrowseButton;
  end;
  Btn.OnClick(Btn);
  SetStateNewButtons;
  BtnRefresh(hBtn);
end;
 
procedure WFBtnEnter(hBtn:HWND);
begin
  sndPlaySound(ExpandConstant('{tmp}\WFEnter.wav'),$0001);
end;
 
procedure ButtonsTextures;
begin
  WFButtonFont:=TFont.Create;
  WFButtonFont.Style:=[fsBold];
 
  with WizardForm.BackButton do begin
    hBackBtn:=BtnCreate(WizardForm.Handle,Left+205,Top+160,Width+31,Height+16,ExpandConstant('{tmp}\button.png'),18,False);
    BtnSetEvent(hBackBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hBackBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hBackBtn,WFButtonFont.Handle);
    BtnSetFontColor(hBackBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
    BtnSetCursor(hBackBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;
 
  with WizardForm.NextButton do begin
    hNextBtn:=BtnCreate(WizardForm.Handle,Left+230,Top+160,Width+31,Height+16,ExpandConstant('{tmp}\button.png'),18,False);
    BtnSetEvent(hNextBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hNextBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hNextBtn,WFButtonFont.Handle);
    BtnSetFontColor(hNextBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
    BtnSetCursor(hNextBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;
 
  with WizardForm.CancelButton do begin
    hCancelBtn:=BtnCreate(WizardForm.Handle,Left+245,Top+160,Width+31,Height+16,ExpandConstant('{tmp}\button.png'),18,False);
    BtnSetEvent(hCancelBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hCancelBtn,WFButtonFont.Handle);
    BtnSetFontColor(hCancelBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
    BtnSetCursor(hCancelBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;
 
  with WizardForm.DirBrowseButton do begin
    hDirBrowseBtn:=BtnCreate(WizardForm.Handle,Left+280,Top+215,Width+31,Height+16,ExpandConstant('{tmp}\button.png'),18,False);
    BtnSetEvent(hDirBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hDirBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hDirBrowseBtn,WFButtonFont.Handle);
    BtnSetFontColor(hDirBrowseBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
    BtnSetCursor(hDirBrowseBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;
 
  with WizardForm.GroupBrowseButton do begin
    hGroupBrowseBtn:=BtnCreate(WizardForm.Handle,Left+280,Top+215,Width+31,Height+16,ExpandConstant('{tmp}\button.png'),18,False);
    BtnSetEvent(hGroupBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hGroupBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hGroupBrowseBtn,WFButtonFont.Handle);
    BtnSetFontColor(hGroupBrowseBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
    BtnSetCursor(hGroupBrowseBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;
end;
 
//************************************************ [Конец - Текстуры кнопок] ***************************************************//
 
//************************************************ [Начало - Музыка] ***************************************************//
 
function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean; external 'BASS_Init@files:BASS.dll stdcall delayload';
function BASS_StreamCreateFile(mem: BOOL; f: PAnsiChar; offset: DWORD; length: DWORD; flags: DWORD): DWORD; external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';
function BASS_Start: Boolean; external 'BASS_Start@files:BASS.dll stdcall delayload';
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean; external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';
function BASS_ChannelIsActive(handle: DWORD): Integer; external 'BASS_ChannelIsActive@files:BASS.dll stdcall delayload';
function BASS_ChannelPause(handle: DWORD): Boolean; external 'BASS_ChannelPause@files:BASS.dll stdcall delayload';
function BASS_Pause: Boolean; external 'BASS_Pause@files:BASS.dll stdcall delayload';
function BASS_Stop: Boolean; external 'BASS_Stop@files:BASS.dll stdcall delayload';
function BASS_Free: Boolean; external 'BASS_Free@files:BASS.dll stdcall delayload';
 
procedure MusicButtonClick(hBtn:HWND);
begin
  sndPlaySound(ExpandConstant('{tmp}\Click.wav'), $0001);
  if BtnGetChecked(MusicButton) then BASS_ChannelPause(mp3Handle)
    else if BASS_ChannelIsActive(mp3Handle)=BASS_ACTIVE_PAUSED then BASS_ChannelPlay(mp3Handle, False);
end;
 
procedure InsertMusic;
begin
  MusicButton:=BtnCreate(WizardForm.Handle,ScaleX(758),ScaleY(5),ScaleX(36),ScaleY(36),ExpandConstant('{tmp}\MusicButton.png'),0,True);
  BtnSetEvent(MusicButton,BtnClickEventID,WrapBtnCallback(@MusicButtonClick,1));
  BtnSetEvent(MusicButton,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
  BtnSetVisibility(MusicButton,True);
  BtnSetCursor(MusicButton,GetSysCursorHandle(32649));
 
  mp3Name:=ExpandConstant('{tmp}\Music.mp3');
  BASS_Init(-1,44100,0,0,0);
  mp3Handle:=BASS_StreamCreateFile(FALSE,PAnsiChar(mp3Name),0,0,BASS_SAMPLE_LOOP);
  BASS_Start;
  BASS_ChannelPlay(mp3Handle,False);
end;
 
//************************************************ [Конец - Музыка] ***************************************************//
 
//************************************************ [Начало - Панель] ***************************************************//
 
procedure CreateStatusPanel;
begin
  Welcome := TLabel.Create(WizardForm);
  with Welcome do begin
    AutoSize:=False;
    SetBounds(ScaleX(13), ScaleY(96), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Welcome}');
    Parent := WizardForm;
  end;
 
  System := TLabel.Create(WizardForm);
  with System do begin
    AutoSize:=False;
    SetBounds(ScaleX(143), ScaleY(96), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:System}');
    Parent := WizardForm;
  end;
 
  Catalogue := TLabel.Create(WizardForm);
  with Catalogue do begin
    AutoSize:=False;
    SetBounds(ScaleX(260), ScaleY(96), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Catalogue}');
    Parent := WizardForm;
  end;
 
  StartMenu := TLabel.Create(WizardForm);
  with StartMenu do begin
    AutoSize:=False;
    SetBounds(ScaleX(357), ScaleY(96), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:StartMenu}');
    Parent := WizardForm;
  end;
 
  Tasks := TLabel.Create(WizardForm);
  with Tasks do begin
    AutoSize:=False;
    SetBounds(ScaleX(490), ScaleY(96), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Task}');
    Parent := WizardForm;
  end;
 
  Installing := TLabel.Create(WizardForm);
  with Installing do begin
    AutoSize:=False;
    SetBounds(ScaleX(593), ScaleY(96), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Installing}');
    Parent := WizardForm;
  end;
 
  Finish := TLabel.Create(WizardForm);
  with Finish do begin
    AutoSize:=False;
    SetBounds(ScaleX(703), ScaleY(96), ScaleX(114), ScaleY(20));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 10;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Finish}');
    Parent := WizardForm;
  end;
end;
 
//************************************************ [Конец - Панель] ***************************************************//
 
//************************************************ [Начало - Компоненты страниц] ***************************************************//
 
function DetectHardware: Integer; external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';
function GetProcessorName: PAnsiChar; external 'hwc_GetProcessorName@files:get_hw_caps.dll stdcall';
function GetProcessorFreq: Integer; external 'hwc_GetProcessorFreq@files:get_hw_caps.dll stdcall';
function GetVideoCardName: PAnsiChar; external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';
function GetVidMemLocal: Integer; external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';
function GetPdmWidth: Integer; external 'hwc_GetPdmWidth@files:get_hw_caps.dll stdcall';
function GetPdmHeight: Integer; external 'hwc_GetPdmHeight@files:get_hw_caps.dll stdcall';
function GetSoundCards: Integer; external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';
function GetSoundCardName: PAnsiChar; external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';
function GetSystemPhys: Integer; external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';
function GetWindowsName: PAnsiChar; external 'hwc_GetWindowsName@files:get_hw_caps.dll stdcall';
 
function DelSp(s: string): string;
begin
  while Pos('  ',s)>0 do StringChange(s,'  ',' ');
  Result:=Trim(s);
end;
 
procedure GroupChange(Sender: TObject);
begin
  GroupEditLabel.Caption := MinimizePathName(WizardForm.GroupEdit.Text, GroupEditLabel.Font, GroupEditLabel.Width);
end;
 
function NumToStr(Float: Extended): string;
begin
  Result:=Format('%.2n', [Float]);
  StringChange(Result, ',', '.');
  while ((Result[Length(Result)]='0') or (Result[Length(Result)]='.')) and (Pos('.',Result)>0) do SetLength(Result,Length(Result)-1);
end;
 
function MbOrTB(Float: Extended): string;
begin
  if Float<1024 then Result:=NumToStr(Float)+' MB'
  else if (Float/1024)<1024 then Result:=NumToStr(Float/1024)+' GB'
  else if (Float/(1024*1024))<1024 then Result:=NumToStr(Float/(1024*1024))+' TB'
end;
 
procedure SysReqFlashing(h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
var
  i:integer;
begin
  for i:= 0 to GetArrayLength(ASysReq)-1 do
    if ASysReq[i].Font.Color=$FFFFFF then ASysReq[i].Font.Color:=$0000FF else ASysReq[i].Font.Color:=$FFFFFF;
end;
 
procedure DiskFlashing(h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
var
  i:integer;
begin
  for i:= 0 to GetArrayLength(ADisk)-1 do
    if ADisk[i].Font.Color=$FFFFFF then ADisk[i].Font.Color:=$0000FF else ADisk[i].Font.Color:=$FFFFFF;
end;
 
function GetElementIndex(a:TALabel; lbl:TLabel):integer;
var
  i:integer;
  f:boolean;
begin
  Result:=-1;
  f:=False;
  for i:=0 to GetArrayLength(a)-1 do
    if a[i]=lbl then begin
      f:=True;
      Break;
    end;
  if f then Result:=i;
end;
 
procedure AddLabelToArray(var a:TALabel; lbl:TLabel);
begin
  if GetElementIndex(a,lbl)=-1 then begin
    SetArrayLength(a,GetArrayLength(a)+1);
    a[GetArrayLength(a)-1]:=lbl;
  end;
end;
 
procedure DeleteLabelFromArray(var a:TALabel; lbl:integer);
var
  Last,i:integer;
begin
  if lbl<>-1 then begin
    Last:=GetArrayLength(a)-1;
    if lbl<Last then
      for i:=lbl to Last-1 do a[i]:=a[i+1];
    SetArrayLength(a,Last);
  end;
end;
 
procedure GetFreeSpaceCaption(Sender: TObject);
var
  CurrentDisk: String;
  i:integer;
begin
  CurrentDisk:=ExtractFileDrive(WizardForm.DirEdit.Text);
  DirEditLabel.Caption:=MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width);
  if not GetSpaceOnDisk(CurrentDisk,True,FreeMB,TotalMB) then begin
    KillTimer(WizardForm.Handle,WFDiskTimerID);
    SetArrayLength(ADisk,0);
    TotalSpaceLabel.Visible:=False;
    FreeSpaceLabel.Visible:=False;
    BtnSetEnabled(hNextBtn,False);
    WizardForm.NextButton.Enabled:=False;
    OldDisk:=CurrentDisk;
    Exit;
  end;
 
  TotalSpaceLabel.Visible:=True;
  FreeSpaceLabel.Visible:=True;
 
  if CurrentDisk<>OldDisk then begin
    OldDisk:=CurrentDisk;
    TotalSpaceLabel.Caption := ExpandConstant('{cm:TotalSpace} ') + MbOrTB(TotalMb);
    FreeSpaceLabel.Caption := ExpandConstant('{cm:FreeSpace} ') + MbOrTB(FreeMb) + ' (' + IntToStr((FreeMb*100) div TotalMB) + ' %)';
 
    if WizardForm.CurPageID = wpSelectDir then begin
      if FreeMB>={#NeedSize} then begin
        i:=GetElementIndex(ADisk,FreeSpaceLabel);
        if i<>-1 then begin
          DeleteLabelFromArray(ADisk,i);
          FreeSpaceLabel.Font.Color:=$FFFFFF;
          if GetArrayLength(ADisk)=0 then KillTimer(WizardForm.Handle,WFDiskTimerID);
        end;
      end else AddLabelToArray(ADisk,FreeSpaceLabel);
 
      if TotalMb>={#NeedSize} then begin
        i:=GetElementIndex(ADisk,TotalSpaceLabel);
        if i<>-1 then begin
          DeleteLabelFromArray(ADisk,i);
          TotalSpaceLabel.Font.Color:=$FFFFFF;
          if GetArrayLength(ADisk)=0 then KillTimer(WizardForm.Handle,WFDiskTimerID);
        end;
      end else AddLabelToArray(ADisk,TotalSpaceLabel);
 
      if GetArrayLength(ADisk)>0 then SetTimer(WizardForm.Handle,WFDiskTimerID,1000,WrapTimerProc(@DiskFlashing,4));
      BtnSetEnabled(hNextBtn,not (GetArrayLength(ADisk)>0));
      WizardForm.NextButton.Enabled:=not (GetArrayLength(ADisk)>0);
    end;
  end;
end;
 
function NoIcons: Boolean;
begin
  Result:= BtnGetEnabled(hGroupBrowseBtn);
end;
 
function Desktop: Boolean;
begin
  Result:= BtnGetChecked(DesktopCheck);
end;
 
function QuickLaunch: Boolean;
begin
  Result:= BtnGetChecked(QuickLaunchCheck);
end;
 
function DirectX: Boolean;
begin
  ProgressInfoLabel.Visible:=False;
  FilenameLabel.Hide;
  Result:= BtnGetChecked(DirectXCheck);
end;
 
function Lang: Boolean;
begin
  Result:= Rus;
end;
 
procedure NoIconsClick(hBtn:HWND);
var
  Check:boolean;
begin
  sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
  Check:=BtnGetChecked(hBtn);
  BtnSetEnabled(hGroupBrowseBtn, not Check);
  GroupEditLabel.Enabled:=not Check;
  if Check then NoIconsLabel.Font.Color:=$00FFFF else NoIconsLabel.Font.Color:=$FFFFFF;
end;
 
procedure NoIconsLabelClick(Sender:TObject);
begin
  BtnSetChecked(NoIconsCheck, not BtnGetChecked(NoIconsCheck));
  NoIconsClick(NoIconsCheck);
end;
 
procedure DesktopClick(hBtn:HWND);
begin
  sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
  if BtnGetChecked(hBtn) then DesktopLabel.Font.Color:=$00FFFF else DesktopLabel.Font.Color:=$FFFFFF;
end;
 
procedure DesktopLabelClick(Sender:TObject);
begin
  BtnSetChecked(DesktopCheck, not BtnGetChecked(DesktopCheck));
  DesktopClick(DesktopCheck);
end;
 
procedure QuickLaunchClick(hBtn:HWND);
begin
  sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
  if BtnGetChecked(hBtn) then QuickLaunchLabel.Font.Color:=$00FFFF else QuickLaunchLabel.Font.Color:=$FFFFFF;
end;
 
procedure QuickLaunchLabelClick(Sender:TObject);
begin
  BtnSetChecked(QuickLaunchCheck, not BtnGetChecked(QuickLaunchCheck));
  QuickLaunchClick(QuickLaunchCheck);
end;
 
procedure SelectLanguage(hBtn:HWND);
begin
  sndPlaySound(ExpandConstant('{tmp}\Click.wav'),$0001);
  BtnSetChecked(hBtn,True);
  if hBtn=LanguageButton[1] then begin
    BtnSetChecked(LanguageButton[2],False);
    LngNameLbl.Caption:=ExpandConstant('{cm:LanguageRus}');
    Rus:= True;
  end else begin
    BtnSetChecked(LanguageButton[1],False);
    LngNameLbl.Caption:=ExpandConstant('{cm:LanguageUS}');
    Rus:= False;
  end;
end;
 
procedure DirectXProgress;
begin
  StatusLabel.Caption:=ExpandConstant('{cm:DirectXInstall}')
end;
 
procedure CreatePageComponents;
var
  Pdm: string;
  vr,VidRam : Longint;
  Version: TWindowsVersion;
begin
  PageNameLabel:=TLabel.Create(WizardForm);
  with PageNameLabel do begin
    AutoSize:= False;
    SetBounds(ScaleX(70), ScaleY(185), ScaleX(400), ScaleY(30));
    Transparent:=True;
    Font.Name:= 'Georgia';
    Font.Size:= 13;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Parent:=WizardForm;
  end;
 
  PageDescriptionLabel:=TLabel.Create(WizardForm);
  with PageDescriptionLabel do begin
    AutoSize:= False;
    SetBounds(ScaleX(100), ScaleY(215), ScaleX(600), ScaleY(50));
    Wordwrap:= True;
    Transparent:=True;
    Font.Name:= 'Georgia';
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Parent:=WizardForm;
  end;
 
////////////////////// WelcomePage //////////////////////
 
  WelcomeLabel1:= TLabel.Create(WizardForm);
  with WelcomeLabel1 do begin
    AutoSize:=False
    SetBounds(ScaleX(75), ScaleY(185), ScaleX(648), ScaleY(65));
    WordWrap:=True
    Alignment := taCenter;
    Transparent:=True
    Font.Name:='Georgia';
    Font.Size:= 16;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold]
    Caption:= ExpandConstant('{cm:Welcome1}');
    Parent:=WizardForm
  end;
 
  WelcomeLabel2:=TLabel.Create(WizardForm);
  with WelcomeLabel2 do begin
    AutoSize:=False
    SetBounds(ScaleX(75), ScaleY(275), ScaleX(648), ScaleY(200));
    WordWrap:=True
    Transparent:=True
    Font.Name:='Georgia';
    Font.Size:= 11;
    Font.Color:=$FFFFFF;
    Font.Style := [fsBold, fsItalic];
    Caption:= ExpandConstant('{cm:Welcome2}');
    Parent:=WizardForm
  end;
 
////////////////////// WelcomePage //////////////////////
 
////////////////////// SystemPage //////////////////////
 
  SystemPage:=CreateCustomPage(wpLicense, ExpandConstant('{cm:Requirements1}'), ExpandConstant('{cm:Requirements2}'));
 
  RequirementsLbl := TLabel.Create(WizardForm);
  with RequirementsLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(100), ScaleY(250), ScaleX(605), ScaleY(50));
    Transparent:=True;
    Font.Name:= 'Georgia';
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Caption := ExpandConstant('{cm:Requirements3}');
    Parent:=WizardForm;
  end;
 
  //================= Начало - Процессор =================//
 
  ProcessorLbl := TLabel.Create(WizardForm);
  with ProcessorLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(296), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:Processor}');
    Parent := WizardForm;
  end;
 
  ProcessorNameLbl := TLabel.Create(WizardForm);
  with ProcessorNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(278), ScaleY(296), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := DelSP(GetProcessorName) + ' @' + IntToStr(GetProcessorFreq) + ' MHz';
    Parent := WizardForm;
  end;
 
  RegGetSubkeyNames(HKLM, 'Hardware\Description\System\CentralProcessor', Keys)
 
  if (GetProcessorFreq*GetArrayLength(Keys)) < {#Processor} then
  begin
    RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
    AddLabelToArray(AsysReq,ProcessorNameLbl);
  end;
 
//================= Конец - Процессор =================//
 
//================= Начало - Видеоадаптер =================//
 
  VideoCardLbl := TLabel.Create(WizardForm);
  with VideoCardLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(327), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:VideoCard}');
    Parent := WizardForm;
  end;
 
  VideoCardNameLbl := TLabel.Create(WizardForm);
  with VideoCardNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(280), ScaleY(327), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := GetVideoCardName;
    Parent := WizardForm;
  end;
 
  Pdm:=' ['+IntToStr(GetPdmWidth)+'x'+IntToStr(GetPdmHeight)+']';
 
  VidRam:=GetVidMemLocal/1000000;
  if (VidRam<63) or (VidRam>1100) then vr:=VidRam
  else if VidRam<100 then vr:=64
  else if VidRam<200 then vr:=128
  else if VidRam<300 then vr:=256
  else if VidRam<400 then vr:=384
  else if VidRam<600 then vr:=512
  else if VidRam<800 then vr:=792
  else if VidRam>800 then vr:=1024;
 
  if VidRam=0 then VideoCardNameLbl.Caption:=ExpandConstant('{cm:DeviceDriver}')
    else VideoCardNameLbl.Caption:=DelSp(VideoCardNameLbl.Caption)+' ~'+IntToStr(vr)+' MB'+Pdm;
  if vr<{#VideoCard} then begin
    RequirementsLbl.Caption:=ExpandConstant('{cm:Requirements4}');
    AddLabelToArray(ASysReq,VideoCardNameLbl);
  end;
 
//================= Конец - Видеоадаптер =================//
 
//================= Начало - Звуковая карта =================//
 
  SoundCardLbl := TLabel.Create(WizardForm);
  with SoundCardLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(358), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:SoundCard}');
    Parent := WizardForm;
  end;
 
  SoundCardNameLbl := TLabel.Create(WizardForm);
  with SoundCardNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(278), ScaleY(358), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := GetSoundCardName;
    Parent := WizardForm;
  end;
 
  if GetSoundCards = 0 then begin
    RequirementsLbl.Caption:= ExpandConstant('{cm:Requirements4}');
    SoundCardNameLbl.Caption:= ExpandConstant('{cm:DeviceDriver}');
    AddLabelToArray(ASysReq,SoundCardNameLbl);
  end;
 
//================= Конец - Звуковая карта =================//
 
//================= Начало - ОЗУ =================//
 
  RAMLbl := TLabel.Create(WizardForm);
  with RAMLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(389), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:RAM}');
    Parent := WizardForm;
  end;
 
  RAMTotalLbl := TLabel.Create(WizardForm);
  with RAMTotalLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(279), ScaleY(389), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := IntToStr(GetSystemPhys + 1) + ' MB';
    Parent := WizardForm;
  end;
 
  if (GetSystemPhys+1)<{#RAM} then begin
    RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
    AddLabelToArray(ASysReq,RAMTotalLbl);
  end;
 
//================= Конец - ОЗУ =================//
 
//================= Начало - Операционная система =================//
 
  SystemLbl := TLabel.Create(WizardForm);
  with SystemLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(107), ScaleY(420), ScaleX(150), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := ExpandConstant('{cm:OperationSystem}');
    Parent := WizardForm;
  end;
 
  SystemNameLbl := TLabel.Create(WizardForm);
  with SystemNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(279), ScaleY(420), ScaleX(400), ScaleY(22));
    Transparent:=True;
    Font.Name:= 'Arial';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := GetWindowsName;
    Parent := WizardForm;
  end;
 
  GetWindowsVersionEx(Version);
 
  if not Version.NTPlatform or
    (Version.NTPlatform and (Version.Major<{#WinVerMajor})) or
    (Version.NTPlatform and (Version.Major={#WinVerMajor}) and (Version.Minor<{#WinVerMinor})) or
    (Version.NTPlatform and (Version.Major={#WinVerMajor}) and (Version.Minor={#WinVerMinor}) and (Version.ServicePackMajor<{#ServicePack})) then begin
    RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
    AddLabelToArray(ASysReq,SystemNameLbl);
  end;
 
//================= Конец - Операционная система =================//
 
////////////////////// SystemPage //////////////////////
 
////////////////////// SelectDirPage //////////////////////
 
  SelectDirBrowseLabel := TLabel.Create(WizardForm);
  with SelectDirBrowseLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(120), ScaleY(250), ScaleX(600), ScaleY(50));
    WordWrap:= True;
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Caption:= WizardForm.SelectDirBrowseLabel.Caption;
    Parent := WizardForm;
  end;
 
  DirEditLabel := TLabel.Create(WizardForm);
  with DirEditLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(127), ScaleY(308), ScaleX(446), ScaleY(15));
    WordWrap:= True;
    ShowAccelChar := False;
    Transparent:=True;
    Font.Name:= 'Arial'
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width);
    Parent := WizardForm;
  end;
 
  TotalSpaceLabel := TLabel.Create(WizardForm);
  with TotalSpaceLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(130), ScaleY(370), ScaleX(500), ScaleY(17));
    Transparent:=True;
    Font.Name:= 'Georgia';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Parent := WizardForm;
  end;
 
  FreeSpaceLabel := TLabel.Create(WizardForm);
  with FreeSpaceLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(130), ScaleY(390), ScaleX(500), ScaleY(17));
    Transparent:=True;
    Font.Name:= 'Georgia';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Parent := WizardForm;
  end;
 
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(130), ScaleY(410), ScaleX(500), ScaleY(17));
    Transparent:=True;
    Font.Name:= 'Georgia';
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Caption := ExpandConstant('{cm:NeedSpace} ') + MbOrTB({#NeedSize});
    Parent := WizardForm;
  end;
 
////////////////////// SelectDirPage //////////////////////
 
////////////////////// SelectProgramGroupPage //////////////////////
 
  SelectStartMenuFolderBrowseLabel := TLabel.Create(WizardForm);
  with SelectStartMenuFolderBrowseLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(120), ScaleY(250), ScaleX(600), ScaleY(50));
    WordWrap:= True;
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Caption:= WizardForm.SelectStartMenuFolderBrowseLabel.Caption;
    Parent := WizardForm;
  end;
 
  GroupEditLabel := TLabel.Create(WizardForm);
  with GroupEditLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(127), ScaleY(308), ScaleX(446), ScaleY(15));
    WordWrap:= True;
    ShowAccelChar := False;
    Transparent:=True;
    Font.Name:= 'Arial'
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption := MinimizePathName(WizardForm.GroupEdit.Text, GroupEditLabel.Font, GroupEditLabel.Width);
    Parent := WizardForm;
  end;
 
  NoIconsCheck:=BtnCreate(WizardForm.Handle,ScaleX(75),ScaleY(430),ScaleX(28),ScaleY(28),ExpandConstant('{tmp}\CheckBox.png'),8,True);
  BtnSetEvent(NoIconsCheck,BtnClickEventID,WrapBtnCallback(@NoIconsClick,1));
  BtnSetEvent(NoIconsCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
  BtnSetCursor(NoIconsCheck,GetSysCursorHandle(32649));
 
  NoIconsLabel := TLabel.Create(WizardForm);
  with NoIconsLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(115), ScaleY(437), ScaleX(275), ScaleY(17));
    OnClick:= @NoIconsLabelClick;
    Cursor:= CrHand;
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold,fsItalic];
    Caption := WizardForm.NoIconsCheck.Caption;
    Parent := WizardForm;
  end;
 
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text;
  WizardForm.GroupEdit.OnChange := @GroupChange;
 
////////////////////// SelectProgramGroupPage //////////////////////
 
////////////////////// SelectTasksPade //////////////////////
 
  SelectTasksPage := CreateCustomPage(wpSelectProgramGroup, ExpandConstant('{cm:TasksName}'), ExpandConstant('{cm:TasksDescription}'));
  SelectTasksLabel := TLabel.Create(WizardForm);
  with SelectTasksLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(120), ScaleY(250), ScaleX(600), ScaleY(50));
    WordWrap:= True;
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Caption:= ExpandConstant('{cm:SelectTasksLabel}');
    Parent := WizardForm;
  end;
 
  DesktopCheck:=BtnCreate(WizardForm.Handle,ScaleX(75),ScaleY(303),ScaleX(28),ScaleY(28),ExpandConstant('{tmp}\CheckBox.png'),8,True);
  BtnSetEvent(DesktopCheck,BtnClickEventID,WrapBtnCallback(@DesktopClick,1));
  BtnSetEvent(DesktopCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
  BtnSetCursor(DesktopCheck,GetSysCursorHandle(32649));
 
  DesktopLabel := TLabel.Create(WizardForm);
  with DesktopLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(115), ScaleY(310), ScaleX(265), ScaleY(17));
    OnClick:= @DesktopLabelClick;
    Cursor:= CrHand;
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold,fsItalic];
    Caption := ExpandConstant('{cm:Desktop}');
    Parent := WizardForm;
  end;
 
  QuickLaunchCheck:=BtnCreate(WizardForm.Handle,ScaleX(75),ScaleY(333),ScaleX(28),ScaleY(28),ExpandConstant('{tmp}\CheckBox.png'),8,True);
  BtnSetEvent(QuickLaunchCheck,BtnClickEventID,WrapBtnCallback(@QuickLaunchClick,1));
  BtnSetEvent(QuickLaunchCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
  BtnSetCursor(QuickLaunchCheck,GetSysCursorHandle(32649));
 
  QuickLaunchLabel := TLabel.Create(WizardForm);
  with QuickLaunchLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(115), ScaleY(340), ScaleX(345), ScaleY(17));
    OnClick:= @QuickLaunchLabelClick;
    Cursor:= CrHand;
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold,fsItalic];
    Caption := ExpandConstant('{cm:QuickLaunch}');
    Parent := WizardForm;
  end;
 
  LanguageLabel := TLabel.Create(WizardForm);
  with LanguageLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(115), ScaleY(410), ScaleX(400), ScaleY(17));
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold, fsItalic];
    Caption:= ExpandConstant('{cm:Language}');
    Parent := WizardForm;
  end;
 
  LngNameLbl := TLabel.Create(WizardForm);
  with LngNameLbl do begin
    AutoSize:=False;
    SetBounds(ScaleX(300), ScaleY(410), ScaleX(100), ScaleY(17));
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$00FFFF;
    Font.Style:=[fsBold, fsItalic];
    Caption:= ExpandConstant('{cm:LanguageRus}');
    Parent := WizardForm;
  end;
 
////////////////////// SelectTasksPade //////////////////////
 
////////////////////// InstallingPage //////////////////////
 
  StatusLabel := TLabel.Create(WizardForm);
  with StatusLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(120), ScaleY(245), ScaleX(558), ScaleY(17));
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold,fsItalic];
    Parent := WizardForm;
  end;
 
  FilenameLabel := TLabel.Create(WizardForm);
  with FilenameLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(120), ScaleY(270), ScaleX(558), ScaleY(17));
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 9;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold,fsItalic];
    Parent := WizardForm;
  end;
 
  ProgressInfoLabel := TLabel.Create(WizardForm);
  with ProgressInfoLabel do
  begin
    AutoSize:=False;
    SetBounds(ScaleX(80), ScaleY(355), ScaleX(638), ScaleY(17));
    Alignment := taCenter;
    Transparent:=True;
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold,fsItalic];
    Parent := WizardForm;
  end;
 
////////////////////// InstallingPage //////////////////////
 
////////////////////// FinishedPage //////////////////////
 
  FinishedHeadingLabel:= TLabel.Create(WizardForm);
  with FinishedHeadingLabel do begin
    AutoSize:=False
    SetBounds(ScaleX(75), ScaleY(185), ScaleX(648), ScaleY(65));
    WordWrap:=True
    Alignment := taCenter;
    Transparent:=True
    Font.Name:='Georgia';
    Font.Size:= 16;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold]
    Caption:= ExpandConstant('{cm:FinishedHeading}');
    Parent:=WizardForm
  end;
 
  FinishedLabel:=TLabel.Create(WizardForm);
  with FinishedLabel do begin
    AutoSize:=False
    SetBounds(ScaleX(75), ScaleY(275), ScaleX(648), ScaleY(200));
    WordWrap:=True
    Transparent:=True
    Font.Name:='Georgia';
    Font.Size:= 11;
    Font.Color:=$FFFFFF;
    Font.Style := [fsBold, fsItalic];
    Caption:= ExpandConstant('{cm:FinishedLabel}')+#13#13+ExpandConstant('{cm:FinishedLabel2}');
    Parent:=WizardForm
  end;
end;
 
////////////////////// FinishedPage //////////////////////
 
////////////////////// UninstallingPage //////////////////////
 
function InitializeUninstall: Boolean;
begin
  FileCopy(ExpandConstant('{app}\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
  FileCopy(ExpandConstant('{app}\InnoCallback.dll'), ExpandConstant('{tmp}\InnoCallback.dll'), False);
  FileCopy(ExpandConstant('{app}\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), False);
  FileCopy(ExpandConstant('{app}\Tiger.cjstyles'), ExpandConstant('{tmp}\Tiger.cjstyles'), False);
  LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
  Result:=True;
end;
 
//================== Удаление сохранений ==================//
 
procedure DeleteSavedGames(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usUninstall then
  if DirExists(ExpandConstant('{userdocs}')+'\NFS Undercover') then
  if MsgBox(ExpandConstant('{cm:DeleteSave}'), mbInformation, MB_YESNO) = idYes then
  DelTree(ExpandConstant('{userdocs}')+'\NFS Undercover', True, True, True)
end;
 
//================== Удаление сохранений ==================//
 
procedure InitializeUninstallProgressForm;
var
  h:HWND;
begin
  with UninstallProgressForm do
  begin
    ClientWidth:=ScaleX(798);
    ClientHeight:=ScaleY(543);
    BorderStyle:=bsSingle
    BorderIcons:=[biSystemMenu]
    OuterNotebook.Hide;
    InnerNotebook.Hide;
    Center;
    Bevel.Hide;
    CancelButton.Left:=ScaleX(660);
    CancelButton.Top:=ScaleY(495);
    CancelButton.Width:=CancelButton.Width+15;
 
    WizardUninstLabel := TLabel.Create(UninstallProgressForm);
    with WizardUninstLabel do begin
      AutoSize:=False;
      SetBounds(ScaleX(70), ScaleY(185), ScaleX(400), ScaleY(30));
      Transparent:=True;
      Font.Name:= 'Georgia'
      Font.Size:= 13;
      Font.Color:=$FFFFFF;
      Font.Style:=[fsBold];
      Caption:= ExpandConstant('{cm:WizardUninst}');
      Parent := UninstallProgressForm;
    end;
 
    UninstPageDescriptLabel := TLabel.Create(UninstallProgressForm);
    with UninstPageDescriptLabel do begin
      AutoSize:=False;
      SetBounds(ScaleX(100), ScaleY(215), ScaleX(600), ScaleY(50));
      WordWrap:= True;
      Transparent:=True;
      Font.Name:= 'Georgia'
      Font.Size:= 10;
      Font.Color:=$FFFFFF;
      Font.Style:=[fsBold, fsItalic];
      Caption:= ExpandConstant('{cm:UninstDescript}');
      Parent := UninstallProgressForm;
    end;
 
    StatusUninstLabel := TLabel.Create(UninstallProgressForm);
    with StatusUninstLabel do begin
      AutoSize:=False;
      SetBounds(ScaleX(120), ScaleY(250), ScaleX(560), ScaleY(17));
      Transparent:=True;
      Font.Name:= 'Georgia'
      Font.Size:= 10;
      Font.Color:=$FFFFFF;
      Font.Style:=[fsBold, fsItalic];
      Caption:= ExpandConstant('{cm:StatusUninst}');
      Parent := UninstallProgressForm;
    end;
 
    Installing := TLabel.Create(UninstallProgressForm);
    with  Installing do begin
      AutoSize:=False;
      SetBounds(ScaleX(170), ScaleY(96), ScaleX(114), ScaleY(20));
      Transparent:=True;
      Font.Name:= 'Arial';
      Font.Size:= 10;
      Font.Color:=$FFFFFF;
      Font.Style:=[fsBold];
      Caption := ExpandConstant('{cm:Installing}');
      Parent := UninstallProgressForm;
    end;
 
    Uninstalling := TLabel.Create(UninstallProgressForm);
    with  Uninstalling do begin
      AutoSize:=False;
      SetBounds(ScaleX(570), ScaleY(96), ScaleX(114), ScaleY(20));
      Transparent:=True;
      Font.Name:= 'Arial';
      Font.Size:= 10;
      Font.Color:=$00FFFF;
      Font.Style:=[fsBold];
      Caption := ExpandConstant('{cm:Uninstalling}');
      Parent := UninstallProgressForm;
    end;
 
    ProgressInfoLabel := TLabel.Create(UninstallProgressForm);
    with ProgressInfoLabel do begin
      AutoSize:=False;
      SetBounds(ScaleX(120), ScaleY(355), ScaleX(560), ScaleY(17));
      Alignment := taCenter;
      Transparent:=True;
      Font.Name:= 'Georgia';
      Font.Size:= 10;
      Font.Color:=$FFFFFF;
      Font.Style:=[fsBold,fsItalic];
      Parent := UninstallProgressForm;
    end;
 
    h:=UninstallProgressForm.Handle;
 
    FileCopy(ExpandConstant('{app}\WizardImage.jpg'), ExpandConstant('{tmp}\WizardImage.jpg'), False);
    FileCopy(ExpandConstant('{app}\Workspace.png'), ExpandConstant('{tmp}\Workspace.png'), False);
    FileCopy(ExpandConstant('{app}\StatusPanel.png'), ExpandConstant('{tmp}\StatusPanel.png'), False);
    FileCopy(ExpandConstant('{app}\StatusPanel2.png'), ExpandConstant('{tmp}\StatusPanel2.png'), False);
    FileCopy(ExpandConstant('{app}\button.png'), ExpandConstant('{tmp}\button.png'), False);
 
    ImgLoad(h,ExpandConstant('{tmp}\WizardImage.jpg'),ScaleX(0),ScaleY(0),UninstallProgressForm.ClientWidth,UninstallProgressForm.ClientHeight,True,True);
    ImgLoad(h,ExpandConstant('{tmp}\Workspace.png'),ScaleX(42), ScaleY(160),ScaleX(714),ScaleY(309),True,True);
    ImgLoad(h,ExpandConstant('{tmp}\StatusPanel.png'),ScaleX(0), ScaleY(95),UninstallProgressForm.ClientWidth,ScaleY(20),True,True);
    ImgLoad(h,ExpandConstant('{tmp}\StatusPanel2.png'),ScaleX(399), ScaleY(95),ScaleX(399), ScaleY(20),True,True);
 
    UPFButtonFont:=TFont.Create;
    UPFButtonFont.Style:=[fsBold];
 
    UninstallProgressForm.CancelButton.Visible:=False;
    with UninstallProgressForm.CancelButton do begin
      hCancelUninstBtn:=BtnCreate(h,Left-8,Top-8,Width+16,Height+16,ExpandConstant('{tmp}\button.png'),18,False);
      BtnSetText(hCancelUninstBtn, UninstallProgressForm.CancelButton.Caption);
      BtnSetFont(hCancelUninstBtn,UPFButtonFont.Handle);
      BtnSetFontColor(hCancelUninstBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
      BtnSetEnabled(hCancelUninstBtn,False);
    end;
  end;
  ImgApplyChanges(h);
end;
 
////////////////////// UninstallingPage //////////////////////
 
procedure HideComponents;
begin
  WelcomeLabel1.Hide;
  WelcomeLabel2.Hide;
  RequirementsLbl.Hide;
  ProcessorLbl.Hide;
  ProcessorNameLbl.Hide;
  VideoCardLbl.Hide;
  VideoCardNameLbl.Hide;
  SoundCardLbl.Hide;
  SoundCardNameLbl.Hide;
  RAMLbl.Hide;
  RAMTotalLbl.Hide;
  SystemLbl.Hide;
  SystemNameLbl.Hide;
  SelectDirBrowseLabel.Hide;
  DirEditLabel.Hide;
  TotalSpaceLabel.Hide;
  FreeSpaceLabel.Hide;
  NeedSpaceLabel.Hide;
  NoIconsLabel.Hide;
  SelectStartMenuFolderBrowseLabel.Hide;
  WizardForm.GroupBrowseButton.Hide;
  GroupEditLabel.Hide;
  SelectTasksLabel.Hide;
  DesktopLabel.Hide;
  QuickLaunchLabel.Hide;
  LanguageLabel.Hide;
  LngNameLbl.Hide;
  StatusLabel.Hide;
  FilenameLabel.Hide;
  FinishedHeadingLabel.Hide;
  FinishedLabel.Hide;
  ProgressInfoLabel.Hide;
end;
 
procedure ShowComponents(CurPageID: Integer);
begin
  PageNameLabel.Caption:=WizardForm.PageNameLabel.Caption
  PageDescriptionLabel.Caption:=WizardForm.PageDescriptionLabel.Caption
 
  case CurPageID of
    wpWelcome:
    begin
      Welcome.Font.Color := $00FFFF;
      ImgSetPosition(StatusPanel,ScaleX(0),ScaleY(95),ScaleX(114),ScaleY(20));
      WelcomeLabel1.Show
      WelcomeLabel2.Show
    end;
 
    SystemPage.ID:
    begin
      System.Font.Color := $00FFFF;
      ImgSetPosition(StatusPanel,ScaleX(114),ScaleY(95),ScaleX(114),ScaleY(20));
      ImgSetVisibility(RequirementsPanel,True);
      RequirementsLbl.Show;
      ProcessorLbl.Show;
      ProcessorNameLbl.Show;
      VideoCardLbl.Show;
      VideoCardNameLbl.Show;
      SoundCardLbl.Show;
      SoundCardNameLbl.Show;
      RAMLbl.Show;
      RAMTotalLbl.Show;
      SystemLbl.Show;
      SystemNameLbl.Show;
    end;
 
    wpSelectDir:
    begin
      Catalogue.Font.Color := $00FFFF;
      ImgSetPosition(StatusPanel,ScaleX(228),ScaleY(95),ScaleX(114),ScaleY(20));
      ImgSetVisibility(Edit,True);
      ImgSetVisibility(DirFolder,True);
      ImgSetVisibility(HardDrivePanel,True);
      ImgSetVisibility(HDD,True);
      BtnSetVisibility(hDirBrowseBtn,True);
      SelectDirBrowseLabel.Show
      DirEditLabel.Show;
      TotalSpaceLabel.Show;
      FreeSpaceLabel.Show;
      NeedSpaceLabel.Show;
    end;
 
    wpSelectProgramGroup:
    begin
      StartMenu.Font.Color := $00FFFF;
      ImgSetPosition(StatusPanel,ScaleX(342),ScaleY(95),ScaleX(114),ScaleY(20));
      ImgSetVisibility(GroupFolder,True);
      ImgSetVisibility(Edit,True);
      BtnSetVisibility(hGroupBrowseBtn,True);
      BtnSetVisibility(NoIconsCheck,True);
      SelectStartMenuFolderBrowseLabel.Show;
      WizardForm.GroupBrowseButton.Show;
      GroupEditLabel.Show;
      NoIconsLabel.Show;
    end;
 
    SelectTasksPage.ID:
    begin
      Tasks.Font.Color := $00FFFF;
      ImgSetPosition(StatusPanel,ScaleX(456),ScaleY(95),ScaleX(114),ScaleY(20));
      BtnSetVisibility(DesktopCheck,True);
      BtnSetVisibility(QuickLaunchCheck,True);
      BtnSetVisibility(DirectXCheck,True);
      BtnSetVisibility(LanguageButton[1],True);
      BtnSetVisibility(LanguageButton[2],True);
      BtnSetChecked(DirectXCheck,True);
      SelectTasksLabel.Show;
      DesktopLabel.Show;
      QuickLaunchLabel.Show;
      LanguageLabel.Show;
      LngNameLbl.Show;
      WizardForm.NextButton.Caption:=SetupMessage(msgButtonInstall);
    end;
 
    wpInstalling:
    begin
      Installing.Font.Color := $00FFFF;
      ImgSetPosition(StatusPanel,ScaleX(570),ScaleY(95),ScaleX(114),ScaleY(20));
      StatusLabel.Show;
      FilenameLabel.Show;
      ProgressInfoLabel.Show;
    end;
 
    wpFinished:
    begin
      Finish.Font.Color := $00FFFF;
      ImgSetPosition(StatusPanel,ScaleX(684),ScaleY(95),ScaleX(114),ScaleY(20));
      BtnSetPosition(hNextBtn, ScaleX(657),ScaleY(487),ScaleX(106),ScaleY(39));
      FinishedHeadingLabel.Show;
      FinishedLabel.Show;
    end
  end;
end;
 
//************************************************ [Конец - Компоненты страниц] ***************************************************//
 
//************************************************ [Начало - ПрогрессБары] ***************************************************//
 
function LongintToStringTime(t:Longint):string;
var
  h,m,s:integer;
begin
  h:=t div 3600;
  t:=t-h*3600;
  m:=t div 60;
  s:=t-m*60;
  Result:='';
  if h>0 then Result:=Result+IntToStr(h)+ExpandConstant(' {cm:Hour} ');
  if (m>0) or (h>0) then Result:=Result+IntToStr(m)+ExpandConstant(' {cm:Min} ');
  if (m>0) or (h>0) or (s>0) then Result:=Result+IntToStr(s)+ExpandConstant(' {cm:Sec}');
end;
 
function ImgPBCreate(hParent :HWND; bk, pb :ansistring; Left, Top, Width, Height :integer):TImgPB;
begin
  Result.Left:=Left+ScaleX(3);
  Result.Top:=Top+ScaleY(3);
  Result.Width:=0;
  Result.Height:=Height-ScaleY(6);
  Result.MaxWidth:=Width-ScaleX(6);
  if Length(pb)>0 then Result.img1:=ImgLoad(hParent,pb,Result.Left,Result.Top,0,Result.Height,True,False) else Result.img1:=0;
  if Length(bk)>0 then Result.img2:=ImgLoad(hParent,bk,Left,Top,Width,Height,True,False) else Result.img2:=0;
end;
 
procedure ImgPBSetPosition(var PB :TImgPB; Percent :Extended);
var
  NewWidth:integer;
begin
  if PB.img1<>0 then begin
    NewWidth:=Round(PB.MaxWidth*Percent/100);
    if PB.Width<>NewWidth then begin
      PB.Width:=NewWidth;
      ImgSetPosition(PB.img1,PB.Left,PB.Top,PB.Width,PB.Height);
    end;
  end;
end;
 
procedure ImgPBDelete(var PB :TImgPB);
begin
  if PB.img1<>0 then ImgRelease(PB.img1);
  if PB.img2<>0 then ImgRelease(PB.img2);
  PB.img1:=0;
  PB.img2:=0;
end;
 
function PBProc(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
  dt,at,pr,i1,i2: Extended;
  lt: Longint;
  p: string;
  tc: DWORD;
begin
  Result:=CallWindowProc(PBOldProc,h,Msg,wParam,lParam);
  if (Msg=$402) and (WizardForm.ProgressGauge.Position>WizardForm.ProgressGauge.Min) then begin
    i1:=WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min;
    i2:=WizardForm.ProgressGauge.Max-WizardForm.ProgressGauge.Min;
 
    tc:=GetTickCount;
    if tc-eTime>=1000 then begin
      dt:=(tc-sTime)/1000;
      at:=i2*dt/i1;
      lt:=Round(at-dt)
      TimeLeft:=LongintToStringTime(lt);
      eTime:=tc;
    end;
 
    pr:=i1*100/i2;
    p:=Format('%f',[pr])+' %. ';
    if Length(TimeLeft)>0 then ProgressInfoLabel.Caption:=ExpandConstant('{cm:AllProgress} ')+p+ExpandConstant('{cm:Remains} ')+TimeLeft;
 
    if StatusLabel.Caption<>WizardForm.StatusLabel.Caption then StatusLabel.Caption:=WizardForm.StatusLabel.Caption;
    if FileNameLabel.Caption<>WizardForm.FilenameLabel.Caption then FileNameLabel.Caption:=WizardForm.FilenameLabel.Caption;
 
    //Cлайд-шоу по процентам
    //Использовать при отключении модуля "FreeArc"
 
    {if pr-OldPosition>=ProgressStep then begin
      OldPosition:=OldPosition+ProgressStep;
      ImgSetVisibility(AImg[CurrentImage],False);
      CurrentImage:=CurrentImage+1;
      if CurrentImage>GetArrayLength(AImg)-1 then CurrentImage:=0;
      ImgSetVisibility(AImg[CurrentImage],True);
    end;}
 
    //Cлайд-шоу по таймеру
    //Использовать при подключении модуля "FreeArc"
 
    if GetTickCount-LastTimerEvent>5000{5 секунд} then begin
      LastTimerEvent:= GetTickCount;
      ImgSetVisibility(AImg[CurrentImage],False);
      CurrentImage:=CurrentImage+1;
      if CurrentImage=GetArrayLength(AImg) then CurrentImage:=0;
      ImgSetVisibility(AImg[CurrentImage],True);
    end;
 
    ImgPBSetPosition(NewPB,pr);
    ImgApplyChanges(WizardForm.Handle);
  end;
end;
 
function PBProcUninst(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
  pr,i1,i2:Extended;
  p:string;
begin
  if Msg=$2 then SetWindowLong(h,-4,PBOldProc);
  Result:=CallWindowProc(PBOldProc,h,Msg,wParam,lParam);
  if (Msg=$402) and (UninstallProgressForm.ProgressBar.Position>UninstallProgressForm.ProgressBar.Min) then begin
    i1:=UninstallProgressForm.ProgressBar.Position-UninstallProgressForm.ProgressBar.Min;
    i2:=UninstallProgressForm.ProgressBar.Max-UninstallProgressForm.ProgressBar.Min;
    pr:=i1*100/i2;
    p:=Format('%f',[pr])+' %';
    ProgressInfoLabel.Caption:=ExpandConstant('{cm:AllProgressUninst} ')+p;
    ImgPBSetPosition(NewPB,pr);
    ImgApplyChanges(UninstallProgressForm.Handle);
  end;
end;
 
procedure AllCancel;
begin
  SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
  ImgSetVisibility(AImg[CurrentImage],False);
  ImgSetVisibility(WizardImg,True);
  ImgPBDelete(NewPB);
  ImgApplyChanges(WizardForm.Handle);
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
  UnpackingArc(CurStep);//Закомментировать строку при отключении модуля "FreeArc"
  case CurStep of
    ssInstall: begin
      if GetArrayLength(ADisk)>0 then begin
        KillTimer(WizardForm.Handle,WFDiskTimerID);
           SetArrayLength(ADisk,0);
      end;
      if GetArrayLength(ASysReq)>0 then begin
        KillTimer(WizardForm.Handle,WFSysReqTimerID);
          SetArrayLength(ASysReq,0);
      end;
 
      WizardForm.ProgressGauge.Visible:=False;
 
      OldPosition:=0;
      CurrentImage:=0;
      ImgSetVisibility(WizardImg,False);
      ImgSetVisibility(AImg[0],True);
 
      ExtractTemporaryFile('ProgressBackground.png');
      ExtractTemporaryFile('ProgressImg.png');
      NewPB:=ImgPBCreate(WizardForm.Handle, ExpandConstant('{tmp}\ProgressBackground.png'), ExpandConstant('{tmp}\ProgressImg.png'),ScaleX(119),ScaleY(300),ScaleX(560),ScaleY(25));
 
      ImgApplyChanges(WizardForm.Handle);
        sTime:=GetTickCount;
      eTime:=sTime;
      ProgressStep:=100 div GetArrayLength(AImg);
 
      PBOldProc:=SetWindowLong(WizardForm.ProgressGauge.Handle,-4,CallBackProc(@PBProc,4));
    end;
    ssPostInstall: AllCancel;
  end;
end;
 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  DeleteSavedGames(CurUninstallStep);
  case CurUninstallStep of
    usUninstall: begin
      UninstallProgressForm.ProgressBar.Visible:=False;
 
      FileCopy(ExpandConstant('{app}\ProgressBackground.png'), ExpandConstant('{tmp}\ProgressBackground.png'), False);
      FileCopy(ExpandConstant('{app}\ProgressImg.png'), ExpandConstant('{tmp}\ProgressImg.png'), False);
 
      NewPB:=ImgPBCreate(UninstallProgressForm.Handle, ExpandConstant('{tmp}\ProgressBackground.png'), ExpandConstant('{tmp}\ProgressImg.png'),ScaleX(119),ScaleY(300),ScaleX(560),ScaleY(25));
      ImgApplyChanges(UninstallProgressForm.Handle);
      PBOldProc:=SetWindowLong(UninstallProgressForm.ProgressBar.Handle,-4,CallBackProc(@PBProcUninst,4));
    end;
  end;
end;
 
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if CurPageID=wpInstalling then begin
    Confirm:=False;
    Cancel:=ExitSetupMsgBox;
    if Cancel then begin
      AllCancel;
      StatusLabel.Caption:=SetupMessage(msgStatusRollback);
      FilenameLabel.Hide;
      ProgressInfoLabel.Hide;
      WizardForm.CancelButton.Enabled:=False;
    end;
  end;
end;
 
//************************************************ [Конец - ПрогрессБары] ***************************************************//
 
procedure InitializeWizard;
begin
  CreateStatusPanel;
  CreateWizardImage;
  ButtonsTextures;
  InsertMusic;
  CreatePageComponents;
  CreateArcComponents;//Закомментировать строку при отключении модуля "FreeArc"
end;
 
procedure CurPageChanged(CurPageID: Integer);
begin
  SetStateNewButtons;
  Welcome.Font.Color := $FFFFFF;
  System.Font.Color := $FFFFFF;
  Catalogue.Font.Color := $FFFFFF;
  StartMenu.Font.Color := $FFFFFF;
  Tasks.Font.Color := $FFFFFF;
  Installing.Font.Color :=$FFFFFF;
  Finish.Font.Color := $FFFFFF;
 
  HideComponents;
  ImgSetVisibility(RequirementsPanel,False);
  ImgSetVisibility(Edit,False);
  ImgSetVisibility(DirFolder,False);
  BtnSetVisibility(hDirBrowseBtn,False);
  ImgSetVisibility(HardDrivePanel,False);
  ImgSetVisibility(HDD,False);
  ImgSetVisibility(GroupFolder,False);
  BtnSetVisibility(hGroupBrowseBtn,False);
  BtnSetVisibility(NoIconsCheck,False);
  BtnSetVisibility(DesktopCheck,False);
  BtnSetVisibility(QuickLaunchCheck,False);
  BtnSetVisibility(DirectXCheck,False);
  BtnSetVisibility(LanguageButton[1],False);
  BtnSetVisibility(LanguageButton[2],False);
 
  ShowComponents(CurPageID);
  ImgApplyChanges(WizardForm.Handle);
 
  UnpackingArcFinished(CurPageID);//Закомментировать строку при отключении модуля "FreeArc"
 
  if GetArrayLength(ASysReq)>0 then
    if CurPageID=SystemPage.ID then SetTimer(WizardForm.Handle,WFSysReqTimerID,1000,WrapTimerProc(@SysReqFlashing,4))
      else KillTimer(WizardForm.Handle,WFSysReqTimerID);
 
  if CurPageID=wpSelectDir then begin
    OldDisk:='';
    GetFreeSpaceCaption(nil);
  end else if GetArrayLength(ADisk)>0 then KillTimer(WizardForm.Handle,WFDiskTimerID);
end;
 
procedure DeinitializeSetup;
begin
  gdipShutdown;
  //if ContinueInstall then begin//Закомментировать строку при отключении модуля "AutoRun"
    BASS_Stop;
    BASS_Free;
    WFButtonFont.Free;
    ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')),0);
      UnloadSkin;
      SetArrayLength(AImg,0);
  //end;//Закомментировать строку при отключении модуля "AutoRun"
end;
 
procedure DeinitializeUninstall;
begin
  gdipShutdown;
  UnloadSkin;
  if Assigned(UPFButtonFont) then UPFButtonFont.Free;
end;
 
[Registry]
Root: HKLM; SubKey: SOFTWARE\Akella Games\POP-TST; ValueType: string; ValueName: Path; ValueData: E:\Games\Prince Of Peria - Пески времени
Root: HKLM; SubKey: SOFTWARE\Akella Games\POP-TST; ValueType: string; ValueName: Uninst; ValueData: C:\Program Files\InstallShield Installation Information\{{84ED213F-B9A7-4504-86AD-76D7DC37A6CC}\setup.exe

Всего записей: 53 | Зарегистр. 25-10-2010 | Отправлено: 07:18 26-10-2010 | Исправлено: skitonline, 09:23 26-10-2010
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Inno Setup (создание инсталяционных пакетов)
Widok (23-11-2010 10:55): лимит страниц. продолжаем здесь


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru