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

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

Автор: daemon_rm
Дата сообщения: 16.06.2011 22:31
Sergey_Demchuk

Код: function userpapka (A:string):string;
begin
Result:=GetShellFolderByCSIDL(CSIDL_PROFILE, True);
end;
Автор: Sergey_Demchuk
Дата сообщения: 16.06.2011 22:42
Да, эта ф-я работает..., благодарю
Автор: Profrager
Дата сообщения: 17.06.2011 09:09
Sergey_Demchuk

вот так твоя функция корректно бы работала:
Код: function GetSpecialPath(CSIDL: Word): string;
var
s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, s, CSIDL, True) then s := '';
Result:= string(Pchar(s));
end;
Автор: Despofix
Дата сообщения: 17.06.2011 10:39
дайте плиз пример создания componentlist'a, а то найти не могу. желательно с примером назначения цветов для элементов.
Автор: vistaw
Дата сообщения: 17.06.2011 10:44
Despofix
Если юзаешь скин, то легче его переделать.
Автор: PavZver
Дата сообщения: 17.06.2011 16:07
как сделать чтобы сначала распаковались 4 архива. потом запустилась программа (если она выбрана) а потом чтобы распаковался еще пятый архив. распаковка с помощью isdone
Автор: Brabusdark
Дата сообщения: 17.06.2011 16:56
подкиньте пару ссылок плиз как сделать такой авторанчик
Автор: vovka00723
Дата сообщения: 17.06.2011 17:50
Brabusdark
здесь все найдешь
Автор: VicF1
Дата сообщения: 17.06.2011 18:22
Господа, подскажите пожалуйста:
Вот проверка на файловую систему FAT32.
Ей не имею, и поэтому проверял на флэшке.
Но не срабатывает, т.к. разрешает установить игру.
В чем дело?
[more]
Код: var
VolumeName: String;
FileSystemName: AnsiString;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;

function GetVolumeInformation(PathName,VolumeName: PAnsiChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PAnsiChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';

procedure InitializeWizard;
begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation('c:\', VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
WizardForm.WelcomeLabel1.Caption:=DelSP(FileSystemName);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
s: string;
begin
Result := True;
if CurPageID = wpSelectDir then
begin
if DelSP(FileSystemName)='FAT' then
begin
s := 'У выбранного раздела файловая система FAT32, что недопустимо.'#13'Пожалуйста, измените путь установки.';
MsgBox(s, mbError, mb_Ok);
Result := False ;
exit;
end
else Result := True;
end;
end;
Автор: sergey3695
Дата сообщения: 17.06.2011 18:31

Цитата:
GetVolumeInformation('c:\', VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);

Может надо просто вместо диска "С" поставить название диска флэшки (например "Е") и пробывать установить на флэшку?
Автор: VicF1
Дата сообщения: 17.06.2011 18:33
sergey3695
Нет, нужна проверка любого раздела.

Тут скорее всего дело в том, что флэшка не есть раздел винчестера.
Автор: sergey3695
Дата сообщения: 17.06.2011 18:36

Цитата:
подкиньте пару ссылок плиз как сделать такой авторанчик

Такой авторанчик сделан не через Inno Setup, а через специальную прогу предназначенную для создания авторанчиков ( например через AutoRun Pro Enterprise II)

Добавлено:

Цитата:
sergey3695
Нет, нужна проверка любого раздела.

Тут скорее всего дело в том, что флэшка не есть раздел винчестера.

Попробуй такой скрипт: ..Скрипт..
Автор: Shegorat
Дата сообщения: 17.06.2011 19:41
VicF1
Держи, должен работать [more=Код][Setup]
AppName=MyApp
AppVername=MyApp
DefaultDirName={pf}\MyApp

[code]
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

function GetVolumeInformation(PathName, VolumeName: PAnsiChar; VolumeNameSize, VolumeSerialNumber, MaxComponentLength, FileSystemFlags: Longint; FileSystemName: PAnsiChar; FileSystemNameSize: Longint): Longint;
external 'GetVolumeInformation{#A}@kernel32.dll stdcall';

function NextButtonClick(CurPageID: Integer): Boolean;
var VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
begin
Result := True;
if CurPageID = wpSelectDir then begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(PAnsiChar(ExtractFileDrive(WizardForm.DirEdit.Text)+'\'), PAnsiChar(VolumeName), 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, PAnsiChar(FileSystemName), 31);
if Pos('NTFS', FileSystemName)=0 then begin
MsgBox('Установка данного продукта возможна только на диск с файловой системой NTFS.'#13'Пожалуйста, измените путь установки.', mbError, mb_Ok);
Result := False ;
end;
end;
end;[/more]
Автор: Despofix
Дата сообщения: 17.06.2011 19:54
VicF1
коды на будущее прячь в тэг more!



дайте плиз пример создания componentlist'a, а то найти не могу. желательно с примером назначения цветов для элементов.

и еще прописываю в скрипте [more=распаковку]if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}\folder\folder\folder'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;[/more]
а почему то распаковывается просто в {app}\folder или же файлы упаковываю так: создаю папку в ней создаю подпапку в нее кидаю файлы и упаковываю папку вместе с подкатологом, в скрипте пишу {app}\folder, отсюда следует что файлы должны быть находится в {app}\folder\folder\folder, но они файлы после распаковки лежат в {app}\folder, почему?
Автор: Shegorat
Дата сообщения: 17.06.2011 20:01
Despofix 20:54 17-06-2011
Цитата:
дайте плиз пример создания componentlist'a, а то найти не могу. желательно с примером назначения цветов для элементов.

Какого еще компонентлиста? Чем тебе стандартный не угодил?
Despofix 20:54 17-06-2011
Цитата:
а почему то распаковывается просто в {app}\folder  или же файлы упаковываю так: создаю папку в ней создаю подпапку в нее кидаю файлы и упаковываю папку вместе с подкатологом, в скрипте пишу {app}\folder, отсюда следует что файлы должны быть находится в {app}\folder\folder\folder, но они файлы после распаковки лежат в {app}\folder, почему?

Хз, я ISDone не пользуюсь, спроси лучше у Profrager
Brabusdark 17:56 17-06-2011
Цитата:
подкиньте пару ссылок плиз как сделать такой авторанчик

Ну во-первых руками. А во-вторых какое это имеет отношение к Inno Setup?
Автор: Despofix
Дата сообщения: 17.06.2011 20:09
Shegorat
спрошу проще как можно сменить цвета у элементов списка компонентов, например если у компонента стоит флаг fixed.

и еще форум через раз загружается или у меня инет тупит?
Автор: PavZver
Дата сообщения: 17.06.2011 20:13
как сделать чтобы сначала распаковались 4 архива. потом запустилась программа (если она выбрана) а потом чтобы распаковался еще пятый архив.
что мне именно надо что прописать чтобы прога запускалась в определенном порядке (после 4 архивов и перед пятым)
распаковка с помощью isdone
Автор: Shegorat
Дата сообщения: 17.06.2011 20:29
Despofix 21:09 17-06-2011
Цитата:
спрошу проще как можно сменить цвета у элементов списка компонентов, например если у компонента стоит флаг fixed.

Если стоит флаг fixed то элемент списка не активен, если он не активен то с ним ничего сделать нельзя, цвет задается по умолчанию серый. Да и сменить цвет текста в листбоксе можно либо весь либо ничего...
Автор: Despofix
Дата сообщения: 17.06.2011 21:08
Shegorat
а если создать список через код цвет можно сменить? если да то дай плиз код списка
Автор: vovka00723
Дата сообщения: 17.06.2011 21:25
PavZver
задачка для школьников, делать нефиг

Код: if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data1.bin'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data2.bin'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data3.bin'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data4.bin'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
if istaskselected('установить shit') then if not Exec2(ExpandConstant('{app}\shit.exe'), '/params', true);
then break;
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data5.bin'), ExpandConstant('{app}'), false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Автор: PavZver
Дата сообщения: 17.06.2011 22:44
vovka00723
у меня ругается на Exec2. ISDone 0.5
на ISDone 0.6b как я понял все нормально (там есть exec2)
Автор: Gnom3
Дата сообщения: 18.06.2011 10:00
Despofix
Сменить цвет - нельзя, в расширенной версии можно менять стили надписей.
[more=разбирайся][Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
SolidCompression=yes
Compression=lzma/ultra    
UsePreviousTasks=yes
;///////////////////////////////////////////////
ComponentsListTVStyle=yes
;///////////////////////////////////////////////
ComponentsListBtnImageFile=btnimage.bmp
OutputDir=userdocs:Inno Setup Examples Output

[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom

[Components]
Name: "program"; Description: "Program Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help File"; Types: full compact
Name: "help\help1"; Description: "Help File 1 (Test Bold)"; Flags: exclusive
Name: "help\help2"; Description: "Help File 2 (Test Italic)"; Flags: exclusive
Name: "readme"; Description: "Readme (Test Underline)"; Types: full
Name: "readme\readme1"; Description: "Readme 1 (Test StrikeOut)"; Types: full compact
;///////////////////////////////////////////////
Name: "readme\readme2"; Description: "Readme 2"; Types: full; Flags: Collapsed
Name: "readme\readme2\r1"; Description: "Readme 2..1"; Types: full compact
Name: "readme\readme2\r2"; Description: "Readme 2..2"; Types: full

[Files]
Source: "MyProg.exe"; DestDir: "{app}"; Components: program
Source: "MyProg1.chm"; DestDir: "{app}"; Components: help\help1
Source: "MyProg2.chm"; DestDir: "{app}"; Components: help\help2
Source: "Readme1.txt"; DestDir: "{app}"; Components: readme\readme1; Flags: isreadme
Source: "Readme2.txt"; DestDir: "{app}"; DestName: "Readme2_1.txt"; Components: readme\readme2\r1
Source: "Readme2.txt"; DestDir: "{app}"; DestName: "Readme2_2.txt"; Components: readme\readme2\r2

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"

[code]
procedure InitializeWizard();
begin
////////////////////////////////////////////////
WizardForm.ComponentsList.ItemFontStyle[2] := [fsBold];
WizardForm.ComponentsList.ItemFontStyle[3] := [fsItalic];
WizardForm.ComponentsList.ItemFontStyle[4] := [fsUnderline];
WizardForm.ComponentsList.ItemFontStyle[5] := [fsStrikeOut];
WizardForm.ComponentsList.SubItemFontStyle[5] := [fsBold];
WizardForm.ComponentsList.SubItemFontStyle[4] := [fsItalic];
WizardForm.ComponentsList.SubItemFontStyle[3] := [fsUnderline];
WizardForm.ComponentsList.SubItemFontStyle[2] := [fsStrikeOut];
end;[/more]
Автор: vovka00723
Дата сообщения: 18.06.2011 12:28
PavZver
ну можешь тогда вместо exec2 использовать exec или shellexec (встроенные функции инно)
Автор: PavZver
Дата сообщения: 18.06.2011 13:24
vovka00723
все равно пишет: invalid number of parameters
Автор: ALExey1995
Дата сообщения: 18.06.2011 13:34
PavZver
ISDone 0.5 НЕ поддерживает эти функции..
Автор: sergey3695
Дата сообщения: 18.06.2011 13:59
Привет всем!
Автор: VicF1
Дата сообщения: 18.06.2011 15:08
Shegorat
СПС. Все работает, на FAT установить не дает.

Господа, подскажите еще пожалуйста, а есть ли сборка (подборка) различных *.cjstyles ?
Спасибо.
Автор: Shegorat
Дата сообщения: 18.06.2011 16:37
VicF1 16:08 18-06-2011
Цитата:
Господа, подскажите еще пожалуйста, а есть ли сборка (подборка) различных *.cjstyles ? Спасибо.

Вот подборочка скинов (более 600 штук) от пользователя Gnom3 - http://ifolder.ru/22633839
P.S. При распаковке потребует около 1 Гб непрерывного блока памяти
Автор: Gnom3
Дата сообщения: 18.06.2011 16:45
Shegorat
Не непрерывного блока памяти, а местана диске ты меня чуть неправильно понял
Despofix не, слишком мутно, собирал из разных мест, перегонял из ХР-шных тем.
Автор: Despofix
Дата сообщения: 18.06.2011 17:18
sergey3695
[more=картинки + isdone]
#define NeedSize "5000000000"

#define NeedMem 512

#define SecondProgressBar

;#define Components

;#define records

;#define facompress
;#define precomp "0.4"
;#define SrepInside
;#define unrar
;#define XDelta
;#define PackZIP

[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\ISDone
DefaultGroupName=ISDone Example
OutputDir=.
OutputBaseFilename=Setup
VersionInfoCopyright=ProFrager
SolidCompression=yes
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

#ifdef Components
[Types]
Name: full; Description: Full installation; Flags: iscustom

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

[Registry]
Root: HKLM; Subkey: Software\ProFrager; ValueName: path; ValueType: String; ValueData: {app}; Flags: uninsdeletekey; Check: CheckError
Root: HKLM; Subkey: Software\ProFrager; ValueName: name; ValueType: String; ValueData: Data; Flags: uninsdeletekey; Check: CheckError

[Icons]
Name: {group}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError
Name: {commondesktop}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError

[Tasks]
Name: VCCheck; Description: Установить Microsoft Visual C++ 2005 Redist
Name: PhysXCheck; Description: Установить Nvidia PhysX

[Run]
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ 2005 Redist...; Flags: skipifdoesntexist; Tasks: VCCheck; Check: CheckError
Filename: {src}\Redist\PhysX.exe; Parameters: /qn; StatusMsg: Устанавливаем Nvidia PhysX...; Flags: skipifdoesntexist; Tasks: PhysXCheck; Check: CheckError

[Files]
Source: InstallFiles\botva2.dll; Flags: dontcopy
Source: InstallFiles\WizardImage.png; Flags: dontcopy
Source: InstallFiles\WizardSmalImage.png; Flags: dontcopy

Source: InstallFiles\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef facompress
Source: InstallFiles\Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: InstallFiles\Include\arc.ini; DestDir: {tmp}; Flags: dontcopy
Source: InstallFiles\Include\srep.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
#if precomp == "0.38"
Source: InstallFiles\\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.4"
Source: InstallFiles\\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.41"
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#else
Source: InstallFiles\\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: InstallFiles\\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
Source: InstallFiles\\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#endif
#endif
#endif
#ifdef unrar
Source: InstallFiles\\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: InstallFiles\\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: InstallFiles\\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: InstallFiles\\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:

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

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

[Code]
const
PCFonFLY=true;
notPCFonFLY=false;
var
SmallImage, WizardImage: Longint;
PageNameLabel, PageDescriptionLabel: TLabel;

LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
LabelPct2: TLabel;
ISDoneProgressBar2:TNewProgressBar;
#endif
MyCancelButton: TButton;
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: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):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function SrepInit(TmpFile:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(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 ImgLoad(Wnd :HWND; FileName: PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint; external 'ImgLoad@{tmp}\botva2.dll stdcall delayload';
procedure ImgSetVisibility(img :Longint; Visible :boolean); external 'ImgSetVisibility@{tmp}\botva2.dll stdcall delayload';
procedure ImgApplyChanges(h:HWND); external 'ImgApplyChanges@{tmp}\botva2.dll stdcall delayload';
procedure gdipShutdown; external 'gdipShutdown@{tmp}\botva2.dll stdcall delayload';


function 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-ScaleX(100));
LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
Result := ISDoneCancel;
end;

function InitializeSetup: Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
Result:=True;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
end;

procedure HideControls;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
MyCancelButton.Hide;
#ifdef SecondProgressBar
ISDoneProgressBar2.Hide;
LabelPct2.Hide;
#endif
end;

procedure CreateControls;
var PBTop:integer;
begin
PBTop:=ScaleY(50);
ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar1 do begin
Parent := WizardForm.InstallingPage;
Height := WizardForm.ProgressGauge.Height;
Left := ScaleX(0);
Top := PBTop;
Width := ScaleX(365);
Max := 1000;
end;
LabelPct1 := TLabel.Create(WizardForm);
with LabelPct1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Left := ISDoneProgressBar1.Width+ScaleX(5);
Top := ISDoneProgressBar1.Top + ScaleY(2);
Width := ScaleX(80);
end;
LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width+ScaleX(30);
Left := ScaleX(0);
Top := ScaleY(30);
end;
#ifdef SecondProgressBar
PBTop:=PBTop+ScaleY(25);
ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
with ISDoneProgressBar2 do begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := PBTop+ScaleY(8);
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+ScaleX(5);
Top := ISDoneProgressBar2.Top + ScaleY(2);
Width := ScaleX(80);
end;
#endif
LabelTime1 := TLabel.Create(WizardForm);
with LabelTime1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width div 2;
Left := ScaleX(0);
Top := PBTop + ScaleY(35);
end;
LabelTime2 := TLabel.Create(WizardForm);
with LabelTime2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := LabelTime1.Width+ScaleX(40);
Left := ISDoneProgressBar1.Width div 2;
Top := LabelTime1.Top;
end;
LabelTime3 := TLabel.Create(WizardForm);
with LabelTime3 do begin
Parent := WizardForm.FinishedPage;
AutoSize := False;
Width := 300;
Left := 180;
Top := 200;
end;
MyCancelButton:=TButton.Create(WizardForm);
with MyCancelButton do begin
Parent:=WizardForm;
Width:=ScaleX(135);
Caption:=ExpandConstant('{cm:CancelButton}');
Left:=ScaleX(360);
Top:=WizardForm.cancelbutton.top;
OnClick:=@CancelButtonOnClick;
end;
end;

Procedure ShowErrorMessage(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and ISDoneError then
begin
LabelTime3.Hide;
WizardForm.Caption:= ExpandConstant('{cm:Error}');
WizardForm.FinishedLabel.Font.Color:= clRed;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
end;
end;

function CheckError:boolean;
begin
result:= not ISDoneError;
end;

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
WizardForm.ProgressGauge.Hide;
WizardForm.CancelButton.Hide;
CreateControls;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.
#ifdef facompress
ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef SrepInside
ExtractTemporaryFile('arc.ini');
ExtractTemporaryFile('srep.exe');
#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
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('precomp040.exe');
ExtractTemporaryFile('precomp041.exe');
#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

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4
// .....
// см. справку
#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
if not SrepInit('',512,0) then break;
if not PrecompInit(PCFVer) then break;
if not FileSearchInit(false) then break;

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), 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) 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" "{arr}\"'), ExpandConstant('{tmp}'), '...') 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+'" "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName);
end;
ISFindFree(FindHandle1);
if ExecError then break;
*)

ISDoneError:=false;
until true;
ISDoneStop;
end;
HideControls;
WizardForm.CancelButton.Visible:=true;
WizardForm.CancelButton.Enabled:=false;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
end;
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('WizardImage.png');
ExtractTemporaryFile('WizardSmalImage.png');

WizardForm.WizardBitmapImage.Hide;
WizardForm.WizardBitmapImage2.Hide;
WizardForm.WizardSmallBitmapImage.Hide;


PageNameLabel:= TLabel.Create(WizardForm)
with WizardForm.PageNameLabel do
PageNameLabel.SetBounds(Left, Top, Width, Height);
PageNameLabel.Transparent:= True;
PageNameLabel.Font:= WizardForm.PageNameLabel.Font;
PageNameLabel.Font.Color:= clBlack; //цвет надписи
PageNameLabel.Parent:= WizardForm.MainPanel;

PageDescriptionLabel:= TLabel.Create(WizardForm)
with WizardForm.PageDescriptionLabel do
PageDescriptionLabel.SetBounds(Left, Top, Width, Height);
PageDescriptionLabel.Transparent:= True;
PageDescriptionLabel.Font:= WizardForm.PageDescriptionLabel.Font;
PageDescriptionLabel.Font.Color:= clBlack; //цвет надписи
PageDescriptionLabel.Parent:= WizardForm.MainPanel;

WizardImage:=ImgLoad(WizardForm.WelcomePage.Handle,ExpandConstant('{tmp}\WizardImage.png'),ScaleX(0), ScaleY(0),ScaleX(164),ScaleY(314),True,True);
WizardImage:=ImgLoad(WizardForm.FinishedPage.Handle,ExpandConstant('{tmp}\WizardImage.png'),ScaleX(0), ScaleY(0),ScaleX(164),ScaleY(314),True,True);
SmallImage:=ImgLoad(WizardForm.MainPanel.Handle,ExpandConstant('{tmp}\WizardSmalImage.png'),ScaleX(0), ScaleY(0),ScaleX(497),ScaleY(58),True,True);

ImgApplyChanges(WizardForm.WelcomePage.Handle);
ImgApplyChanges(WizardForm.FinishedPage.Handle);
ImgApplyChanges(WizardForm.MainPanel.Handle);
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
ShowErrorMessage(CurPageID);
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;

ImgSetVisibility(WizardImage,False);

if CurPageID = wpWelcome then
ImgSetVisibility(WizardImage,True);
if CurPageID = wpFinished then
ImgSetVisibility(WizardImage,True);
end;

procedure DeInitializeSetup();
begin
gdipShutdown;
end;
[/more]





Добавлено:
Gnom3
сам скины штамповал?)

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177

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


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