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

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

Автор: Gr0z
Дата сообщения: 03.08.2010 10:15
Standalone Patch, [more=Как уместить?] [/more]
Автор: Alexander61434
Дата сообщения: 03.08.2010 10:22
Gr0z, увеличивай параметр Widht
Автор: Gr0z
Дата сообщения: 03.08.2010 10:29
Alexander61434
Я пока не очень разобрался в коде, но где это?
[more]
Код: #define MyAppName "Left 4 Dead 2 + The Passing [v 2.0.3.1]"
#define AppName "Left 4 Dead 2 + The Passing"

;********** системные требования ************
;необходимое место на диске (МБ)
#define NeedSize = 8192;
;необходимое место для распаковки
#define TNeedSize = 10240;
;необходимая частота процессора (МГц)
#define Processor = 2300;
;необходимый объем оперативной памяти (МБ)
#define RAM = 1024;
;необходимый объем памяти видеокарты (МБ)
#define VideoCard = 512;
;минимальная версия винды - в примере WinXP SP2
#define WinVerMajor = 5;
#define WinVerMinor = 1;
#define ServicePack = 2;

; Только если используется модуль FreeArc. Для ISDone прописывать файлы в одноимённом модуле.
#define ArcLocation "{src}\*.bin"

#include "botva2.iss"
#include "PB.iss"

//#define FreeArc
#define ISDone

//#define records
//#define precomp04
//#define precomp038
//#define unrar

[Setup]
AppId={{DDA55E82-39A4-4692-999D-4B2A363241CE}
AppName={#AppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\Left 4 Dead 2
DefaultGroupName=Left 4 Dead 2
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=setup
SetupIconFile=InstallFiles\left4dead2.ico
VersionInfoCopyright=Gr0z
InternalCompressLevel=ultra64
Compression=lzma/ultra64
ShowTasksTreeLines=true
SolidCompression=true
DisableReadyPage=True
DiskSpanning=true
DiskSliceSize=1063004405
SlicesPerDisk=3

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
rus.DeleteSave=Удалить сохраненные игры и профили?
rus.Welcome1=Вас приветствует %nМастер установки игры
rus.Welcome2=Программа установит игру {#AppName} %nна Ваш компьютер.%nРекомендуется закрыть антивирусные пакеты, %nа также все прочие приложения перед тем, %nкак продолжить.%n%nНажмите «Далее», чтобы продолжить, или %n«Отмена», чтобы выйти из программы установки.
rus.TotalSpace=Размер жесткого диска:
rus.FreeSpace=Доступно места на диске:
rus.NeedSpace=Игра займет на диске:
rus.TNeedSpace=Для распаковки требуется:
;rus.DirectXInstall=Идет обновление DirectX...
rus.Requirements1=Проверка системных требований
rus.Requirements2=Программа установки обнаружила следующие необходимые компоненты
rus.Requirements3=Все компоненты удовлетворяют требованиям игры.
rus.Requirements4=Компоненты, выделенные красным, %nне удовлетворяют требованиям игры.
rus.DeviceDriver=Драйвер устройства не обнаружен
rus.Processor=Процессор
rus.VideoCard=Видеоакарта
rus.SoundCard=Звуковая карта
rus.RAM=Память (ОЗУ)
rus.OperationSystem=Cистема
rus.NextLbl=Нажмите «Далее», чтобы продолжить.
rus.TasksName=Выберите дополнительные задачи
rus.TasksDescription=Какие дополнительные задачи необходимо выполнить?
rus.DirectXInstall=Идет обновление DirectX... Пожалуйста, подождите.
rus.DirectX=Обновить DirectX
rus.CrackInstall=Идет установка Standalone Patch... Пожалуйста, подождите.
rus.Crack=Установить Standalone Patch (Crack)
rus.VisualCInstall=Идет установка Microsoft VisualC++... Пожалуйста, подождите.
rus.VisualC=Установить Microsoft VisualC++
rus.Desktop=Создать ярлык на Рабочем столе
rus.SelectTasksLabel=Выберите дополнительные задачи, которые должны выполниться %nпри установке Left 4 Dead 2, после этого нажмите «Установить».
rus.Redist=Дополнительные задачи:
rus.FinishedHeading=Установка игры {#AppName} успешно завершена.
rus.FinishedLabel=Игра {#MyAppName} была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий ярлык в меню «Пуск» или на Рабочем столе.
rus.FinishedLabel2=Нажмите «Завершить», чтобы выйти из программы установки.
rus.AllProgress=Прогресс распаковки файлов:
rus.Remains=%nОсталось ждать:
rus.Hour=час
rus.Min=мин
rus.Sec=сек

[Files]
Source: InstallFiles\*; Flags: dontcopy;
Source: InstallFiles\left4dead2.ico; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: InstallFiles\ISSkin.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: InstallFiles\botva2.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: InstallFiles\InnoCallback.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: InstallFiles\Grey&Black.cjstyles; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;

[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; WorkingDir: {src}\Redist\DirectX\; Flags: waituntilterminated; Check: DirectX and not InstallRedist; BeforeInstall: DirectXProgress;
Filename: {src}\Crack\L4D2SP_T2.4.exe; WorkingDir: {src}\Crack\; Flags: waituntilterminated; Check: Crack and not InstallRedist; BeforeInstall: CrackProgress;
Filename: {src}\Redist\VisualC++\vcredist_x86.exe; WorkingDir: {src}\Redist\VisualC++\; Parameters: /q; Flags: waituntilterminated; Check: visualc and not IsWin64 and not InstallRedist; BeforeInstall: visualcProgress;
Filename: {src}\Redist\VisualC++\vcredist_x64.exe; WorkingDir: {src}\Redist\VisualC++\; Parameters: /q; Flags: waituntilterminated; Check: visualc and IsWin64 and not InstallRedist; BeforeInstall: visualcProgress;

[Icons]
Name: {userdesktop}\Left 4 Dead 2; Filename: {app}\left4dead2.exe; IconFilename: {app}\left4dead2.ico; WorkingDir: {app}; Check: Desktop;
Name: {userdesktop}\Left 4 Dead 2 Launcher; Filename: {app}\Left 4 Dead 2 Launcher.exe; IconFilename: {app}\left4dead2.ico; WorkingDir: {app}; Check: Desktop;
Name: {group}\{cm:UninstallProgram,Left 4 Dead 2}; Filename: {uninstallexe}; IconFilename: {app}\left4dead2.ico; Comment: Удалить игру; Check: NoIcons;
Name: {group}\Left 4 Dead 2; Filename: {app}\left4dead2.exe; IconFilename: {app}\left4dead2.ico; WorkingDir: {app}; Comment: Запустить игру; Check: NoIcons;
Name: {group}\Left 4 Dead 2 Launcher; Filename: {app}\Left 4 Dead 2 Launcher.exe; IconFilename: {app}\left4dead2.ico; WorkingDir: {app}; Comment: Запустить лаунчер; Check: NoIcons;

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

[Code]
const
WFDiskTimerID = 1;
WFSysReqTimerID = 2;
ARTitleTimerID = 2;

type
TTimerProc = procedure (h: Longword; msg: Longword; idevent: Longword; dwTime: Longword);
TPBProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint;
TALabel = array of TLabel;

var
SystemPage, SelectTasksPage: TWizardPage;
WizardImg, Workspace, WizardSmallImage, WizardFinishImage, RedistCheck, logo,
Line, Edit, DirFolder, GroupFolder, HardDrivePanel, HDD, RequirementsPanel: Longint;
AppDir, unins, mp3Name, OldDisk: string;
ResultCode, ErrorCode: integer;
MusicButton,mp3Handle, hCancelBtn, hNextBtn, hBackBtn, hDirBrowseBtn, hGroupBrowseBtn, hCancelUninstBtn,
DesktopCheck, QuickLaunchCheck, DirectXCheck, CrackCheck, NoIconsCheck, visualcCheck: HWND;
WelcomeLabel1, WelcomeLabel2, RequirementsLbl, ProcessorLbl, VideoCardLbl, SoundCardLbl, RAMLbl, SystemLbl, FinishedLabel,
ProcessorNameLbl, VideoCardNameLbl, SoundCardNameLbl, RAMTotalLbl, SystemNameLbl, NextLbl, FinishedHeadingLabel,
PageNameLabel,PageDescriptionLabel, WelcomeLabel1, WelcomeLabel2, SelectDirBrowseLabel, DirEditLabel, TotalSpaceLabel,
NeedSpaceLabel, FreeSpaceLabel, SelectTasksLabel, SelectStartMenuFolderBrowseLabel, GroupEditLabel, NoIconsLabel, SelectDirLabel,
NeedSpaceTLabel, SelectStartMenuFolderLabel, DesktopLabel, DirectXLabel, CrackLabel, visualcLabel, RedistLabel, LogoLabel: TLabel;
WFButtonFont, UPFButtonFont: TFont;
LogoPanel: TPanel;
LogoImage: TBitmapImage;
FreeMB, TotalMB: Cardinal;
ASysReq, ADisk: TALabel;
Keys: TArrayOfString;
#ifndef ISDone
Cancel: Integer;
#endif
#ifndef FreeArc
UnPackError: Integer;
#endif

function sndPlaySound(lpszSoundName: AnsiString; uFlags: cardinal):integer; external 'sndPlaySoundA@winmm.dll stdcall';
function WrapTimerProc(callback:TTimerProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
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';
procedure InitCircularProgressBar(hwnd:thandle; l,t,w,h,speed: integer;bgCol, actCol, inActCol, TransCol:TColor); external 'InitCircularProgressBar@files:IsProgressBar.dll stdcall';
procedure DeinitCircularProgressBar; external 'DeinitCircularProgressBar@files:IsProgressBar.dll stdcall';

//************************************************ [Начало - Вставка изображений] ***************************************************//

//================== Подключение модулей ==================//

#ifdef FreeArc
#include "FreeArc.iss"
#endif

#ifdef ISDone
#include "ISDone.iss"
#endif

//================== Подключение модулей ==================//

procedure CreateWizardImage;
var
i: integer;
begin
with WizardForm do begin
InnerNotebook.Hide;
OuterNotebook.Hide;
Center;
Color:= $282828; // Общий цвет инсталлятора $282828 - серый
end;

ExtractTemporaryFile('Workspace.png');
ExtractTemporaryFile('WizardImg.png');
ExtractTemporaryFile('WizardSmallImage.png');
ExtractTemporaryFile('Line.png');
ExtractTemporaryFile('Edit.png');
ExtractTemporaryFile('button.png');
ExtractTemporaryFile('WFEnter.wav');
ExtractTemporaryFile('Check.wav');
ExtractTemporaryFile('Click.wav');
ExtractTemporaryFile('DirFolder.png');
ExtractTemporaryFile('GroupFolder.png');
ExtractTemporaryFile('CheckBox.png');
ExtractTemporaryFile('HardDrivePanel.png');
ExtractTemporaryFile('HDD.png');
ExtractTemporaryFile('RequirementsPanel.png');
ExtractTemporaryFile('ProgressBackground.png');
ExtractTemporaryFile('ProgressBackground2.png');
ExtractTemporaryFile('ProgressImg.png');

WizardImg:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\WizardImg.png'),ScaleX(0), ScaleY(0),ScaleX(497),ScaleY(313),True,True);
WizardFinishImage:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\1.png'),ScaleX(0), ScaleY(0),ScaleX(497),ScaleY(313),True,True);
Workspace:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Workspace.png'),ScaleX(30), ScaleY(30),ScaleX(437),ScaleY(253),True,True);
WizardSmallImage:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\WizardSmallImage.png'),ScaleX(20), ScaleY(0),ScaleX(73),ScaleY(55),True,True);
Line:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Line.png'),ScaleX(0), ScaleY(58),ScaleX(497),ScaleY(5),True,True);
Edit:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Edit.png'),ScaleX(40), ScaleY(157),ScaleX(330),ScaleY(20),True,True);
DirFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\DirFolder.png'),ScaleX(40), ScaleY(70),ScaleX(30),ScaleY(40),True,True);
GroupFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\GroupFolder.png'),ScaleX(40), ScaleY(70),ScaleX(30),ScaleY(40),True,True);
HardDrivePanel:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\HardDrivePanel.png'),ScaleX(90), ScaleY(203),ScaleX(280),ScaleY(90),True,True);
HDD:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\HDD.png'),ScaleX(30), ScaleY(223),ScaleX(50),ScaleY(50),True,True);
RequirementsPanel:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\RequirementsPanel.png'),ScaleX(10), ScaleY(110),ScaleX(477),ScaleY(146),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,237,297,80,80,ExpandConstant('{tmp}\button.png'),10,False);
BtnSetEvent(hBackBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hBackBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hBackBtn,WFButtonFont.Handle);
BtnSetFontColor(hBackBtn,$ffffff,$000000,$ffffff,$B6B6B6);
BtnSetCursor(hBackBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.NextButton do begin
hNextBtn:=BtnCreate(WizardForm.Handle,317,297,80,80,ExpandConstant('{tmp}\button.png'),3,False);
BtnSetEvent(hNextBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hNextBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hNextBtn,WFButtonFont.Handle);
BtnSetFontColor(hNextBtn,$ffffff,$000000,$ffffff,$B6B6B6);
BtnSetCursor(hNextBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.CancelButton do begin
hCancelBtn:=BtnCreate(WizardForm.Handle,408,297,80,80,ExpandConstant('{tmp}\button.png'),10,False);
BtnSetEvent(hCancelBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hCancelBtn,WFButtonFont.Handle);
BtnSetFontColor(hCancelBtn,$ffffff,$000000,$ffffff,$B6B6B6);
BtnSetCursor(hCancelBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.DirBrowseButton do begin
hDirBrowseBtn:=BtnCreate(WizardForm.Handle,380,126,76,80,ExpandConstant('{tmp}\button.png'),10,False);
BtnSetEvent(hDirBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hDirBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hDirBrowseBtn,WFButtonFont.Handle);
BtnSetFontColor(hDirBrowseBtn,$ffffff,$000000,$ffffff,$B6B6B6);
BtnSetCursor(hDirBrowseBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.GroupBrowseButton do begin
hGroupBrowseBtn:=BtnCreate(WizardForm.Handle,380,126,76,80,ExpandConstant('{tmp}\button.png'),10,False);
BtnSetEvent(hGroupBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hGroupBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hGroupBrowseBtn,WFButtonFont.Handle);
BtnSetFontColor(hGroupBrowseBtn,$ffffff,$000000,$ffffff,$B6B6B6);
BtnSetCursor(hGroupBrowseBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;
end;

//************************************************ [Конец - Текстуры кнопок] ***************************************************//

//******************************************* [Начало - Тема] ***************************************************//

procedure LoadSkin(lpszPath: string; lpszIniFileName: string ); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure LoadSkinUninst(lpszPath: string; lpszIniFileName: string ); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkinUninst(); external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

//******************************************* [Конец - Тема] ***************************************************//

//************************************************ [Начало - Компоненты страниц] ***************************************************//

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=clLime then ASysReq[i].Font.Color:=$0000FF else ASysReq[i].Font.Color:=clLime;
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>={#TNeedSize} 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>={#TNeedSize} 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 InstallRedist: Boolean;
begin
if (Cancel <> 0) or (UnPackError <> 0) then
Result:= True;
end;

function NoIcons: Boolean;
begin
Result:= BtnGetEnabled(hGroupBrowseBtn);
end;

function Desktop: Boolean;
begin
Result:= BtnGetChecked(DesktopCheck);
end;

function Redist: Boolean;
begin
Result:= BtnGetChecked(RedistCheck);
end;

function DirectX: Boolean;
begin
ProgressInfoLabel.Visible:=False;
Result:= BtnGetChecked(DirectXCheck);
end;

function Crack: Boolean;
begin
ProgressInfoLabel.Visible:=False;
Result:= BtnGetChecked(CrackCheck);
end;

function visualc: Boolean;
begin
ProgressInfoLabel.Visible:=False;
Result:= BtnGetChecked(visualcCheck);
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 RedistClick(hBtn:HWND);
begin
if BtnGetChecked(RedistCheck) then BtnSetChecked(DirectXCheck, True) else BtnSetChecked(DirectXCheck, False);
if BtnGetChecked(RedistCheck) then BtnSetChecked(visualcCheck, True) else BtnSetChecked(visualcCheck, False);
if BtnGetChecked(RedistCheck) then BtnSetChecked(CrackCheck, True) else BtnSetChecked(CrackCheck, False);
if BtnGetChecked(RedistCheck) then DirectXLabel.Font.Color:=$00FFFF else DirectXLabel.Font.Color:=$FFFFFF;
if BtnGetChecked(RedistCheck) then visualcLabel.Font.Color:=$00FFFF else visualcLabel.Font.Color:=$FFFFFF;
if BtnGetChecked(RedistCheck) then CrackLabel.Font.Color:=$00FFFF else CrackLabel.Font.Color:=$FFFFFF;
sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
if BtnGetChecked(hBtn) then RedistLabel.Font.Color:=$00FFFF else RedistLabel.Font.Color:=$FFFFFF;
end;

procedure RedistLabelClick(Sender:TObject);
begin
BtnSetChecked(RedistCheck, not BtnGetChecked(RedistCheck));
RedistClick(RedistCheck);
end;

procedure DirectXClick(hBtn:HWND);
begin
if BtnGetChecked(DirectXCheck) or BtnGetChecked(visualcCheck) then BtnSetChecked(RedistCheck, True) else BtnSetChecked(RedistCheck, False);
if BtnGetChecked(DirectXCheck) or BtnGetChecked(visualcCheck) then RedistLabel.Font.Color:=$00FFFF else RedistLabel.Font.Color:=$FFFFFF;
sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
if BtnGetChecked(hBtn) then DirectXLabel.Font.Color:=$00FFFF else DirectXLabel.Font.Color:=$FFFFFF;
end;

procedure CrackClick(hBtn:HWND);
begin
if BtnGetChecked(CrackCheck) or BtnGetChecked(DirectXCheck) then BtnSetChecked(RedistCheck, True) else BtnSetChecked(RedistCheck, False);
if BtnGetChecked(CrackCheck) or BtnGetChecked(DirectXCheck) then RedistLabel.Font.Color:=$00FFFF else RedistLabel.Font.Color:=$FFFFFF;
sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
if BtnGetChecked(hBtn) then CrackLabel.Font.Color:=$00FFFF else CrackLabel.Font.Color:=$FFFFFF;
end;

procedure DirectXLabelClick(Sender:TObject);
begin
BtnSetChecked(DirectXCheck, not BtnGetChecked(DirectXCheck));
DirectXClick(DirectXCheck);
end;

procedure CrackLabelClick(Sender:TObject);
begin
BtnSetChecked(CrackCheck, not BtnGetChecked(CrackCheck));
CrackClick(CrackCheck);
end;

procedure DirectXProgress;
begin
StatusLabel.Caption:=ExpandConstant('{cm:DirectX}');
FilenameLabel.Caption:=ExpandConstant('{cm:DirectXInstall}');
InitCircularProgressBar(WizardForm.Handle, 220, 194, 70, 65, 100, clNone, clLime, clSilver, clNavy);
end;

procedure CrackProgress;
begin
StatusLabel.Caption:=ExpandConstant('{cm:Crack}');
FilenameLabel.Caption:=ExpandConstant('{cm:CrackInstall}');
InitCircularProgressBar(WizardForm.Handle, 220, 194, 70, 65, 100, clNone, clLime, clSilver, clNavy);
end;

procedure visualcClick(hBtn:HWND);
begin
if BtnGetChecked(visualcCheck) or BtnGetChecked(DirectXCheck) or BtnGetChecked(CrackCheck) then BtnSetChecked(RedistCheck, True) else BtnSetChecked(RedistCheck, False);
if BtnGetChecked(visualcCheck) or BtnGetChecked(DirectXCheck) or BtnGetChecked(CrackCheck) then RedistLabel.Font.Color:=$00FFFF else RedistLabel.Font.Color:=$FFFFFF;
sndPlaySound(ExpandConstant('{tmp}\Check.wav'), $0001);
if BtnGetChecked(hBtn) then visualcLabel.Font.Color:=$00FFFF else visualcLabel.Font.Color:=$FFFFFF;
end;

procedure visualcLabelClick(Sender:TObject);
begin
BtnSetChecked(visualcCheck, not BtnGetChecked(visualcCheck));
visualcClick(visualcCheck);
end;

procedure visualcProgress;
begin
StatusLabel.Caption:=ExpandConstant('{cm:visualc}')
FilenameLabel.Caption:=ExpandConstant('{cm:visualcInstall}')
DeinitCircularProgressBar;
InitCircularProgressBar(WizardForm.Handle, 220, 194, 70, 65, 100, clNone, clLime, clSilver, clNavy);
end;

procedure CreatePageComponents;
var
Pdm : string;
vr,VidRam : Longint;
Version : TWindowsVersion;
begin
PageNameLabel:=TLabel.Create(WizardForm);
with PageNameLabel do begin
AutoSize:= False;
WordWrap:= True;
SetBounds(ScaleX(110), ScaleY(10), ScaleX(370), ScaleY(14));
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold, fsItalic];
Parent:=WizardForm;
end;
PageDescriptionLabel:=TLabel.Create(WizardForm);
with PageDescriptionLabel do begin
AutoSize:= False;
SetBounds(ScaleX(130), ScaleY(25), ScaleX(330), ScaleY(30));
Wordwrap:= True;
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Parent:=WizardForm;
end;

//************************************************ [Конец - Компоненты страниц] ***************************************************//

////////////////////// begin WelcomePage //////////////////////

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do begin
AutoSize:=False
SetBounds(ScaleX(75), ScaleY(50), ScaleX(350), ScaleY(65));
WordWrap:=True
Alignment := taCenter;
Transparent:=True
Font.Name:='Georgia';
Font.Size:= 13;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold]
Caption:= ExpandConstant('{cm:Welcome1}')+#13#10+('{#MyAppName}');
Parent:=WizardForm;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do begin
AutoSize:=False
SetBounds(ScaleX(25), ScaleY(130), ScaleX(450), ScaleY(200));
WordWrap:=True
Alignment := taCenter;
Transparent:=True
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$FFFFFF;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:Welcome2}');
Parent:=WizardForm;
end;

////////////////////// end WelcomePage //////////////////////

////////////////////// SystemPage //////////////////////

SystemPage:=CreateCustomPage(wpLicense, ExpandConstant('{cm:Requirements1}'), ExpandConstant('{cm:Requirements2}'));

RequirementsLbl := TLabel.Create(WizardForm);
with RequirementsLbl do begin
AutoSize:=False;
SetBounds(ScaleX(65), ScaleY(75), ScaleX(605), ScaleY(50));
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Color:=clLime;
Font.Style:=[fsBold, fsItalic];
Caption := ExpandConstant('{cm:Requirements3}');
Parent:=WizardForm;
end;

NextLbl := TLabel.Create(WizardForm);
with NextLbl do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(280), ScaleX(605), ScaleY(50));
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Color:=$ffffff;
Font.Style:=[fsBold, fsItalic];
Caption := ExpandConstant('{cm:NextLbl}');
Parent:=WizardForm;
end;

//================= Начало - Процессор =================//

ProcessorLbl := TLabel.Create(WizardForm);
with ProcessorLbl do begin
AutoSize:=False;
SetBounds(ScaleX(15), ScaleY(113), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
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(150), ScaleY(113), ScaleX(350), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
Font.Color:=clLime;
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}');
RequirementsLbl.Font.Color := clRed;
AddLabelToArray(AsysReq,ProcessorNameLbl);
end;

//================= Конец - Процессор =================//

//================= Начало - Видеоадаптер =================//

VideoCardLbl := TLabel.Create(WizardForm);
with VideoCardLbl do begin
AutoSize:=False;
SetBounds(ScaleX(15), ScaleY(144), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
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(150), ScaleY(144), ScaleX(350), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
Font.Color:=clLime;
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}');
RequirementsLbl.Font.Color := clRed;
AddLabelToArray(ASysReq,VideoCardNameLbl);
end;

//================= Конец - Видеоадаптер =================//

//================= Начало - Звуковая карта =================//

SoundCardLbl := TLabel.Create(WizardForm);
with SoundCardLbl do begin
AutoSize:=False;
SetBounds(ScaleX(15), ScaleY(175), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
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(150), ScaleY(175), ScaleX(350), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
Font.Color:=clLime;
Font.Style:=[fsBold];
Caption := GetSoundCardName;
Parent := WizardForm;
end;

if GetSoundCards = 0 then begin
RequirementsLbl.Caption:= ExpandConstant('{cm:Requirements4}');
RequirementsLbl.Font.Color := clRed;
SoundCardNameLbl.Caption:= ExpandConstant('{cm:DeviceDriver}');
AddLabelToArray(ASysReq,SoundCardNameLbl);
end;

//================= Конец - Звуковая карта =================//

//================= Начало - ОЗУ =================//

RAMLbl := TLabel.Create(WizardForm);
with RAMLbl do begin
AutoSize:=False;
SetBounds(ScaleX(15), ScaleY(206), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
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(150), ScaleY(206), ScaleX(350), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
Font.Color:=clLime;
Font.Style:=[fsBold];
Caption := IntToStr(GetSystemPhys + 1) + ' MB';
Parent := WizardForm;
end;

if (GetSystemPhys+1)<{#RAM} then begin
RequirementsLbl.Caption := ExpandConstant('{cm:Requirements4}');
RequirementsLbl.Font.Color := clRed;
AddLabelToArray(ASysReq,RAMTotalLbl);
end;

//================= Конец - ОЗУ =================//

//================= Начало - Операционная система =================//

SystemLbl := TLabel.Create(WizardForm);
with SystemLbl do begin
AutoSize:=False;
SetBounds(ScaleX(15), ScaleY(237), ScaleX(150), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
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(150), ScaleY(237), ScaleX(350), ScaleY(22));
Transparent:=True;
Font.Name:= 'Arial';
Font.Size:= 8;
Font.Color:=clLime;
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}');
RequirementsLbl.Font.Color := clRed;
AddLabelToArray(ASysReq,SystemNameLbl);
end;

//================= Конец - Операционная система =================//

////////////////////// SystemPage //////////////////////

////////////////////// begin SelectDirPage //////////////////////

SelectDirLabel := TLabel.Create(WizardForm);
with SelectDirLabel do begin
AutoSize:=False;
SetBounds(ScaleX(85), ScaleY(85), ScaleX(400), ScaleY(50));
WordWrap:= True;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption:= WizardForm.SelectDirLabel.Caption;
Parent := WizardForm;
end;

SelectDirBrowseLabel := TLabel.Create(WizardForm);
with SelectDirBrowseLabel do begin
AutoSize:=False;
SetBounds(ScaleX(40), ScaleY(120), ScaleX(400), ScaleY(50));
WordWrap:= True;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Parent := WizardForm;
end;

DirEditLabel := TLabel.Create(WizardForm);
with DirEditLabel do begin
AutoSize:=False;
SetBounds(ScaleX(50), ScaleY(160), ScaleX(446), ScaleY(15));
WordWrap:= True;
ShowAccelChar := False;
Transparent:=True;
Font.Name:= 'Arial'
Font.Size:= 8;
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(100), ScaleY(210), ScaleX(446), ScaleY(17));
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Parent := WizardForm;
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(230), ScaleX(500), ScaleY(17));
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Parent := WizardForm;
end;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(250), ScaleX(500), ScaleY(17));
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption := ExpandConstant('{cm:NeedSpace} ') + MbOrTB({#NeedSize});
Parent := WizardForm;
end;

NeedSpaceTLabel := TLabel.Create(WizardForm);
with NeedSpaceTLabel do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(270), ScaleX(500), ScaleY(17));
Transparent:=True;
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption := ExpandConstant('{cm:TNeedSpace} ') + MbOrTB({#TNeedSize});
Parent := WizardForm;
end;

////////////////////// end SelectDirPage //////////////////////

////////////////////// begin SelectProgramGroupPage //////////////////////

SelectStartMenuFolderLabel := TLabel.Create(WizardForm);
with SelectStartMenuFolderLabel do begin
AutoSize:=False;
SetBounds(ScaleX(85), ScaleY(85), ScaleX(400), ScaleY(50));
WordWrap:= True;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption:= WizardForm.SelectStartMenuFolderLabel.Caption;
Parent := WizardForm;
end;

SelectStartMenuFolderBrowseLabel := TLabel.Create(WizardForm);
with SelectStartMenuFolderBrowseLabel do begin
AutoSize:=False;
SetBounds(ScaleX(40), ScaleY(120), ScaleX(400), ScaleY(50));
WordWrap:= True;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption:= WizardForm.SelectStartMenuFolderBrowseLabel.Caption;
Parent := WizardForm;
end;

GroupEditLabel := TLabel.Create(WizardForm);
with GroupEditLabel do begin
AutoSize:=False;
SetBounds(ScaleX(50), ScaleY(160), 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(40),ScaleY(280),ScaleX(25),ScaleY(25),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(75), ScaleY(285), ScaleX(275), ScaleY(17));
OnClick:= @NoIconsLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption := WizardForm.NoIconsCheck.Caption;
Parent := WizardForm;
end;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text;
WizardForm.GroupEdit.OnChange := @GroupChange;
//end;

////////////////////// end SelectProgramGroupPage //////////////////////

////////////////////// begin SelectTasksPade //////////////////////

SelectTasksPage := CreateCustomPage(wpSelectProgramGroup, ExpandConstant('{cm:TasksName}'), ExpandConstant('{cm:TasksDescription}'));
SelectTasksLabel := TLabel.Create(WizardForm);
with SelectTasksLabel do begin
AutoSize:=False;
SetBounds(ScaleX(40), ScaleY(75), ScaleX(600), ScaleY(50));
WordWrap:= True;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption:= ExpandConstant('{cm:SelectTasksLabel}');
Parent := WizardForm;
end;

DesktopCheck:=BtnCreate(WizardForm.Handle,ScaleX(40),ScaleY(110),ScaleX(25),ScaleY(25),ExpandConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(DesktopCheck,BtnClickEventID,WrapBtnCallback(@DesktopClick,1));
BtnSetEvent(DesktopCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(DesktopCheck,GetSysCursorHandle(32649));
BtnSetChecked(DesktopCheck,True);

DesktopLabel := TLabel.Create(WizardForm);
with DesktopLabel do begin
AutoSize:=False;
SetBounds(ScaleX(75), ScaleY(116), ScaleX(265), ScaleY(17));
OnClick:= @DesktopLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$00FFFF;
Font.Style:=[fsItalic];
Caption := ExpandConstant('{cm:Desktop}');
Parent := WizardForm;
end;

RedistCheck:=BtnCreate(WizardForm.Handle,ScaleX(40),ScaleY(135),ScaleX(25),ScaleY(25),ExpandConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(RedistCheck,BtnClickEventID,WrapBtnCallback(@RedistClick,1));
BtnSetEvent(RedistCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(RedistCheck,GetSysCursorHandle(32649));
BtnSetChecked(RedistCheck, False);

RedistLabel := TLabel.Create(WizardForm);
with RedistLabel do begin
AutoSize:=False;
SetBounds(ScaleX(75), ScaleY(141), ScaleX(265), ScaleY(17));
OnClick:= @RedistLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption := ExpandConstant('{cm:Redist}');
Parent := WizardForm;
end;

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

DirectXLabel := TLabel.Create(WizardForm);
with DirectXLabel do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(166), ScaleX(195), ScaleY(17));
OnClick:= @DirectXLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption := ExpandConstant('{cm:DirectX}');
Parent := WizardForm;
end;

CrackCheck:=BtnCreate(WizardForm.Handle,ScaleX(70),ScaleY(210),ScaleX(25),ScaleY(25),ExpandConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(CrackCheck,BtnClickEventID,WrapBtnCallback(@CrackClick,1));
BtnSetEvent(CrackCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(CrackCheck,GetSysCursorHandle(32649));
BtnSetChecked(CrackCheck, False);

CrackLabel := TLabel.Create(WizardForm);
with CrackLabel do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(216), ScaleX(195), ScaleY(17));
OnClick:= @CrackLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption := ExpandConstant('{cm:Crack}');
Parent := WizardForm;
end;

VisualCCheck:=BtnCreate(WizardForm.Handle,ScaleX(70),ScaleY(185),ScaleX(25),ScaleY(25),ExpandConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(VisualCCheck,BtnClickEventID,WrapBtnCallback(@VisualCClick,1));
BtnSetEvent(VisualCCheck,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(VisualCCheck,GetSysCursorHandle(32649));
BtnSetChecked(VisualCCheck, False);

VisualCLabel := TLabel.Create(WizardForm);
with VisualCLabel do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(191), ScaleX(195), ScaleY(17));
OnClick:= @VisualCLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption := ExpandConstant('{cm:VisualC}');
Parent := WizardForm;
end;

////////////////////// end SelectTasksPade //////////////////////

////////////////////// begin InstallingPage //////////////////////

StatusLabel := TLabel.Create(WizardForm);
with StatusLabel do begin
AutoSize:=False;
SetBounds(ScaleX(40), ScaleY(80), ScaleX(400), ScaleY(17));
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold,fsItalic];
Parent := WizardForm;
end;

FilenameLabel := TLabel.Create(WizardForm);
with FilenameLabel do begin
AutoSize:=False;
SetBounds(ScaleX(40), ScaleY(100), ScaleX(417), ScaleY(17));
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Parent := WizardForm;
end;

ProgressInfoLabel := TLabel.Create(WizardForm);
with ProgressInfoLabel do
begin
AutoSize:=False;
SetBounds(ScaleX(-70), ScaleY(170), ScaleX(638), ScaleY(50));
Alignment := taCenter;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Parent := WizardForm;
end;

////////////////////// end InstallingPage //////////////////////

////////////////////// begin FinishedPage //////////////////////

FinishedHeadingLabel:= TLabel.Create(WizardForm);
with FinishedHeadingLabel do begin
AutoSize:=False
SetBounds(ScaleX(75), ScaleY(60), ScaleX(350), ScaleY(65));
WordWrap:=True
Alignment := taCenter;
Transparent:=True
Font.Name:='Georgia';
Font.Size:= 13;
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(125), ScaleX(348), ScaleY(200));
WordWrap:=True
Transparent:=True
Font.Name:='Georgia';
Font.Size:= 10;
Font.Color:=$FFFFFF;
Font.Style := [fsBold, fsItalic];
Caption:= ExpandConstant('{cm:FinishedLabel}')+#13#13+ExpandConstant('{cm:FinishedLabel2}');
Parent:=WizardForm;
end;
end;

////////////////////// end FinishedPage //////////////////////

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\isskin.dll'), ExpandConstant('{tmp}\isskin.dll'), False);
FileCopy(ExpandConstant('{app}\Grey&Black.cjstyles'), ExpandConstant('{tmp}\Grey&Black.cjstyles'), False);
FileCopy(ExpandConstant('{app}\InnoCallback.dll'), ExpandConstant('{tmp}\InnoCallback.dll'), False);
LoadSkinUninst(ExpandConstant('{tmp}\Grey&Black.cjstyles'), '');
Result := True;
end;

//================== Удаление сохранений ==================//

procedure DeleteSavedGames(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usUninstall then
if DirExists(ExpandConstant('{commondocs}')+'\White Gold') then
if MsgBox(ExpandConstant('{cm:DeleteSave}'), mbInformation, MB_YESNO) = idYes then
DelTree(ExpandConstant('{commondocs}')+'\White Gold', True, True, True);
end;

//================== Удаление сохранений ==================//

procedure HideComponents;
begin
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
SelectDirLabel.Hide;
SelectDirBrowseLabel.Hide;
DirEditLabel.Hide;
TotalSpaceLabel.Hide;
FreeSpaceLabel.Hide;
NeedSpaceLabel.Hide;
NeedSpaceTLabel.Hide;
NoIconsLabel.Hide;
SelectStartMenuFolderLabel.Hide;
SelectStartMenuFolderBrowseLabel.Hide;
GroupEditLabel.Hide;
RequirementsLbl.Hide;
NextLbl.Hide;
ProcessorLbl.Hide;
ProcessorNameLbl.Hide;
VideoCardLbl.Hide;
VideoCardNameLbl.Hide;
SoundCardLbl.Hide;
SoundCardNameLbl.Hide;
RAMLbl.Hide;
RAMTotalLbl.Hide;
SystemLbl.Hide;
SystemNameLbl.Hide;
SelectTasksLabel.Hide;
DesktopLabel.Hide;
RedistLabel.Hide;
DirectXLabel.Hide;
CrackLabel.Hide;
VisualCLabel.Hide;
StatusLabel.Hide;
FilenameLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
ProgressInfoLabel.Hide;
#ifdef FreeArc
LabelStatusRollback.Hide;
LabelStatus.Hide;
#endif
#ifdef ISDone
LabelStatusRollback.Hide;
LabelStatus.Hide;
#endif
end;

procedure ShowComponents(CurPageID: Integer);
begin
PageNameLabel.Caption:=WizardForm.PageNameLabel.Caption
PageDescriptionLabel.Caption:=WizardForm.PageDescriptionLabel.Caption
if CurPageID > wpWelcome then
if CurPageID < wpFinished then ImgSetVisibility(WizardSmallImage,True);
if CurPageID > wpWelcome then
if CurPageID < wpFinished then ImgSetVisibility(Line,True);
if CurPageID > wpWelcome then
if CurPageID < wpFinished then BtnSetVisibility(MusicButton,True);
case CurPageID of
wpWelcome: begin
ImgSetVisibility(WizardImg,True);
ImgSetVisibility(Workspace,True);
WelcomeLabel1.Show
WelcomeLabel2.Show
end;
SystemPage.ID: begin
ImgSetVisibility(RequirementsPanel,True);
RequirementsLbl.Show;
NextLbl.Show;
ProcessorLbl.Show;
ProcessorNameLbl.Show;
VideoCardLbl.Show;
VideoCardNameLbl.Show;
SoundCardLbl.Show;
SoundCardNameLbl.Show;
RAMLbl.Show;
RAMTotalLbl.Show;
SystemLbl.Show;
SystemNameLbl.Show;
BtnSetVisibility(MusicButton,True);
ImgSetVisibility(WizardSmallImage,True);
ImgSetVisibility(Line,True);
end;
wpSelectDir: begin
ImgSetVisibility(Edit,True);
ImgSetVisibility(DirFolder,True);
ImgSetVisibility(HardDrivePanel,True);
ImgSetVisibility(HDD,True);
SelectDirLabel.Show
SelectDirBrowseLabel.Show
DirEditLabel.Show;
TotalSpaceLabel.Show;
FreeSpaceLabel.Show;
NeedSpaceLabel.Show;
NeedSpaceTLabel.Show;
BtnSetVisibility(hDirBrowseBtn,True);
end;
wpSelectProgramGroup: begin
ImgSetVisibility(GroupFolder,True);
ImgSetVisibility(Edit,True);
BtnSetVisibility(hGroupBrowseBtn,True);
BtnSetVisibility(NoIconsCheck,True);
SelectStartMenuFolderLabel.Show;
SelectStartMenuFolderBrowseLabel.Show;
WizardForm.GroupBrowseButton.Show;
GroupEditLabel.Show;
NoIconsLabel.Show;
end;
SelectTasksPage.ID: begin
BtnSetVisibility(DesktopCheck,True);
BtnSetVisibility(RedistCheck,True);
BtnSetVisibility(DirectXCheck,True);
BtnSetVisibility(CrackCheck,True);
BtnSetVisibility(VisualCCheck,True);
SelectTasksLabel.Show;
DesktopLabel.Show;
RedistLabel.Show;
DirectXLabel.Show;
CrackLabel.Show;
VisualCLabel.Show;
BtnSetVisibility(MusicButton,True);
ImgSetVisibility(WizardSmallImage,True);
ImgSetVisibility(Line,True);
WizardForm.NextButton.Caption:=SetupMessage(msgButtonInstall);
end;
wpInstalling: begin
StatusLabel.Show;
FilenameLabel.Show;
ProgressInfoLabel.Show;
end;
wpFinished: begin
ImgSetVisibility(WizardFinishImage,True);
ImgSetVisibility(Workspace,True);
FinishedHeadingLabel.Show;
FinishedLabel.Show;
end;
end;
end;

//************************************************ [Конец - Компоненты страниц] ***************************************************//

//************************************************ [Начало - ПрогрессБары] ***************************************************//

procedure AllCancel;
begin
SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
ImgPBDelete(NewPB);
#ifdef ISDone
ImgPBDelete(ISDonePB);
#endif
ImgApplyChanges(WizardForm.Handle);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
#ifdef FreeArc
UnpackingArc(CurStep);
#endif
#ifdef ISDone
UnpackingISDone(CurStep);
#endif
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;
#ifdef ISDone
if MyError = true or (Cancel <> 0) then
begin
WizardForm.StatusLabel.Hide;
LabelStatusRollback.Show;
FilenameLabel.Hide;
LabelPct.Hide;
ProgressInfoLabel.Hide;
LabelCurrFileName.Hide;
LabelStatus.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
BtnSetEnabled(CancelUnpackingBtn, False);
BtnSetEnabled(hCancelBtn, False);
SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
ImgPBDelete(NewPB);
ImgPBDelete(ISDonePB);
ImgApplyChanges(WizardForm.Handle);
end;
#endif
#ifdef FreeArc
if (UnPackError <> 0) then
begin
WizardForm.StatusLabel.Hide;
LabelStatusRollback.Show;
FilenameLabel.Hide;
LabelStatus.Hide;
ProgressInfoLabel.Hide;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
BtnSetEnabled(CancelUnpackingBtn, False);
BtnSetEnabled(hCancelBtn, False);
SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
ImgPBDelete(NewPB);
ImgApplyChanges(WizardForm.Handle);
end;
#endif
WizardForm.ProgressGauge.Visible:=False;
#ifndef ISDone
#ifndef FreeArc
//Прогрессбары создаются в скрипте
NewPB:=ImgPBCreate(WizardForm.Handle, ExpandConstant('{tmp}\ProgressBackground.png'), ExpandConstant('{tmp}\ProgressImg.png'),41,130,WizardForm.ProgressGauge.Width,WizardForm.ProgressGauge.Height);
PBOldProc:=SetWindowLong(WizardForm.ProgressGauge.Handle,-4,CallBackProc(@PBProc,4));
ImgApplyChanges(WizardForm.Handle);
#endif
#endif
     sTime:=GetTickCount;
eTime:=sTime;
end;
ssPostInstall: AllCancel;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
DeleteSavedGames(CurUninstallStep);
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;
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WizardForm.CancelButton.Enabled:=False;
end;
end;
end;

//************************************************ [Конец - ПрогрессБары] ***************************************************//

//******************************************* [ logo - Лого как ссылка внизу слева ] ***************************************************//

procedure LogoLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://torrents.vfose.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure InitializeWizard;
begin
CreateWizardImage;
ButtonsTextures;
CreatePageComponents;

LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(7);
Top := ScaleY(319);
Width := ScaleX(170);
Height := ScaleY(35);
BevelOuter := bvNone;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
ExtractTemporaryFile('logo.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoLabelOnClick;

#ifdef FreeArc
CreateArcComponents;
#endif

#ifdef ISDone
CreateISDoneComponents;
#endif

end;
end;
end;
end;

//******************************************* [ конец logo - Лого как ссылка внизу слева ] ***************************************************//


procedure ReadEntries(); // читаем реестр
begin
    RegQueryStringValue(HKCU, 'Software\Russobit\start\Xenus. White Gold', 'path', AppDir); // данные реестра
end;

function InitializeSetup: Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\BASS.dll')) then ExtractTemporaryFile('BASS.dll');
if not FileExists(ExpandConstant('{tmp}\MusicButton.png')) then ExtractTemporaryFile('MusicButton.png');
if not FileExists(ExpandConstant('{tmp}\Music.mp3')) then ExtractTemporaryFile('Music.mp3');
if not FileExists(ExpandConstant('{tmp}\Grey&Black.cjstyles')) then ExtractTemporaryFile('Grey&Black.cjstyles');

LoadSkin(ExpandConstant('{tmp}\Grey&Black.cjstyles'), '');
Result := True;

unins:='unins000.exe'; // исполняемый файл деинсталляции

if (RegValueExists(HKCU, 'Software\Russobit\start\Xenus. White Gold', 'path')) then // если находим в реестре нужное значение
begin
ReadEntries;
if (FileExists(AddBackslash(AppDir) + unins)) then
begin
Exec(AddBackslash(AppDir) + unins, '', ExtractFilePath(AddBackslash(AppDir) + unins), SW_SHOW, ewNoWait, ResultCode);
end else begin
MsgBox('Невозможно запустить деинсталляцию' + ExpandConstant('{#MyAppName}') + ', т.к. исполняемый файл программы не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1);
end;
Result:=False;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
SetStateNewButtons;
HideComponents;
BtnSetVisibility(MusicButton,False);
BtnSetVisibility(hDirBrowseBtn,False);
BtnSetVisibility(hGroupBrowseBtn,False);
ImgSetVisibility(WizardImg,False);
ImgSetVisibility(Workspace,False);
ImgSetVisibility(WizardSmallImage,False);
ImgSetVisibility(Line,False);
ImgSetVisibility(WizardFinishImage,False);
ImgSetVisibility(Edit,False);
ImgSetVisibility(DirFolder,False);
ImgSetVisibility(GroupFolder,False);
ImgSetVisibility(HardDrivePanel,False);
ImgSetVisibility(HDD,False);
BtnSetVisibility(NoIconsCheck,False);
ImgSetVisibility(RequirementsPanel,False);
BtnSetVisibility(DesktopCheck,False);
BtnSetVisibility(RedistCheck,False);
BtnSetVisibility(DirectXCheck,False);
BtnSetVisibility(CrackCheck,False);
BtnSetVisibility(VisualCCheck,False);

ShowComponents(CurPageID);

#ifdef FreeArc
UnpackingArcFinished(CurPageID);
#endif

#ifdef ISDone
UnpackingISDoneFinished(CurPageID);
#endif

ImgApplyChanges(WizardForm.Handle);

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);

if CurPageID=wpFinished then begin
#ifdef FreeArc
BtnSetVisibility(CancelUnpackingBtn, False);
#endif
DeinitCircularProgressBar;
end;
end;

procedure DeInitializeSetup();
begin
gdipShutdown;
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin;
end;

procedure DeinitializeUninstall();
begin
UnloadSkinUninst();
end;
Автор: ExpeditorR
Дата сообщения: 03.08.2010 10:30
Обращаюсь ко всем!
Я почти закончил писать альтернативную версию dll для проверки системных требований, а то get_hw_caps.dll не на всех компах выдаёт корректное колличество памяти у видеокарты (особенно встроенной), плюс не выдаёт колличество ядер проца (приходится выяснять через код), и другие мелочи. В моей dll этих недостатков не будет. По размеру будет около 40кб(сжатая).
Плюс, могу добавить проверку каких-нибудь других параметров по желанию.

Вопрос №1 - оно кому-нибудь надо?
Вопрос №2 - Кто может потестить на 64 битной винде?
Вопрос №3 - Работает ли get_hw_caps.dll в 64 битной винде?


SotM
Подтверждаю слова nik1967, супер!
Автор: Alexander61434
Дата сообщения: 03.08.2010 11:02
Gr0z, [more=тут]CrackLabel := TLabel.Create(WizardForm);
with CrackLabel do begin
AutoSize:=False;
SetBounds(ScaleX(100), ScaleY(216), ScaleX(195), ScaleY(17));
OnClick:= @CrackLabelClick;
Cursor:= CrHand;
Transparent:=True;
Font.Name:= 'Georgia'
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsItalic];
Caption := ExpandConstant('{cm:Crack}');
Parent := WizardForm;
end;[/more] поувеличивай вторые ScaleX и ScaleY
Автор: Profrager
Дата сообщения: 03.08.2010 11:08
ExpeditorR
Была такая же идея) Но вот если бы еще увидеть в твоей dll функцию, которая сама отображает всю инфу в окне с заданным хендлом, было бы совсем замечательно)
Автор: TonyJef
Дата сообщения: 03.08.2010 11:16
nik1967,Alexander61434,вот вы пишите же скрипты,не могли бы вы меня этому научить? мой скайп tonyjef19
Автор: Raf_SE
Дата сообщения: 03.08.2010 11:17
Ктонить может объединить эти коды?
Через ISS Joiner пробовал, но он создает некорректный скрипт.

Описания компонентов
[more]function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
disabledesc();
end;

procedure InitializeWizard();
begin
WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'ГиКц';
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5);
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188);
Info.Top := ScaleY(12);
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18);
Info.Caption := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Английская озвучка;'+ // SoundUnit\eng
'Французская озвучка;'+ // SoundUnit\fra
'Немецкая озвучка;'+ // SoundUnit\deu
'Итальянская озвучка;'+ // SoundUnit\ita
'Испанская озвучка;' // SoundUnit\spa
);
end;[/more]

Сколько есть, и требуеться для установки
[more]var
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel: TLabel;
n: Integer;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;
StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard();
begin
NeedSize := 6100; //Здесь указывается место для приложения
WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= []
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
ListBoxRefresh
end;
end;[/more]

Слайд-шоу рандомно (в окне инсталляции)
[more]const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
j:=Random(Length(A)-1)+1;
C:='';
B:=B + A[j];
for k:=1 to Length(A) do
if k<>j then C:=C+A[k];
A:=C;
end;
for i:=1 to X do Result:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
then begin
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;
end;
end;


procedure InitializeWizard;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
end;
[/more]

[I]Улучшенный деинсталлятор

[more] function ShouldSkipPage(CurPage: Integer): Boolean;
begin
if Pos('/SP-', UpperCase(GetCmdTail)) > 0 then
case CurPage of
wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
wpSelectDir, wpSelectProgramGroup, wpInfoAfter:
Result := True;
end;
end;

const
WM_LBUTTONDOWN = 513;
WM_LBUTTONUP = 514;

procedure InitializeWizard();
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) then
begin
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONDOWN,0,0);
PostMessage(WizardForm.NextButton.Handle,WM_LBUTTONUP,0,0);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (Pos('/SP-', UpperCase(GetCmdTail)) > 0) and
(CurPageID = wpSelectComponents) then
WizardForm.BackButton.Visible := False;
end;


//Проверка на оставшыеся файлы
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
if DirExists(ExpandConstant('{app}')) then
if ExpandConstant('{language}') = 'ua' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не порожня.'#13#13 +
'"Так" – повне видалення всіх файлів у папці, включаючи саму папку.' #13#13 +
'"Ні" – відкрити папку в провіднику, щоб вручну видалити файли.'#13#13 +
'"Скасувати" – нічого не робити, видалити папку пізніше самостійно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не видалена.' #13#13 'Папка або один з файлів у ній задіяні іншою програмою.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Помилка відкриття.' #13#13 'Папка не знайдена.', mbError, MB_OK);

IDCANCEL:;
end
else
if ExpandConstant('{language}') = 'ru' then
case MsgBox('Папка "' + ExpandConstant('{app}') + '" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);

IDCANCEL:;
end
else
case MsgBox('Directory "' + ExpandConstant('{app}') + '" is not empty.'#13#13 +
'"Yes" to delete all of the files in the directory, including the directory itself.' #13#13 +
'"No" to open the directory with explorer to delete the files manually.'#13#13 +
'"Cancel" to do nothing and delete the directory later manually.', mbInformation, MB_YESNOCANCEL) of

IDYES:
if not DelTree(ExpandConstant('{app}'), True, True, True) then
MsgBox('Directory is not deleted.' #13#13 'Directory or one of the files are used by the other application.', mbError, MB_OK);

IDNO:
if not ShellExec('open', ExpandConstant('{app}'), '', '', SW_SHOWMAXIMIZED, ewNoWait, Res) then
MsgBox('Error opening the directory.' #13#13 'Directory is not found.', mbError, MB_OK);

IDCANCEL:;
end
end
end
end;
[/more]

Реализация рисунка 497х58 в верху инсталлятора
[more]procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end; [/more]
Автор: SotM
Дата сообщения: 03.08.2010 11:23
TonyJef
Сначала изучи хотя бы Pascal/Delphi. Без знания оного писать скрипты будет проблематично.
Автор: vint56
Дата сообщения: 03.08.2010 11:46
Raf_SE вот http://rghost.ru/2257135
Автор: TonyJef
Дата сообщения: 03.08.2010 11:48
SotM,окей,дай ссылку на паскаль дельфи

Автор: SotM
Дата сообщения: 03.08.2010 12:03
TonyJef
дык, глупый вопрос/просьба. В инете полным полно документаций/книг/форумов посвященных этому (Delphi).
Автор: sklart
Дата сообщения: 03.08.2010 12:22

Цитата:
Я вижу, что уже несколько человек скачали offline версию форума Inno Setup. Хоть скажите как вам это творение, может нужно что-то добавить/изменить/удалить. Жду критики/предложений/комментариев.

Замечательно! У меня на инете скорость малая, намного удобнее скачать раз офлайн версию, а не ждать, пока загрузится огромная "версия для печати". Да и поиск удобный.
Спасибо большое!
Автор: ExpeditorR
Дата сообщения: 03.08.2010 12:29
Profrager

Цитата:
Была такая же идея) Но вот если бы еще увидеть в твоей dll функцию, которая сама отображает всю инфу в окне с заданным хендлом, было бы совсем замечательно)

Хорошая идея, так и сделаю.
Автор: nik1967
Дата сообщения: 03.08.2010 12:38
ExpeditorR

Цитата:
Вопрос №1 - оно кому-нибудь надо?

А как же! Конечно надо!

Цитата:
Вопрос №2 - Кто может потестить на 64 битной винде?

Я могу.

Цитата:
Вопрос №3 - Работает ли get_hw_caps.dll в 64 битной винде?

Работает. У меня в некоторых скриптах используется эта dll.
Windows 7 x64 Ultimate.



Добавлено:
SotM

Цитата:
Сначала изучи хотя бы Pascal/Delphi. Без знания оного писать скрипты будет проблематично.

Блин, а я ни то ни другое не знаю .
Автор: Profrager
Дата сообщения: 03.08.2010 13:24
ExpeditorR
отпиши в пм свой icq или skype. Так сказать, в целях обоюдного деления опытом)
Автор: troyan90
Дата сообщения: 03.08.2010 14:04

Цитата:
Я вижу, что уже несколько человек скачали offline версию форума Inno Setup. Хоть скажите как вам это творение, может нужно что-то добавить/изменить/удалить. Жду критики/предложений/комментариев.

я скачал все части. интернет не всегда под рукой. второе - поиск на мой взгляд лучше.
вообщем если нужно что то найти - это самый лучший вариант. спасибо автору))
Автор: SotM
Дата сообщения: 03.08.2010 14:53
2ALL
Это конечно приятно, что многим людям понравились offline версии. Но я в общем-то хотел услышать замеченные глюки, пожелания, советы, заметки и т.д.
Автор: Tobikkk
Дата сообщения: 03.08.2010 15:35
ммм, скачал, тыркнул 2 раза и на всех страницах пишет "Переход на веб-страницу отменен".
win 7 ультимейт, x32.
Автор: Raf_SE
Дата сообщения: 03.08.2010 15:42
vint56
Огромное Спасибо!!!
Автор: SotM
Дата сообщения: 03.08.2010 15:47
Tobikkk
А вообще CHM файлы можно смотреть на твоей системе?
Автор: Tobikkk
Дата сообщения: 03.08.2010 16:12
SotM
Inno Setup Extensions Knowledge Base (содержит ответы на многие вопросы) | старая chm-версия
вот эту скачал, она работает.
http://s43.radikal.ru/i099/1008/68/2bcc3036b23c.png подтверждение.
Автор: troyan90
Дата сообщения: 03.08.2010 16:48

Цитата:
Но я в общем-то хотел услышать замеченные глюки, пожелания, советы, заметки и т.д.

глюков не было(win 7 32bit)
все ссылки которые нажимал - работают. поиск тоже корректно работает. картинки отображаются. вообщем вроде все норма
Автор: Gr0z
Дата сообщения: 03.08.2010 17:49
Alexander61434
Спасибо.

troyan90
Присоединяюсь, все сделано просто замечательно.

Автор: r1977
Дата сообщения: 03.08.2010 17:55
Скрипт от nik1967
[more] [/more]
Объясните кто может
И еще одна проблема
[more] [/more]
Автор: Gr0z
Дата сообщения: 03.08.2010 17:59
r1977
Укажие правильное имя архива, то есть data1.bin
Или сам укажи в модуле.
Автор: r1977
Дата сообщения: 03.08.2010 18:03
Gr0z
В каком модуле?
Автор: Gr0z
Дата сообщения: 03.08.2010 18:11
r1977
ISDone.iss

Код: if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\Data1.bin'), ExpandConstant('{app}'), false,CallBack, '', '', '') then break;
Автор: r1977
Дата сообщения: 03.08.2010 18:14
Gr0z

У меня вот так


Код: if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\Data.arc'), ExpandConstant('{app}\Data.arc'), false,CallBack, '', '', '') then break;
Автор: Gr0z
Дата сообщения: 03.08.2010 18:23
r1977
Ну значит делай название архива Data.arc.

Страницы: 1234567891011121314151617181920212223

Предыдущая тема: Skype (Часть 3)


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