ребята подскажите как добавить кнопки вот здесь
вот скрипт
[more];Название приложения
#define MyAppName "Batman - Arkham Asylum GOTY"
;Заголовок
#define MyAppName1 "Batman - Arkham Asylum GOTY"
;Екзешник
#define ExeName "BmLauncher.exe"
;Рабочая папка
#define WorkDir "{app}\Binaries"
;Место
#define NeedSize "9.74 GB"
#define NeedSizeInBytes "10462445624"
#define NeedMem 256
;#define SecondProgressBar
#define Components
;Размер компонетлиста
#define Short
;#define Long
;#define records
#define facompress
;#define PrecompInside
#define SrepInside
;#define MSCInside
;#define precomp "0.42"
;#define unrar
;#define XDelta
;#define PackZIP
#include "Files\TransparentStatic.iss"
#include "{tmp}\botva2.iss"
[Setup]
AppID={#MyAppName}_Seraph1
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultGroupName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
OutputBaseFilename=Installer
setupiconfile=icon.ico
UninstallFilesDir={userappdata}\{#MyAppName}_unistall
AppPublisher=Seraph1
VersionInfoCopyright=Seraph1
ExtraDiskSpaceRequired={#NeedSizeInBytes}
[Messages]
rus.ExitSetupMessage=Выйти из программы установки?
eng.ExitSetupMessage=Exit Setup program?
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
Name: eng; MessagesFile: compiler:Default.isl
[Files]
Source: "{tmp}\isxdl.dll"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\russian.ini"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\botva2.dll"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\botva2.iss"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\CallbackCtrl.dll"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\btn1.png"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\btn2.png"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\btn3.png"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\btn4.png"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\btn5.png"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall dontcopy
Source: "{tmp}\dotnetfx35setup.exe"; DestDir: "{tmp}"; MinVersion: 0.0,5.0; Flags: deleteafterinstall ignoreversion dontcopy
; Source: "{app}\res_mods\0.8.8\audio\"; DestDir: "{app}\res_mods\0.8.8\audio"; Components: g0\c03\c0302 g0\c04 g0\c05\c0504; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: Files\0.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\3.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\btnimage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\Button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\CallbackCtrl.dll; Flags: dontcopy
Source: Files\InnoCallback.dll; Flags: dontcopy
Source: Isdone\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Isdone\Russian.ini; DestDir: {tmp}; Flags: dontcopy
Source: Isdone\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: Isdone\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: output\records.inf; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PrecompInside
Source: Isdone\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Isdone\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Isdone\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Isdone\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Isdone\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Isdone\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Isdone\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Isdone\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
#if precomp == "0.38"
; Source: Isdone\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.4"
; Source: Isdone\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.41"
; Source: Isdone\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.42"
; Source: Isdone\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#else
; Source: Isdone\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
; Source: Isdone\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
; Source: Isdone\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
; Source: Isdone\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
Source: Isdone\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Isdone\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Isdone\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Isdone\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif
[UninstallDelete]
Type: filesandordirs; Name: {app}
[CustomMessages]
rus.Icons=Создать ярлык на рабочем столе
rus.Group=Создать ярлыки в меню "Пуск"
rus.Welcome1='{#MyAppName1}'
rus.Welcome2=%nВас приветствует Мастер установки. Рекомендуется закрыть%nантивирусные пакеты,а так же все прочие приложения.
rus.Finished1='{#MyAppName1}'
rus.Finished2=%nУстановка успешко завершена. Запуск можно произвести при помощи%nсоответствующей иконки в меню Пуск или на рабочем столе.
rus.FreeSpace=Доступно места на диске:
rus.NeedSpace=Требуется места на диске:
rus.ExtractedFile=Извлекается файл:
rus.Extracted=Распаковка архивов...
rus.CancelButton=Отменить распаковку
rus.Error=Ошибка распаковки!
rus.Error2=Завершение установки...
rus.Error1=Установка не была завершена успешно.
rus.ElapsedTime=Прошло:
rus.RemainingTime=Осталось времени:
rus.EstimatedTime=Всего:
rus.AllElapsedTime=Время установки:
rus.voice=Язык озвучки
rus.interface=Язык интерфейса
rus.game=Язык игры
rus.eng=Английский
rus.rus=Русский
rus.rus1=Русский
rus.play1=Играть {#MyAppName}
rus.unins=Удалить {#MyAppName}
rus.soft=Дополнительный софт
rus.vc=Microsoft Visual C++ Redist
rus.vc1=Установка Microsoft Visual C++ Redist...
rus.dx=DirectX
rus.dx1=Обновление DirectX...
rus.dt=Установить Microsoft Net Framework 3.5
rus.dt1=Установка Microsoft Net Framework 3.5...
rus.px=Nvidia PhysX
rus.live=Games for Windows LIVE
rus.Install=Установить
rus.installing=Установка Дополнительного программного обеспечения...
rus.del=Удалить сохраненные игры?
rus.dlc=Загружаемый контент (DLC)
rus.interfaceru=Русский текст и Английская Озвучка (при выборе русского языка в лаунчере)
rus.disk=Вставте следующий диск.
rus.pb=Установить Punk Buster
rus.ger=Немецкий
rus.res=Изменить Разрешение
rus.ita=Итальянский
rus.pol=Польский
rus.por=Португальский
rus.spa=Испанский
rus.fre=Французский
rus.rc=Rockstar Games Social Club
eng.FreeSpace=Free space on disk:
eng.NeedSpace=Need space on disk:
eng.Welcome1='{#MyAppName}'
eng.Welcome2=%nWelcome to installation program. It is recommended to switch off%nanti-virus packages and also to close other applications.
eng.Finished2=%nInstallation was completed successfully.%nThe application may be launched by selected icons
eng.Icons=Create a desktop icon
eng.Group=Create a Start Menu icon
eng.FreeSpace=Free space on disc:
eng.NeedSpace=Required space on disc:
eng.ExtractedFile=Extracting File:
eng.Extracted=Unpacking archives...
eng.CancelButton=Cancel
eng.Error=Error unpacking!
eng.Error2=Finishing the Installation...
eng.Error1=lnstallation wasn't completed successfully.
eng.ElapsedTime=Elapsed Time:
eng.RemainingTime=Remaining time:
eng.EstimatedTime=Estimated Time:
eng.AllElapsedTime=Installing time:
eng.voice=Voice language
eng.interface=Interface language
eng.game=Game language
eng.eng=English
eng.rus=Russian
eng.rus1=Russian
eng.ita=Italian
eng.pol=Polish
eng.por=Portuguese
eng.spa=Spanish
eng.fre=French
eng.play1=Play {#MyAppName}
eng.unins=Uninstall {#MyAppName}
eng.soft=Additional software
eng.vc=Visual C++ Redist
eng.vc1=Installing Microsoft Visual C++ Redist...
eng.dt=Install Microsoft Net Framework 3.5
eng.dt1=Installing Microsoft Net Framework 3.5...
eng.live=Games for Windows LIVE
eng.px=Nvidia PhysX
eng.dx=DirectX
eng.dx1=Updating DirectX...
eng.install=Install
eng.installing=Installing Additional Software...
eng.del=Delete saved games?
eng.dlc=Downloadable Content (DLC)
eng.interfaceru=Russian text and English Voice (if you choose russian language if launcher)
eng.pb=Install Punk Buster
eng.ger=German
eng.res=Change Resolution
[Icons]
;Name: {group}\{cm:unins}; Filename: {uninstallexe}; Check: MakeStartMenuIcon and CheckError
;Name: {group}\Settlers 6; Filename: {app}\Play Settlers 6.exe; WorkingDir: {app}; Check: MakeStartMenuIcon and CheckError
;Name: {userdesktop}\Settlers 6; Filename: {app}\Play Settlers 6.exe; WorkingDir: {app}; Check: MakeDesktopIcon and CheckError
;Name: {group}\Settlers 6 - The Eastern Realm; Filename: {app}\Play Settlers 6 - The Eastern Realm.exe; WorkingDir: {app}; Check: MakeStartMenuIcon and CheckError
;Name: {userdesktop}\Settlers 6 - The Eastern Realm; Filename: {app}\Play Settlers 6 - The Eastern Realm.exe; WorkingDir: {app}; Check: MakeDesktopIcon and CheckError
Name: {group}\{cm:unins}; Filename: {uninstallexe}; Check: MakeStartMenuIcon and CheckError
Name: {group}\{cm:play1}; Filename: {#WorkDir}\{#ExeName}; WorkingDir: {#WorkDir}; Check: MakeStartMenuIcon and CheckError; Parameters: -scofflineonly
Name: {userdesktop}\{#MyAppName}; Filename: {#WorkDir}\{#ExeName}; WorkingDir: {#WorkDir}; Check: MakeDesktopIcon and CheckError; Parameters: -scofflineonly
#ifdef Components
[Types]
Name: full; Description: Full installation; Flags: iscustom
[Components]
//Name: pack; Description: {cm:pack}; Types: full
Name: text; Description: {cm:game}; Flags: fixed checkablealone; Types: full
Name: text\eng; Description: {cm:eng}; Flags: exclusive
Name: text\rus; Description: {cm:rus}; Flags: exclusive; Types: full
Name: soft; Description: {cm:soft}; Types: full
Name: soft\dx; Description: {cm:dx}; Types: full
Name: soft\vc; Description: {cm:vc}; Types: full
Name: soft\px; Description: {cm:px}; Types: full
Name: soft\live; Description: {cm:live}; Types: full
;Name: soft\rc\del; Description: Delete {cm:rc}; Types: full
;Name: text\rus1; Description: {cm:rus1}; Flags: exclusive
;Name: Voice; Description: {cm:voice}; Flags: fixed checkablealone; Types: full
;Name: Voice\eng; Description: {cm:eng}; Flags: exclusive
;Name: Voice\rus; Description: {cm:rus}; Flags: exclusive
;Name: Voice\ger; Description: {cm:ger}; Flags: exclusive
;Name: dx; Description: {cm:dx}; Types: full
;Name: soft\live; Description: {cm:live}; Types: full
;Name: soft\pb; Description: {cm:pb}; Types: full
#endif
[Run]
Filename: {app}\Redist\DirectX\DXSETUP.exe; Components: soft\dx; Check: CheckError
Filename: {app}\Redist\vcredist_x86.exe; Components: soft\vc; Check: CheckError
Filename: {app}\Redist\PhysX.exe; Components: soft\px; Check: CheckError
Filename: {app}\Redist\gfwlivesetup.exe; Components: soft\vc; Check: CheckError
;Filename: {app}\Redist\pbsetup.exe; WorkingDir: {app}\Redist; Components: soft\pb; Check: CheckError
[Registry]
;{app}: ; Flags: uninsdeletekey
;Root: HKLM; SubKey: SOFTWARE\Ubisoft\Far Cry 2; ValueType: string; ValueName: InstallDir; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\RocksteadyLtd\Batman Arkham Asylum GOTY; ValueType: string; ValueName: Install Directory; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\RocksteadyLtd\Batman Arkham Asylum GOTY; ValueType: dword; ValueName: LaunchPostInstall; ValueData: $00000000; Flags: uninsdeletekey
[INI]
Filename: {app}\BmGame\Config\Installer.ini; Section: Language; Key: Language; String: rus; Components: text\rus
;Filename: "{app}\extra1\bba\s6lng.ini"; Section: "Settlers6"; Key: "Language"; String: "en"; Components: text\eng;
[Code]
//******************************************* [Начало - Элементы страниц] ***************************************************//
var
IsInit:Boolean;
n: Integer;
ResultStr:string;
ResultCode: Integer;
BorderWidth: Integer;
BGImage, BTNImage, ReadyBitmap: TBitmapImage;
BGImageStream, BTNImageStream: TMemoryStream;
procedure InitializeWizard1();
begin
with WizardForm do
begin
WizardForm.BorderIcons:= [biSystemMenu];
DirBrowseButton.Left:=390;
DirBrowseButton.Top:=105;
DirEdit.Left:=90;
DirEdit.Top:= 105;
DirBrowseButton.Width:=80;
DirEdit.width:=290;
GroupBrowseButton.Left:=390;
GroupBrowseButton.Top:=105;
GroupBrowseButton.Width:=80
GroupEdit.Left:=80;
GroupEdit.Top:= 105;
GroupEdit.width:=300;
GroupEdit.Color:= ClBlack
NextButton.BringToFront;
NextButton.Left:=300;
NextButton.Top:=270;
NextButton.Width:=80;
BackButton.BringToFront;
BackButton.Left:=210;
BackButton.Top:=270;
BackButton.Width:=80;
CancelButton.BringToFront;
CancelButton.Left:=390;
CancelButton.Top:=270;
CancelButton.Width:=80;
Font.Name:='Trebuchet MS';
DirEdit.Color:=clBlack;
Font.Color:=clWhite;
ProgressGauge.Top:=110;
ProgressGauge.Left:=235;
ProgressGauge.Width:=337;
ReadyMemo.Left:=100;
ReadyMemo.Top:= 100;
ReadyMemo.Width:=350;
ReadyMemo.Height:=166;
ReadyMemo.Font.Color:= clWhite;
ReadyMemo.ScrollBars:= ssNone; //ssVertical
ReadyMemo.Color:= clBlack;
InfoBeforeMemo.Left:=228;
InfoBeforeMemo.Top:=90;
InfoBeforeMemo.Width:=350;
InfoBeforeMemo.Height:=193;
InfoAfterMemo.Left:=228;
InfoAfterMemo.Top:=90;
InfoAfterMemo.Width:=350;
InfoAfterMemo.Height:=193;
BGImageStream := TMemoryStream.Create;
ExtractTemporaryFileToStream('0.bmp', BGImageStream);
BGImageStream.Position := 0;
BTNImageStream := TMemoryStream.Create;
ExtractTemporaryFileToStream('btnimage.bmp', BTNImageStream);
BTNImageStream.Position := 0;
BGImage := TBitmapImage.Create(WizardForm);
BGImage.Bitmap.LoadFromStream(BGImageStream);
BTNImage := TBitmapImage.Create(WizardForm);
BTNImage.Bitmap.LoadFromStream(BTNImageStream);
with WizardForm.ComponentsList do begin
ComponentsList.Left:=40;
ComponentsList.Top:=80;
//80
ComponentsList.Width:=193;
ComponentsList.Height:=147;
ComponentsList.Font.Color:= clWhite;
ComponentsList.Color:= clBlack;
ComponentsList.Font.Style:=[];
ComponentsList.Font.Name:='Trebuchet';
ComponentsList.BorderStyle := bsNone;
//ComponentsList.Font.Height:=15;
#ifdef Long
BorderWidth := (WizardForm.ComponentsList.Width-WizardForm.ComponentsList.ClientWidth) div 2;
if ItemCount > 5 then
LoadBGBmpFromBitmap(BGImage.Bitmap, WizardForm.ComponentsList.Left+BorderWidth/4, WizardForm.ComponentsList.Top+BorderWidth/4)
else
LoadBGBmpFromBitmap(BGImage.Bitmap, WizardForm.ComponentsList.Left+BorderWidth, WizardForm.ComponentsList.Top+BorderWidth);
LoadBtnBmpFromBitmap(btnimage.Bitmap);
#endif
#ifdef Short
BorderWidth := (WizardForm.ComponentsList.Width-WizardForm.ComponentsList.ClientWidth) div 2;
LoadBGBmpFromBitmap(BGImage.Bitmap, WizardForm.ComponentsList.Left+BorderWidth, WizardForm.ComponentsList.Top+BorderWidth);
LoadBtnBmpFromBitmap(btnimage.Bitmap);
#endif
end;
end;
end;
//******************************************* [Конец - Элементы страниц] ***************************************************//
//******************************************* [Начало - Размер окна инсталлятора] ***************************************************//
procedure InitializeWizard2();
begin
//WizardForm.Width:=506;
//WizardForm.Height:=332;
WizardForm.ClientWidth:=500;
WizardForm.ClientHeight:=300;
WizardForm.Position:=poScreenCenter;
//6 28
with WizardForm do
begin
InnerNotebook.Left:=0;
InnerNotebook.Top:=0;
InnerNotebook.Width:=500; //Ширина инсталлятора
InnerNotebook.Height:=300; //Высота инсталлятора
OuterNotebook.Left:=0;
OuterNotebook.Top:=0;
OuterNotebook.Width:=500; //Ширина инсталлятора
OuterNotebook.Height:=300; //Высота инсталлятора
end;
end;
//******************************************* [Конец - Размер окна инсталлятора] ***************************************************//
//******************************************* [Начало - Наложение изображений] ***************************************************//
var
BmpFile: TBitmapImage; //Наложение изображений
MyStream: TMemoryStream;
procedure InitializeWizard3();
begin
ExtractTemporaryFile('0.bmp');
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('2.bmp');
ExtractTemporaryFile('3.bmp');
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Parent:= WizardForm.WelcomePage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Parent:= WizardForm.InfoBeforePage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Parent:= WizardForm.SelectDirPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectProgramGroupPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\0.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectComponentsPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.ReadyPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.InstallingPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.InfoAfterPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 500, 300);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;
MyStream:= tMemoryStream.Create();
ExtracttemporaryFileToStream('0.bmp', MyStream);
MyStream.SaveToFile(ExpandConstant('{tmp}\0.bmp'));
DeleteFile(ExpandConstant('{tmp}')+'\0.bmp');
ExtracttemporaryFileToStream('1.bmp', MyStream);
MyStream.SaveToFile(ExpandConstant('{tmp}\1.bmp'));
DeleteFile(ExpandConstant('{tmp}')+'\1.bmp');
ExtracttemporaryFileToStream('2.bmp', MyStream);
MyStream.SaveToFile(ExpandConstant('{tmp}\2.bmp'));
DeleteFile(ExpandConstant('{tmp}')+'\2.bmp');
ExtracttemporaryFileToStream('3.bmp', MyStream);
MyStream.SaveToFile(ExpandConstant('{tmp}\3.bmp'));
DeleteFile(ExpandConstant('{tmp}')+'\3.bmp');
with WizardForm do
begin
MainPanel.Hide;
Finishedlabel.Hide;
DiskSpaceLabel.Hide;
ProgressGauge.Hide;
TypesCombo.Hide;
ComponentsDiskSpaceLabel.Hide;
FilenameLabel.Hide;
StatusLabel.Hide;
end;
end;
//******************************************* [Конец - Наложение изображений] ***************************************************//
//******************************************* [Начало - Лейблы] ***************************************************//
var
WLabel1, WLabel2, StatusLabel, FilenameLabel: TLabel;
procedure InitializeWizard4;
begin
StaticSetTransparent;
//****************[WelcomePage]
WizardForm.WelcomeLabel1.Font.Color:=clWhite;
WizardForm.WelcomeLabel1.Font.Name:='Trebuchet MS';
WizardForm.WelcomeLabel1.Left:=10;
WizardForm.WelcomeLabel1.WordWrap:=True;
// WizardForm.WelcomeLabel1.Alignment := taCenter;
WizardForm.WelcomeLabel1.Top:=175;
WizardForm.WelcomeLabel1.Width:=351;
WizardForm.WelcomeLabel1.Caption:= ExpandConstant('{cm:welcome1}');
WizardForm.WelcomeLabel1.Height:=20;
WizardForm.WelcomeLabel1.Font.Style:=[fsBold];
WizardForm.WelcomeLabel1.Font.Height:=20;
WizardForm.WelcomeLabel2.Font.Color:=clWhite;
WizardForm.WelcomeLabel2.Font.Name:='Trebuchet MS';
WizardForm.WelcomeLabel2.Font.Height:=17;
WizardForm.WelcomeLabel2.Left:=10;
WizardForm.WelcomeLabel2.Top:=183
WizardForm.WelcomeLabel2.Caption:= ExpandConstant('{cm:welcome2}');
WizardForm.WelcomeLabel2.Width:=500;
//****************[WelcomePage]
//****************[SelectDirPage]
WizardForm.SelectDirLabel.Font.Color:=clWhite;
WizardForm.SelectDirLabel.Font.Name:='Trebuchet MS';
WizardForm.SelectDirLabel.Font.Height:=17;
WizardForm.SelectDirLabel.Left:=40;
WizardForm.SelectDirLabel.Top:=75;
WizardForm.SelectDirLabel.Width:=351;
WizardForm.SelectDirLabel.Height:=20;
WizardForm.SelectDirBrowseLabel.Font.Color:=clWhite;
WizardForm.SelectDirBrowseLabel.Font.Name:='Trebuchet MS';
WizardForm.SelectDirBrowseLabel.Left:=40;
WizardForm.SelectDirBrowseLabel.Font.Height:=17;
WizardForm.SelectDirBrowseLabel.Top:=142;
WizardForm.SelectDirBrowseLabel.Width:=351;
WizardForm.SelectDirBrowseLabel.Height:=33;
//****************[SelectDirPage]
//****************[SelectComponentsPage]
WizardForm.SelectComponentsLabel.Font.Color:=clWhite;
WizardForm.SelectComponentsLabel.Font.Name:='Trebuchet MS';
WizardForm.SelectComponentsLabel.Font.Height:=17;
WizardForm.SelectComponentsLabel.Left:=260;
WizardForm.SelectComponentsLabel.Top:=110;
WizardForm.SelectComponentsLabel.Width:=200;
WizardForm.SelectComponentsLabel.Height:=300;
//****************[SelectComponentsPage]
//****************[InfoBeforePage]
WizardForm.InfoBeforeClickLabel.Font.Color:=clWhite;
WizardForm.InfoBeforeClickLabel.Font.Name:='Trebuchet MS';
WizardForm.InfoBeforeClickLabel.Font.Height:=17;
WizardForm.InfoBeforeClickLabel.Left:=10;
WizardForm.InfoBeforeClickLabel.Top:=290;
//****************[InfoBeforePage]
//****************[SelectProgramGroupPage]
WizardForm.SelectStartMenuFolderLabel.Font.Color:=clWhite;
WizardForm.SelectStartMenuFolderLabel.Font.Name:='Trebuchet MS';
WizardForm.SelectStartMenuFolderLabel.Font.Height:=17;
WizardForm.SelectStartMenuFolderLabel.Left:=40;
WizardForm.SelectStartMenuFolderLabel.Top:=75;
WizardForm.SelectStartMenuFolderBrowseLabel.Font.Color:=clWhite;
WizardForm.SelectStartMenuFolderBrowseLabel.Font.Name:='Trebuchet MS';
WizardForm.SelectStartMenuFolderBrowseLabel.Font.Height:=17;
WizardForm.SelectStartMenuFolderBrowseLabel.Left:=40;
WizardForm.SelectStartMenuFolderBrowseLabel.Top:=190;
WizardForm.SelectStartMenuFolderBrowseLabel.Width:=351;
WizardForm.SelectStartMenuFolderBrowseLabel.Height:=33;
//****************[SelectProgramGroupPage]
//****************[ReadyPage]
WizardForm.ReadyLabel.Font.Color:=clWhite;
WizardForm.ReadyLabel.Font.Name:='Trebuchet MS';
WizardForm.ReadyLabel.Left:=10;
WizardForm.ReadyLabel.Top:=275;
WizardForm.ReadyLabel.Width:=0;
//****************[ReadyPage]
//****************[InstallingPage]
begin
StatusLabel:= TLabel.Create(WizardForm);
with StatusLabel do
begin
Left:=228;
Top:=88;
Width:=0;
Height:= 0;
AutoSize:= False;
Transparent := True;
Parent:= WizardForm.InstallingPage;
Font.Name:= 'Trebuchet MS';
Font.Height:= 17;
end;
end;
//****************[InstallingPage]
//****************[InfoAfterPage]
WizardForm.InfoAfterClickLabel.Font.Color:=clWhite;
WizardForm.InfoAfterClickLabel.Font.Name:='Trebuchet MS';
WizardForm.InfoAfterClickLabel.Left:=178;
WizardForm.InfoAfterClickLabel.Top:=290;
//****************[InfoAfterPage]
//****************[FinishedPage]
WizardForm.FinishedHeadingLabel.Font.Color:=clWhite;
WizardForm.FinishedHeadingLabel.Font.Name:='Trebuchet MS';
WizardForm.FinishedHeadingLabel.Left:=10;
WizardForm.FinishedHeadingLabel.Top:=175;
WizardForm.FinishedHeadingLabel.Width:=400;
WizardForm.FinishedHeadingLabel.Height:=20;
WizardForm.FinishedHeadingLabel.Font.Height:=20;
WizardForm.FinishedHeadingLabel.Font.Style:=[fsBold];
WizardForm.FinishedHeadingLabel.Caption:= ExpandConstant('{cm:Finished1}');
WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := 10;
WLabel1.Top := 183;
WLabel1.Width :=500;
WLabel1.Height :=10;
WLabel1.Font.Color:= clwhite;
WLabel1.Font.Name:='Trebuchet MS';
WLabel1.Font.Height:=17;
WLabel1.Caption := ExpandConstant('{cm:finished2}');
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.FinishedPage;
WLabel2 := TLabel.Create(WizardForm);
WLabel2.Left := 87;
WLabel2.Top := 190;
WLabel2.Width := 209;
WLabel2.Height := 13;
WLabel2.Font.Color:= clwhite;
WLabel2.Font.Name:='Trebuchet MS';
WLabel2.Font.Height:=17;
WLabel2.Caption := ExpandConstant('{cm:NeedSpace} {#NeedSize}');
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.SelectDirPage;
//****************[FinishedPage]
end;
//******************************************* [Конец - Лейблы] ***************************************************//
//******************************************* [Начало - Лейблы 2] ***************************************************//
type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);
var
TextTimer: LongWord;
function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';
Procedure TextProc(h, msg, idevent, dwTime: Longword);
Begin
//FilenameLabel.Caption:= WizardForm.FilenameLabel.Caption;
// StatusLabel.Caption:= WizardForm.StatusLabel.Caption;
End;
procedure DeinitializeSetup1();
begin
KillTimer(0, TextTimer);
end;
procedure InitializeWizard5();
begin
FilenameLabel:= TLabel.Create(WizardForm);
with FilenameLabel do
begin
Left:=228;
Top:=140;
Width:= 0;
Height:= 0;
AutoSize:= False;
Transparent := True;
Parent:= WizardForm.InstallingPage;
Font.Name:= 'Trebuchet MS';
Font.Height:= 17;
end;
end;
//******************************************* [Конец - Лейблы 2] ***************************************************//
//******************************************* [ 2 обзора и ярлыки ] ***************************************************//
var
StartMenuIcon,DesktopIcon: TCheckBox; DesktopIconLabel, StartMenuIconLabel: TLabel;
function MakeDesktopIcon: Boolean; begin Result:=DesktopIcon.Checked; end;
function MakeStartMenuIcon: Boolean; begin Result:=StartMenuIcon.Checked;end;
procedure DesktopIconOnClick(Sender: TObject);
begin
if DesktopIcon.Checked = False then
DesktopIcon.Checked:= True else
DesktopIcon.Checked:= False;
end;
procedure StartMenuIconOnClick(Sender: TObject);
begin
if StartMenuIcon.Checked = False then
StartMenuIcon.Checked:= True else
StartMenuIcon.Checked:= False;
end;
procedure NoStartMenuIcon(Sender: TObject);
begin
if StartMenuIcon.Checked = false then
begin
wizardform.GroupEdit.enabled:= false;
wizardform.GroupBrowseButton.enabled:= false;
end
else
begin
wizardform.GroupEdit.enabled:= true;
wizardform.GroupBrowseButton.enabled:= true;
end;
end;
procedure InitializeWizard6();
begin
StatusLabel.Hide;
FilenameLabel.Hide;
DesktopIcon:= TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Parent:= WizardForm.SelectProgramGroupPage;
Left:=240;
Top:= 161;
Width:= 13;
Height:= 13;
TabOrder:= 2;
Checked:= True;
end;
DesktopIconLabel := TLabel.Create(WizardForm);
with DesktopIconLabel do begin
AutoSize:=true;
SetBounds(255, 160, 0, 0);
WordWrap:= False;
// ShowAccelChar := False;
Transparent:=True;
Font.Name:= 'Trebuchet MS';
Font.Height:= 17;
Font.Color:=clWhite;
Caption := ExpandConstant('{cm:Icons}');
Parent := wizardform.SelectProgramGroupPage;
OnClick:= @DesktopIconOnClick;
end;
StartMenuIcon:= TCheckBox.Create(WizardForm);
with StartMenuIcon do
begin
Parent:= WizardForm.SelectProgramGroupPage;
Left:=40;
Top:= 161;
Width:= 13;
Height:= 13;
TabOrder:= 2;
Checked:= True;
OnClick:= @NoStartMenuIcon;
end;
StartMenuIconLabel := TLabel.Create(WizardForm);
with StartMenuIconLabel do begin
AutoSize:=true;
SetBounds(55, 160, 0, 0);
WordWrap:= False;
// ShowAccelChar := False;
Transparent:=True;
Font.Name:= 'Trebuchet MS';
Font.Height:= 17;
Font.Color:=clWhite;
Caption := ExpandConstant('{cm:Group}');
Parent := wizardform.SelectProgramGroupPage;
OnClick:= @StartMenuIconOnClick;
end;
end;
//******************************************* [ 2 обзора и ярлыки ] ***************************************************//
//******************************************* [ Место ] ***************************************************//
var
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;
SizeStr: String;
SizeInt: Integer;
SymbolNumber: Integer;
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 GetSize(): Integer;
begin
SizeStr:= WizardForm.DiskSpaceLabel.Caption;
for SymbolNumber:= 97 to 122 do begin
while (Pos(Chr(SymbolNumber), SizeStr) > 0) do Delete(SizeStr, Pos(Chr(SymbolNumber), SizeStr),1); //Находим все символы нижнего регистра и удаляем
while (Pos(AnsiUppercase(Chr(SymbolNumber)), SizeStr) > 0) do Delete(SizeStr, Pos(AnsiUppercase(Chr(SymbolNumber)), SizeStr),1); end; //Находим все символы верхнего регистра и удаляем
for SymbolNumber:= 192 to 255 do begin
while (Pos(Chr(SymbolNumber), SizeStr) > 0) do Delete(SizeStr, Pos(Chr(SymbolNumber), SizeStr),1); end; //Находим все символы нижнего регистра и удаляем
while (Pos('.', SizeStr) > 0) do Delete(SizeStr, Pos('.', SizeStr), 1) //Удаляем точки
Delete(SizeStr, Pos(',', SizeStr), 5) //Удаляем дробную часть
//Result:= StrToInt(Trim(SizeStr)); //Переводим в число
end;
function CompareNum(FirstNum, SecondNum: Integer): Boolean;
begin
if FirstNum < SecondNum then Result:= False else Result:= True;
end;
Function MbOrTb(Byte: Extended): String;
begin
if Byte < 1024 then Result:= NumToStr(Byte) + ' MB' else
if Byte/1024 < 1024 then Result:= NumToStr(round(Byte/1024*100)/100) + ' GB' else
Result:= NumToStr(round((Byte/(1024*1024))*100)/100) + ' TB'
end;
procedure GetFreeSpaceCaption(Sender: TObject);
var Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
FreeSpaceLabel.Caption:= ExpandConstant('{cm:FreeSpace} ') + MbOrTb(FreeMB)
if WizardForm.CurPageID = wpSelectDir then begin
WizardForm.NextButton.Enabled:= CompareNum(FreeMB, SizeInt)
end;
end;
procedure InitializeWizard7();
begin
WizardForm.DiskSpaceLabel.Hide;
SizeInt:= GetSize;
FreeSpaceLabel := TLabel.Create(WizardForm);
FreeSpaceLabel.SetBounds(87, 210, 209, 13)
FreeSpaceLabel.Parent := WizardForm.SelectDirPage;
FreeSpaceLabel.Transparent:=true;
FreeSpaceLabel.Font.Name:= 'Trebuchet MS';
FreeSpaceLabel.Font.Height:= 17;
WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
end;
//******************************************* [ Место ] ***************************************************//
//******************************************* [Начало - Текстурирования кнопок] ***************************************************//
const
ButtonWidth = 80;
ButtonHeight = 23;
bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
procedure ButtonLabelClick(Sender: TObject);
var
Button: TButton;
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
case TLabel(Sender).Tag of
bidBack: Button:=WizardForm.BackButton
bidNext: Button:=WizardForm.NextButton
bidCancel: Button:=WizardForm.CancelButton
bidDirBrowse: Button:=WizardForm.DirBrowseButton
bidGroupBrowse: Button:=WizardForm.GroupBrowseButton
else
Exit
end
Button.OnClick(Button)
end;
procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then
ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth
end;
procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
end;
procedure LoadButtonImage(AButton: TButton; AButtonIndex: integer);
var
Image: TBitmapImage;
Panel: TPanel;
Labl: TLabel;
begin
Panel:=TPanel.Create(WizardForm)
Panel.Left:=AButton.Left
Panel.Top:=AButton.Top
Panel.Width:=AButton.Width
Panel.Height:=AButton.Height
Panel.Tag:=AButtonIndex
Panel.Parent:=AButton.Parent
ButtonPanel[AButtonIndex]:=Panel
Image:=TBitmapImage.Create(WizardForm)
Image.Width:=160
Image.Height:=88
Image.Enabled:=False
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\button.bmp'))
Image.Parent:=Panel
ButtonImage[AButtonIndex]:=Image
with TLabel.Create(WizardForm) do begin
Tag:=AButtonIndex
Parent:=Panel
Width:=Panel.Width
Height:=Panel.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end
Labl:=TLabel.Create(WizardForm)
Labl.Left:=0
Labl.Top:=3
Labl.Height:=17
Labl.Width:=Panel.Width
Labl.Autosize:=false
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Font.Height:=17;
Labl.Font.Name:='Trebuchet MS';
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;
procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;
procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;
procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;
procedure CurPageChanged4(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;
procedure InitializeWizard8();
begin
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight
WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight
WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick
WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick
ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
//******************************************* [Конец - Текстурирования кнопок] ***************************************************//
//******************************************* [Начало - isdone] ***************************************************//
const
PCFonFLY=true;
notPCFonFLY=false;
var
LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
LabelPct2: TLabel;
ISDoneProgressBar2:TNewProgressBar;
#endif
ISDoneCancel:integer;
ISDoneError:boolean;
PCFVer:double;
type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';
function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';
function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';
function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';
function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-100);
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
Result := ISDoneCancel;
end;
procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
ResumeProc;
end;
procedure BeforeInstall;
begin
With Tlabel.Create(WizardForm) do begin
Parent:=WizardForm.InstallingPage;
Caption:= ExpandConstant('{cm:installing');
AutoSize := true;
Left := 10;
Top := 213;
Font.Name:='Trebuchet MS';
Font.Height:=17;
Transparent:= true;
end;
end;
procedure HideControls;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
//LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
#ifdef SecondProgressBar
ISDoneProgressBar2.Hide;
LabelPct2.Hide;
#endif
end;
procedure CreateControls;
var PBTop:integer;
begin
PBTop:=50;
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := 15;
Left := 10;
Top := 193;
Width := 443;
Max := 1000;
end;
LabelPct1 := TLabel.Create(WizardForm);
with LabelPct1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar1.Width+15;
Top := ISDoneProgressBar1.Top + -2;
Width := 80;
Font.Name:='Trebuchet MS';
Font.Height:=18;
Transparent:= true;
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width+30;
Left := 10;
Top := 170;
Font.Name:='Trebuchet MS';
Font.Height:=17;
Transparent:= true;
end;
#ifdef SecondProgressBar
PBTop:=PBTop+25;
ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar2 do begin
Parent := WizardForm.InstallingPage;
Left := 0;
Top := 230;
Width := ISDoneProgressBar1.Width;
Max := 1000;
Height := WizardForm.ProgressGauge.Height;
end;
LabelPct2 := TLabel.Create(WizardForm);
with LabelPct2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar2.Width+5;
Top := ISDoneProgressBar2.Top + 2;
Width := 80;
Transparent:= true;
Font.Name:='Trebuchet MS';
end;
#endif
LabelTime1 := TLabel.Create(WizardForm);
with LabelTime1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width div 2;
Left := 10;
Top := 215;
Transparent:= true;
Font.Name:='Trebuchet MS';
Font.Height:=17;
end;
LabelTime2 := TLabel.Create(WizardForm);
with LabelTime2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := LabelTime1.Width+40;
Left := ISDoneProgressBar1.Width div 2;
Top := LabelTime1.Top;
Transparent:= true;
Font.Name:='Trebuchet MS';
Font.Height:=17;
end;
LabelTime3 := TLabel.Create(WizardForm);
with LabelTime3 do begin
Parent := WizardForm.FinishedPage;
AutoSize := False;
Width := 300;
Left := 190;
Top := 180;
Alignment := taRightJustify;
Transparent:= true;
Font.Name:='Trebuchet MS';
Font.Height:=17;
end;
end;
//******************************************* [Конец - isdone] ***************************************************//
procedure DeinitializeSetup2;
begin
StaticSetDefault;
end;
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
InitializeWizard5();
InitializeWizard6();
InitializeWizard7();
InitializeWizard8();
IsInit:=True;// в самом конце InitializeWizard
end;
function InitializeSetup(): Boolean;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_Seraph1_is1', 'UninstallString', ResultStr)
if ResultStr='' then
begin
IsInit:=False;
Result := True;
end
else
ResultStr:=RemoveQuotes(ResultStr);
Exec(ResultStr, '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;
procedure CurPageChanged(CurPageID: Integer);
begin
// if CurPageID = wpSelectDir then begin WizardForm.NextButton.Enabled:= False; end; //Для примера, потом удалите
//WizardLabel.Parent:= PageFromID(CurPageID).Surface;
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
if CurPageID = wpSelectDir then begin
GetFreeSpaceCaption(nil);
end;
if CurPageID = wpSelectProgramGroup then begin
ButtonLabel[bidNext].Caption:=ExpandConstant ('{cm:Install}');
ButtonLabel[bidNext].Left:= (ButtonPanel[bidNext].Width/2) - (ButtonLabel[bidNext].Width/2);
end;
if (CurPageID = wpFinished) and ISDoneError then
begin
LabelTime3.Hide;
Wlabel1.Hide;
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedHeadingLabel.Font.Color:= clWhite;
WizardForm.FinishedHeadingLabel.Caption:= ExpandConstant('{cm:Error1}');
end;
end;
function CheckError:boolean;
begin
result:= not ISDoneError;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID =wpReady)then
Result:= True;
end;
type
TSHFileOpStruct = record
Wnd: HWND;
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word; // FILEOP_FLAGS;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND; // Pointer;
lpszProgressTitle: PChar; { only used if FOF_SIMPLEPROGRESS }
end;
const
// use in wFunc
{ $EXTERNALSYM FO_MOVE }
FO_MOVE = $0001;
{ $EXTERNALSYM FO_COPY }
FO_COPY = $0002;
{ $EXTERNALSYM FO_DELETE }
FO_DELETE = $0003;
{ $EXTERNALSYM FO_RENAME }
FO_RENAME = $0004;
// use in fFlags
{ $EXTERNALSYM FOF_MULTIDESTFILES }
FOF_MULTIDESTFILES = $0001;
{ $EXTERNALSYM FOF_CONFIRMMOUSE }
FOF_CONFIRMMOUSE = $0002;
{ $EXTERNALSYM FOF_SILENT }
FOF_SILENT = $0004; { don't create progress/report }
{ $EXTERNALSYM FOF_RENAMEONCOLLISION }
FOF_RENAMEONCOLLISION = $0008;
{ $EXTERNALSYM FOF_NOCONFIRMATION }
FOF_NOCONFIRMATION = $0010; { Don't prompt the user. }
{ $EXTERNALSYM FOF_WANTMAPPINGHANDLE }
FOF_WANTMAPPINGHANDLE = $0020; { Fill in
SHFILEOPSTRUCT.hNameMappings
Must be freed using
SHFreeNameMappings }
{ $EXTERNALSYM FOF_ALLOWUNDO }
FOF_ALLOWUNDO = $0040;
{ $EXTERNALSYM FOF_FILESONLY }
FOF_FILESONLY = $0080; { on *.*, do only files }
{ $EXTERNALSYM FOF_SIMPLEPROGRESS }
FOF_SIMPLEPROGRESS = $0100; { means don't show names of files }
{ $EXTERNALSYM FOF_NOCONFIRMMKDIR }
FOF_NOCONFIRMMKDIR = $0200; { don't confirm making any
needed dirs }
{ $EXTERNALSYM FOF_NOERRORUI }
FOF_NOERRORUI = $0400; { don't put up error UI }
procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
FindHandle1,ColFiles1,CurIndex1,tmp:integer;
ExecError:boolean;
InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
if CurStep = ssInstall then begin //Если необходимо, можно поменять на ssPostInstall
TextTimer:= SetTimer(0, 0, 10, WrapTimerProc(@TextProc, 4));
WizardForm.ProgressGauge.Hide;
CreateControls;
WizardForm.CancelButton.OnClick:=@CancelButtonOnClick;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
ISDoneCancel:=0;
// Распаковка всех необходимых файлов в папку {tmp}.
ExtractTemporaryFile('unarc.dll');
#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
#ifdef MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef facompress
ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
#if precomp == "0.38"
ExtractTemporaryFile('precomp038.exe');
#else
#if precomp == "0.4"
ExtractTemporaryFile('precomp040.exe');
#else
#if precomp == "0.41"
ExtractTemporaryFile('precomp041.exe');
#else
#if precomp == "0.42"
ExtractTemporaryFile('precomp042.exe');
#else
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('precomp040.exe');
ExtractTemporaryFile('precomp041.exe');
ExtractTemporaryFile('precomp042.exe');
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
ExtractTemporaryFile('7z.dll');
ExtractTemporaryFile('PackZIP.exe');
#endif
ExtractTemporaryFile('English.ini');
ExtractTemporaryFile('Russian.ini');
// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('text\rus') and IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') and IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('text\rus') and IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') and IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 4
TmpValue:=TmpValue*2;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 5
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 6
TmpValue:=TmpValue*2;
if IsComponentSelected('text\ger') then Comps1:=Comps1+TmpValue; //компонент 7
TmpValue:=TmpValue*2;
if IsComponentSelected('text\ger') then Comps1:=Comps1+TmpValue; //компонент 8
TmpValue:=TmpValue*2;
if IsComponentSelected('text\fre') then Comps1:=Comps1+TmpValue; //компонент 9
TmpValue:=TmpValue*2;
if IsComponentSelected('text\ita') then Comps1:=Comps1+TmpValue; //компонент 10
TmpValue:=TmpValue*2;
if IsComponentSelected('text\pol') then Comps1:=Comps1+TmpValue; //компонент 11
TmpValue:=TmpValue*2;
if IsComponentSelected('text\por') then Comps1:=Comps1+TmpValue; //компонент 12
TmpValue:=TmpValue*2;
if IsComponentSelected('text\spa') then Comps1:=Comps1+TmpValue; //компонент 13
TmpValue:=TmpValue*2;
if IsComponentSelected('crack\rl') then Comps1:=Comps1+TmpValue; //компонент 14
TmpValue:=TmpValue*2;
if IsComponentSelected('crack\te') then Comps1:=Comps1+TmpValue; //компонент 15
// .....
// см. справку
#endif
#ifdef precomp
PCFVer:={#precomp};
#else
PCFVer:=0;
#endif
ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
case ActiveLanguage of
'eng': ChangeLanguage('English');
'rus': ChangeLanguage('Russian');
end;
if not SrepInit(ExpandConstant('{app}'),128,0) then break;
if not PrecompInit(ExpandConstant('{app}'),128,PCFVer) then break;
if not FileSearchInit(true) then break;
// if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data4.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
// далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
if not ISRarExtract ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'), ExpandConstant('{app}\data.7z'), true) then break;
if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'), ExpandConstant('{app}\out.dat'), false, false) then break;
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
if not ISExec ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;
// распаковка группы файлов посредством внешнего приложения
FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
ExecError:=false;
while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
InFilePath:=ISGetName(0);
OutFilePath:=ISGetName(1);
OutFileName:=ISGetName(2);
ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
end;
ISFindFree(FindHandle1);
if ExecError then break;
*)
ISDoneError:=false;
until true;
ISDoneStop;
end;
HideControls;
LabelCurrFileName.Caption:= ExpandConstant('{cm:Error2}');
WizardForm.CancelButton.Visible:=true;
WizardForm.CancelButton.Enabled:=false;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
end;
end;
procedure DeinitializeSetup();
begin
DeinitializeSetup1();
DeinitializeSetup2();
If IsInit then begin
BGImageStream.Free;
BTNImageStream.Free;
end;
end;[/more]