Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Kasoi
Дата сообщения: 22.07.2011 19:36
crysis1830

ты бы скрипт выложил а потом помощи просил, а то экстрасенсов здесь нет =\
Автор: crysis1830
Дата сообщения: 23.07.2011 00:26
Kasoi

воть [more]

#define GameID "{E6D22FE1-AB5F-42CA-9480-6F70B96DDD88}"

#define GameName "Need for Speed Hot Pursuit 2"
#define GameVerName "Need for Speed Hot Pursuit 2 [v 2.4.2]"

#define NeedSize "674"

#define Processor "1100"
#define VideoCard "32"
#define RAM "64"
#define WinVerMajor "5"
#define WinVerMinor "1"
#define ServicePack "1"

#define ArcLocation "{src}\*.bin"

[Setup]
AppId={{#GameID}
AppName={#GameName}
AppVerName={#GameName}
AppPublisher=Electronic Arts
AppPublisherURL=http://www.ea.com
AppVersion=2.4.2
AppSupportURL={app}\Support\EA Help\Ru\EA_HELP_RU.htm
AppUpdatesURL=http://www.needforspeed.com/downloads
AppReadmeFile={group}\ReadMe.lnk
DefaultDirName={pf}\Electronic Arts\Need for Speed Hot Pursuit 2
DefaultGroupName=Electronic Arts\Need for Speed Hot Pursuit 2
OutputBaseFilename=setup
DirExistsWarning=no
MinVersion=0,5.01
VersionInfoDescription={#GameName}
SetupIconFile=G:\1.ico
UninstallFilesDir={app}\Uninstall
Compression=lzma/ultra
DiskSpanning=no
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;

[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=English
rus.StartMenuLbl=Нажмите «Установить», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
rus.TasksName=Выберите дополнительные задачи
rus.TasksDescription=Какие дополнительные задачи необходимо выполнить?
rus.DirectX=Обновить 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}\nfs.exe"; WorkingDir: {app}; Comment: "Запустить игру"; Check: NoIcons
Name: "{group}\{cm:Uninstall}"; Filename: "{uninstallexe}"; IconFilename: "{app}\5.ico"; Comment: "Удалить игру"; Check: NoIcons
Name: "{userdesktop}\{#GameName}"; Filename: "{app}\nfs.exe"; WorkingDir: {app}; Check: Desktop;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#GameName}"; Filename: "{app}\nfs.exe"; WorkingDir: {app}; Check: QuickLaunch;

[UninstallDelete]
Type: filesandordirs; Name: "{app}"

[Run]
Filename: "{src}\Redist\DirectX\DXSETUP.exe"; WorkingDir: "{src}\DirectX"; Parameters: "/silent"; Check: DirectX; Flags: waituntilterminated; BeforeInstall: DirectXProgress;

[Registry]
Root: HKLM; SubKey: SOFTWARE\EA Games; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed™ Undercover; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: CD Drive; ValueData: {drive:{src}} ; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: ProductName; ValueData: Need for Speed™ Undercover; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Folder; ValueData: {group}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Installed From; ValueData: {src}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Locale; ValueData: en_US; Check: not Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Locale; ValueData: Ru; Check: Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Language; ValueData: English (US); Check: not Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Language; ValueData: Russian; Check: Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Patch URL; ValueData: http://www.needforspeed.com/downloads; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Product GUID; ValueData: {{E6D22FE1-AB5F-42CA-9480-6F70B96DDD88}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Suppression Exe; ValueData: nfs.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover; ValueType: string; ValueName: Registration; ValueData: Software\Electronic Arts\EA Games\Need for Speed Undercover\ergc; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover\1.0; ValueType: string; ValueName: DisplayName; ValueData: Need for Speed Undercover; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover\1.0; ValueType: dword; ValueName: Language; ValueData: 1; Check: not Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover\1.0; ValueType: dword; ValueName: Language; ValueData: 16; Check: Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover\1.0; ValueType: string; ValueName: LanguageName; ValueData: English (US); Check: not Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover\1.0; ValueType: string; ValueName: LanguageName; ValueData: Russian; Check: Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\EA Games\Need for Speed Undercover\1.0; ValueType: string; ValueName: ProgramGroup; ValueData: {group}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core\Installed Games; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core\Installed Games\PUT_YOUR_CONTENTID_HERE; ValueType: string; ValueName: lang; ValueData: ru; Check: Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Core\Installed Games\PUT_YOUR_CONTENTID_HERE; ValueType: string; ValueName: lang; ValueData: en-us; Check: not Lang; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Need for Speed Undercover; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Electronic Arts\EA Games\Need for Speed Undercover\ergc; ValueType: string; ValueData: XX6EEMEQUH6TKCUKEBPN; Flags: uninsdeletevalue uninsdeletekeyifempty

[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 "AutoRun.iss"
#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 DirectXClick(hBtn:HWND);
begin
sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
if BtnGetChecked(hBtn) then DirectXLabel.Font.Color:=$00FFFF else DirectXLabel.Font.Color:=$FFFFFF;
end;

procedure DirectXLabelClick(Sender:TObject);
begin
BtnSetChecked(DirectXCheck, not BtnGetChecked(DirectXCheck));
DirectXClick(DirectXCheck);
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;

DirectXCheck:=BtnCreate(WizardForm.Handle,ScaleX(75),ScaleY(363),ScaleX(28),ScaleY(28),ExpandConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(DirectXCheck,BtnClickEventID,WrapBtnCallback(@DirectXClick,1));
BtnSetEvent(DirectXCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(DirectXCheck,GetSysCursorHandle(32649));

DirectXLabel := TLabel.Create(WizardForm);
with DirectXLabel do begin
AutoSize:=False;
SetBounds(ScaleX(115), ScaleY(370), ScaleX(145), ScaleY(17));
OnClick:= @DirectXLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Color:=$00FFFF;
Font.Style:=[fsBold,fsItalic];
Caption := ExpandConstant('{cm:DirectX}');
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;

LanguageButton[1]:=BtnCreate(WizardForm.Handle,ScaleX(395),ScaleY(403),ScaleX(48),ScaleY(36),ExpandConstant('{tmp}\ru.png'),0,True);
BtnSetEvent(LanguageButton[1],BtnClickEventID,WrapBtnCallback(@SelectLanguage,1));
BtnSetEvent(LanguageButton[1],BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(LanguageButton[1],GetSysCursorHandle(32649));

LanguageButton[2]:=BtnCreate(WizardForm.Handle,ScaleX(460),ScaleY(403),ScaleX(48),ScaleY(36),ExpandConstant('{tmp}\us.png'),0,True);
BtnSetEvent(LanguageButton[2],BtnClickEventID,WrapBtnCallback(@SelectLanguage,1));
BtnSetEvent(LanguageButton[2],BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(LanguageButton[2],GetSysCursorHandle(32649));

BtnSetChecked(LanguageButton[1],True);

////////////////////// 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;
DirectXLabel.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],false);
BtnSetVisibility(LanguageButton[2],false);
BtnSetChecked(DirectXCheck,True);
SelectTasksLabel.Show;
DesktopLabel.Show;
QuickLaunchLabel.Show;
DirectXLabel.Show;
LanguageLabel.hide;
LngNameLbl.hide;
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;
[/more]

если можно еще выстави чтобы DirectX по галочки устанавливался после установки
Автор: Kasoi
Дата сообщения: 23.07.2011 10:06
crysis1830

http://rghost.ru/15503671

Только раскомментируй все строки где стоит


Код: // Закомментировать строку при отключении модуля "FreeArc"
Автор: ssv14
Дата сообщения: 23.07.2011 11:23
ни как не получается подружить трэкерную музыку с bass.dll v2.4.7

кто-нибудь может помочь? за основу брал код, приведенный в примере для МР3
[more]

[Code]
const
BASS_MUSIC_RAMP = 1;
BASS_MUSIC_RAMPS = 2;
BASS_MUSIC_LOOP = 4;
BASS_MUSIC_FT2MOD = 16;
BASS_MUSIC_PT1MOD = 32;
BASS_MUSIC_SURROUND = 512;
BASS_MUSIC_SURROUND2 = 1024;


function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_MusicLoad(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD; frec: DWORD): Boolean;
external 'BASS_MusicLoad@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_ChannelGetLevel(handle: DWORD): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_Start: Boolean;
external 'BASS_Start@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';


function InitializeSetup(): Boolean;

var
Mus: HWND;
modName: string;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('BUSSI.S3M');
modName := ExpandConstant('{tmp}\BUSSI.S3M');
BASS_Init(-1, 44100, 0, 0, 0);
Mus := BASS_MusicLoad(FALSE, PChar(modName), 0, 0, BASS_MUSIC_SURROUND, 0);
BASS_Start();
BASS_ChannelPlay(Mus, False);
BASS_ChannelGetLevel();
Result := True;
end;

procedure DeinitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

[/more]
Автор: shcapa
Дата сообщения: 23.07.2011 18:30
[more=Скрипт][Setup]
AppName=Gradient
AppVerName=Gradient
CreateAppDir=false

[code]
function InitializeSetup(): Boolean;
begin
MsgBox('сообщение', mbInformation, MB_OK);
result:=true;
end; [/more]

Был такой пример можно как-то сделать чтобы сперва шла проверка файла и если его нету появлялось это окошко
Автор: troyan90
Дата сообщения: 23.07.2011 18:54
shcapa
[more]
Код: function InitializeSetup(): Boolean;
begin
if not FileExists(ExpandConstant('{sd}\2.jpg')) then
MsgBox('файл отсутствует', mbError, MB_OK);
result:=true;
end;
Автор: Kasoi
Дата сообщения: 23.07.2011 18:59
shcapa
Читайте справку. Там очень много полезного и интересного.

[code]
function InitializeSetup(): Boolean;
begin
if not FileExists(ExpandConstant('file')) then
MsgBox('сообщение', mbInformation, MB_OK);
result:=true;
end;



Упс, немного опоздал.
Автор: shcapa
Дата сообщения: 23.07.2011 19:01
troyan90 ,Kasoi Спасибо то что нужно
Автор: Sergey_Demchuk
Дата сообщения: 23.07.2011 22:24
Есть некий список компонентов.
Использую WizardForm.ComponentsList.OnItemMouseMove := @ItemMouseMove;
для того чтобы при наведении на компонент списка появлялась картинка. А как сделать чтобы если элемент списка терял фокус мышкой, это изображение удалялось?
Автор: Gnom3
Дата сообщения: 24.07.2011 12:39
Sergey_Demchuk
Можно так попробовать:

Код:
procedure ComponentsListMouseLeave(Sender: TObject);
begin
// тут все действия при снятии фокуса с лубого компонента ComponentsList-а
end;
procedure InitializeWizard();
begin
WizardForm.ComponentsList.OnMouseLeave := @ComponentsListMouseLeave;
end;
Автор: Sergey_Demchuk
Дата сообщения: 24.07.2011 15:50
Gnom3
Не работает пока.

Пробовал применять метод Image.Free
Это тот скрипт, что ты мне дал ранее...
http://rghost.ru/15610941

Автор: vintage 1
Дата сообщения: 24.07.2011 16:00
Sergey_Demchuk
Думаю этот тебе пример поможет:
Скачать пример
Автор: ssv14
Дата сообщения: 24.07.2011 16:26
подскажите пожалуйтса, а как добавть в [more=код распаковки OGG]
[Setup]
AppName=RecodeOgg
AppVerName=RecodeOgg
OutputDir=.
OutputBaseFilename=RecodeOgg
DefaultDirName={pf}\RecodeOgg
AppendDefaultDirName=False
DisableDirPage=True

[files]
Source: oggdec.exe; DestDir: {app};
Source: oggs\*; DestDir: {app};
Source: oggs\*; DestDir: {app}\Data;

[code]
var
Files: Array of String;
S: String;
n: Integer;

Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;
Begin
SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк
Repeat k:= Pos(Cut,Text);
if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE
end;
SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;
if k = 0 then
Result[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + Length(Cut));
end;
Until Length(Text) * k = 0;
End;

procedure FindFiles(FromDir: String; Mask: String);
var FSR, DSR: TFindRec; FindResult: Boolean;
begin
FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)
while FindResult do begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin
S:= S + AddBackslash(fromDir) + FSR.Name +'|';
end;
FindResult:= FindNext(FSR);
end;
FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)
while FindResult do begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin
FindFiles(AddBackSlash(FromDir)+ DSR.Name, Mask)
end;
FindResult:= FindNext(DSR);
end;
FindClose(FSR); FindClose(DSR)
end;

procedure RecodeOgg;
var ResultCode: integer; CurFile: String;
begin
FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке
Files:= StringToArray(S, '|') //Переводим в массив
WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов
for n:=(GetArrayLength(Files)-1) downto 0 do begin
CurFile:= Files[n]
StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+ AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер
DeleteFile(Files[n]) //Удаляем ненужный файл
WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар
WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;
end;
DeleteFile(ExpandConstant('{app}\oggdec.exe'))
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
WizardForm.ProgressGauge.Position := 0;
WizardForm.StatusLabel.Caption := 'Извлечение аудио файлов...';
RecodeOgg;
end;
end;
[/more]

файлом "oggdec.exe -Q" еще и распаковку файлов WV файлом "wvunpack.exe -t -y файлы.WV"
Автор: crysis1830
Дата сообщения: 24.07.2011 16:46
помогите пожалуйста я уже не знаю что делать не идет распаковка архивов проверти скрипт

http://rghost.ru/15615791
Автор: Sergey_Demchuk
Дата сообщения: 24.07.2011 17:01
vintage 1
А со стандартным список такого делать нельзя?
У меня просто много чего завязано на секцию [Components]
Автор: Gnom3
Дата сообщения: 24.07.2011 20:37
Sergey_Demchuk
[more=код][Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: "btnimage.bmp"; Flags: dontcopy solidbreak
Source: "BGImage.bmp"; Flags: dontcopy solidbreak

[Components]
Name: text; Description: Язык субтитров; Types: full;
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full;
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

[code]
Var
BGBitmapImage, Image: TBitmapImage;
btnImgFile, BGImgFile: String;
BorderWidth: Integer;

function NextButtonClick(CurPageID: Integer): Boolean; begin Result := False; end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin Confirm := False; end;

procedure ItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);

var AreaStr: String;

begin if Index = -1 then Image.Hide else Image.Show; end;

procedure InitializeWizard();
begin
    WizardForm.OuterNotebook.Hide;
    WizardForm.NextButton.Hide;
ExtractTemporaryFile('btnimage.bmp');
ExtractTemporaryFile('BGImage.bmp');

Image:=TBitmapImage.Create(WizardForm);
Image.Parent:=WizardForm;
Image.SetBounds (ScaleX(200), ScaleY(15), ScaleX(270),ScaleY(180));
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\BGImage.bmp');

BGBitmapImage := TBitmapImage.Create(WizardForm);
BGBitmapImage.Parent := WizardForm;
BGBitmapImage.Align := alClient;
BGBitmapImage.SendToBack;
BGBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\BGImage.bmp'))

WizardForm.ComponentsList.Parent := WizardForm;
WizardForm.ComponentsList.SetBounds(ScaleX(10), ScaleY(10), WizardForm.InnerPage.Width - ScaleX(155), WizardForm.InnerPage.Height - ScaleY(40));
BorderWidth := (WizardForm.ComponentsList.Width-WizardForm.ComponentsList.ClientWidth) div 2;
BGImgFile := ExpandConstant('{tmp}\BGImage.bmp');
WizardForm.ComponentsList.LoadBGBmpFromFile(BGImgFile, WizardForm.ComponentsList.Left+BorderWidth, WizardForm.ComponentsList.Top+BorderWidth);

btnImgFile := ExpandConstant('{tmp}\btnimage.bmp');
WizardForm.ComponentsList.LoadBtnBmpFromFile(btnImgFile);
WizardForm.ComponentsList.OnItemMouseMove := @ItemMouseMove;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Caption := 'TNewWizardForm.ComponentsList Demo';
WizardForm.NextButton.Hide;
WizardForm.CancelButton.Caption := 'Close';
end;[/more]. Переделал на стандартный компонент-лист, по аналогии, можно разные картинки вешать на компоненты.
Автор: Sergey_Demchuk
Дата сообщения: 25.07.2011 05:44
Gnom3
Да, похожим методом и сделал, только
begin if Index = -1 then Image.Hide else Image.Show; end;
переделал на
...
Image.Hide
begin if Index = -1 then ...
...
Image.Show

тогда изображение пропадает сразу же как только фокус теряется.

Начал еще смотреть библиотеку от Ботвы (в шапке).
Изображение на страицах не появляется есл не использовать вот это

with WizardForm do begin
InnerNotebook.Hide;
OuterNotebook.Hide;
Bevel.Hide;
end;

Но это не хорошо, потому что все надписи и фон пропадают. Может как то не так делать надо?
Автор: Gnom3
Дата сообщения: 25.07.2011 08:54
Sergey_Demchuk там в модуле есть подробное описание. а так-
ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\fon.bmp'),0,0,WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);

WizardForm.Handle - родитель твоего изображения, в данном случае -
WizardForm, поэтому и нужно скрывать OuterNotebook (остальное - не обязательно) Экспериментируй с родителем, и поймешь, почему изображения вставляют, чеще всего, на WizardForm, и заново создают все компоненты страниц.
Автор: waitxd
Дата сообщения: 25.07.2011 14:51
нигде не видел примера решения задачи по получению буквы диска, отличной от системной, написал для этого скрипт.
Например, если мы поставим игру в

Код: DefaultDirName={code:GetNonSystemDrive}\Games\{#MyAppName}
Автор: Gnom3
Дата сообщения: 25.07.2011 15:21
waitxd
Цитата:
нигде не видел примера
Не искал просто. Там-же написано, почему этого делать нельзя. А так, в примерах Доброва, которые есть в шапке, есть если не прямое решение, то косвенное - у него несколько примеров работы с дисками, это решение можно взять из любого примера.
К тому-же еще и не работает твой вариант, мне легко разрешил на системный раздел ставить.
Автор: waitxd
Дата сообщения: 25.07.2011 15:33
вы невнимательно читаете:
вопрос стоит не о запрете установки на системный диск.
мой скрипт предлагает установить (что-то) по-умолчанию на первый не системный диск.
с чем и прекрасно справляется.


Цитата:
Там-же написано, почему этого делать нельзя

нельзя запрещать ставить на системный, а предлагать ставить на отличный от системного,
причем, если нет других дисков, то предлагать ставить на системный - мне кажется это отличное решение для, например, игровых репаков.
Автор: LEXYSman
Дата сообщения: 25.07.2011 15:42
Есть 2 папки с модами, в них одинаковые файлы.

Код:
[Files]
Source: AE\*; DestDir: "{app}"; Tasks: "AE"; Flags: createallsubdirs recursesubdirs
Source: TM\*; DestDir: "{app}"; Tasks: "TM"; Flags: createallsubdirs recursesubdirs
Автор: vintage 1
Дата сообщения: 25.07.2011 16:07
LEXYSman
Так пробуй:

Код:
[Files]
Source: AE\*; DestDir: {app}; Flags: ignoreversion; Tasks: AE;
Source: TM\*; DestDir: {app}; Flags: ignoreversion; Tasks: TM;
Автор: Gnom3
Дата сообщения: 25.07.2011 16:09
LEXYSman

Цитата:
в них одинаковые файлы......
Я так понимаю Моды и игровые файлы в самом инсталляторе смешиваются. Как этого избежать?

По умолчанию инно объединяет одинаковые файлы, отключается так:

Код: [Setup]
MergeDuplicateFiles=false
Автор: LEXYSman
Дата сообщения: 25.07.2011 16:51
Gnom3
Благодарю, помогло.
Автор: Gnom3
Дата сообщения: 25.07.2011 20:05
InnoIDE теперь доступен исходный код. Страница загрузки
Автор: Sergey_Demchuk
Дата сообщения: 25.07.2011 20:51

Цитата:
локальные диски (D: и E, то функция предложит D:\Games\..

Обычно, игрухи ставятся на последний диск (Е).

Добавлено:

Цитата:
OuterNotebook (остальное - не обязательно)

Отключал как раз InnerNotebook, придется все таки видимо код переписывать...

Добавлено:
Смысл я понял
Вопрос тогда

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
BmpFile.SetBounds(0, 0, 592, 412);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectComponentsPage;


img:=ImgLoad(WizardForm.SelectComponentsPage.Handle,ExpandConstant('{tmp}\mspaint.png'),0,0,100,100,True,True);
ImgApplyChanges(Info);

Изображения mspaint.png нету, она на заднем фоне, сферху картинка 3.bmp.

Как быть в этом случае?



Добавлено:
Или может есть другой способ поставить PNG картинку?
Автор: crysis1830
Дата сообщения: 25.07.2011 23:43
я знаю что такой вопрос бы где то на форуме я видел но не нашел

как на Uninstall.exe поставить иконку тыкните пальцем куда что писать
Автор: Krinkels
Дата сообщения: 26.07.2011 09:23
crysis1830

Цитата:
я знаю что такой вопрос бы где то на форуме я видел но не нашел

А в стандартную справку не пробовал заглядывать? Ведь то что ты спрашиваешь это элементарные основы.
З.Ы. Ты хоть бы IDE какую нибудь использовал бы
Автор: Gnom3
Дата сообщения: 26.07.2011 10:56
Sergey_Demchuk
Цитата:
img:=ImgLoad(WizardForm.SelectComponentsPage.Handle,ExpandConstant('{tmp}\mspaint.png'),0,0,100,100,True,True);
ImgApplyChanges(Info);

Изображения mspaint.png нету, она на заднем фоне, сферху картинка 3.bmp.

Как быть в этом случае?

ImgApplyChanges(Info); обновлять нужно то, куда поместил картинку.
ImgApplyChanges(WizardForm.SelectComponentsPage.Handle)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

Предыдущая тема: поиск


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.