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

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

Автор: LagunaFAN
Дата сообщения: 12.03.2014 02:26
Товарищи! Как можно в секции [Code] указать установщику не создавать деинсталл? Мне нужно привязать это действие к имеющемуся CheckBox'y.

UPD Всем спасибо! Решение найдено!
Автор: Kapranov98
Дата сообщения: 12.03.2014 19:41
Здравствуйте. Нужна помощь с секцией [Code]. Нужен код, который будет проверять наличие файла в папке и если он есть, то предлагать запустить его. Если нет, то запускать установку программы. Заранее спасибо
Ещё можно проверку на установленность программы, но и для x86 и для x64 нужна проверка одновременно..
Разобрался
Автор: MOD_TEC
Дата сообщения: 14.03.2014 13:27
Как сделать следующее,чтобы при ошибке или отмене установки прогресс в прогресс баре шел назад:

Типа как тут: http://rghost.ru/private/53046196/a905b1352c351f78e0acd29a39eb84c9
Автор: NeoProExpert
Дата сообщения: 16.03.2014 13:00
Уважаемые форумчане, не подскажете какой параметр в скрипте отвечает за отображение пунктов выбора на первой странице установки программы, как на этом скриншоте:

Автор: General2k
Дата сообщения: 16.03.2014 17:39
Привет всем, подскажите пожалуйста ссылку (лучше на видео), где подробно с нуля по пунктам разбирают как создать репак с помощью inno setup.
Просто на сайте куча шаблонов и всяких скриптов, а что с ними делать, куда пихать и что менять - не понятно.
Примного благодарен!
Автор: FunnyRabbit
Дата сообщения: 16.03.2014 18:16
General2k
Это ветка форума ,по созданию непосредственно инсталииционных покетов,а не репаков.Если вам нужны репаки у вас 2 выхода:
1.Искать форум,посвещенный именно созданию репаков
2.Начинать читать мануалы по инно,арку и пр.пр. ,и постепенно ,как и все входить в тему.
Автор: General2k
Дата сообщения: 16.03.2014 18:20
FunnyRabbit
Ну по сути инсталлятор - часть того же репака, потому, если есть возможность направьте меня в нужную сторону, хотелось бы более-менее оригинальный инсталлятор. Ещё раз спасибо

PS Если при компиляции пишет unknown language name "rus", что делать? Вроде бы где-то встречалась данная ошибка
Автор: WiperX
Дата сообщения: 17.03.2014 05:08
Всем привет. Подскажите плз как добавить такой параметр:
Автор: tryroom
Дата сообщения: 17.03.2014 05:26
WiperX
Доступно места на диске
исправил для unicode версии
http://rghost.ru/53124124
Автор: WiperX
Дата сообщения: 17.03.2014 06:01
tryroom, выдает ошибку. Версия 5.5.1.ee1 (u)
Автор: vint56
Дата сообщения: 17.03.2014 06:36
WiperX
[more]
Define NeedSize 555000
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DisableFinishedPage=yes
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: {win}\help\*.hlp; DestDir: {app}\Files; Flags: external

[CustomMessages]
russian.FreeSpace=Доступно места на диске:
russian.NeedSpace=Требуется места на диске:
english.FreeSpace=Free space on disk:
english.NeedSpace=Need space on disk:

[Code]
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) + ' Мб' else
if Byte/1024 < 1024 then Result:= NumToStr(round(Byte/1024*100)/100) + ' Гб' else
Result:= NumToStr(round((Byte/(1024*1024))*100)/100) + ' Тб'
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)
NeedSpaceLabel.Caption := ExpandConstant('{cm:NeedSpace} ') + MbOrTb(SizeInt)
if WizardForm.CurPageID = wpSelectDir then begin
WizardForm.NextButton.Enabled:= CompareNum(FreeMB, SizeInt)
end;
end;

procedure InitializeWizard();
begin
WizardForm.DiskSpaceLabel.Hide;
#ifdef NeedSize
SizeInt:= {#NeedSize}
#else
SizeInt:= GetSize;
#endif

NeedSpaceLabel := TLabel.Create(WizardForm);
NeedSpaceLabel.SetBounds(ScaleX(0), ScaleY(198), ScaleX(209), ScaleY(13))
NeedSpaceLabel.Parent := WizardForm.SelectDirPage;
NeedSpaceLabel.Transparent:=true;

FreeSpaceLabel := TLabel.Create(WizardForm);
FreeSpaceLabel.SetBounds(ScaleX(0), ScaleY(216), ScaleX(209), ScaleY(13))
FreeSpaceLabel.Parent := WizardForm.SelectDirPage;
FreeSpaceLabel.Transparent:=true;

WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then begin
GetFreeSpaceCaption(nil)
end;
end;[/more]
Автор: MrDevil
Дата сообщения: 17.03.2014 10:48
Подскажите как в коде использовать константы стандартных сообщений?
Создал свою страничку, хочу видеть там стандартные заголовки. В инсталляции используется несколько языков, по этому хочу использовать стандартные константы.

Код:
ScanerTypePage:= CreateInputOptionPage(wpSelectTasks,
'Caption', // Сюда нужно как-то вставить константу с MessageID "WizardSelectTasks"
'Description',
'SubCaption',
True, False);
Автор: boss911
Дата сообщения: 19.03.2014 08:11
[more]Нужно создать пустой файл (сразу после этапа копирования файлов) - {localappdata}\Folder\Apps\login.md5 .

Помогите с кодом, плиз.[/more]

Ответа не дождался, помогли в другом месте.
Автор: OberStaFF
Дата сообщения: 20.03.2014 19:39
Del помощи вагон и тележка.
Автор: MOD_TEC
Дата сообщения: 21.03.2014 14:08
Покажите пример работы с таймерами...
Автор: tryroom
Дата сообщения: 22.03.2014 18:34
vint56 ваш пример на png
Вопрос решил.
Автор: marineharrison
Дата сообщения: 23.03.2014 17:24
/
Автор: dodakaedr
Дата сообщения: 24.03.2014 23:21
как прописать строку в .ini файле?
Автор: nik1967
Дата сообщения: 25.03.2014 07:09
dodakaedr,
[more=из русской справки]
Код: [Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

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

[Run]
Filename: "{app}\MyProg"; Description: "{cm:LaunchProgram, MyProg}"; Flags: nowait postinstall skipifsilent

[ Code]
var
IniCheckBox: TCheckBox;

procedure InitializeWizard();
begin
IniCheckBox:= TCheckBox.Create(WizardForm);
IniCheckBox.Left:= WizardForm.RunList.Left + 4;
IniCheckBox.Top:= WizardForm.RunList.Top + 10;
IniCheckBox.Width:= WizardForm.RunList.Width;
IniCheckBox.Height:= 14
IniCheckBox.Caption:=' Изменить язык интерфейса на русский';
IniCheckBox.Parent:= WizardForm.FinishedPage;
end;

procedure DeinitializeSetup();
begin
if WizardForm.CurPageID = WpFinished then
begin
if IniCheckBox.Checked then
SetIniString('Setting','Language', 'RU',ExpandConstant('{app}\Language.ini'))
else
SetIniString('Setting','Language', 'EN',ExpandConstant('{app}\Language.ini'))
end;
end;
Автор: dodakaedr
Дата сообщения: 26.03.2014 20:43
nik1967
спасибо.
Автор: Shaman2
Дата сообщения: 26.03.2014 20:49
Подскажите. Я указываю

DefaultDirName=C:\Soft

При установке программы я выбираю кнопкой другую папку и получаю путь C:\Papka\Soft
Как в этом случае убрать добавление Soft ?
Автор: dodakaedr
Дата сообщения: 26.03.2014 21:17
nik1967
как сделать без чекбокса? И мне нужно не создать а модифицировать ini файл, а именно чтобы брался путь к ini файлу с {app}.

Добавлено:
Shaman2
DefaultDirName={sd}
Автор: Shaman2
Дата сообщения: 26.03.2014 23:20

Цитата:
DefaultDirName={sd}


Неподходит, автоматом добавляет в конце каталога название "Новая папка"
Автор: leserg73
Дата сообщения: 27.03.2014 01:31

Цитата:
Как в этом случае убрать добавление Soft ?

Shaman2,
AppendDefaultDirName = no

По умолчанию (если команда не указана) используется параметр "yes", т.е. к выбранному пути будет автоматически добавляться указанное название папки. Чтобы имя папки не добавлялось, в сценарии необходимо указать команду AppendDefaultDirName с параметром "no".
Автор: Shaman2
Дата сообщения: 27.03.2014 02:25

Цитата:
Shaman2,
AppendDefaultDirName = no


Спасибо, то что нужно
Автор: tyumenik
Дата сообщения: 27.03.2014 11:56
Мне нужен скрипт, либо код

Чистая установка - http://savepic.net/5032106.png

Переустановка - http://savepic.net/5030058.png


Примерно отдельный скрипт или код:
на странице Select Components/Tasks Page
и на SelectDirPage, только код Checkbox'а

Заранее спасибо...
Автор: TNR
Дата сообщения: 28.03.2014 03:38
Подскажите как создать ярлык как у MS Office ?
Автор: Denis_T
Дата сообщения: 28.03.2014 10:49
Доброе утро. Помогите, пожалуйста, решить проблему.
Можно ли по завершению установки создать Bat`ник, в котором будет вписана данная строчка:
Prog.exe -j"C:\123\The House of the Dead\1\dtlite.exe" -b"C:\123\The House of the Dead\House_of_the_Dead.mds" -x"C:\123\The House of the Dead\THOTD.EXE" -k"-d3d" -show
А начало пути "C:\123\" подменялось на {app}?
Автор: sergey3695
Дата сообщения: 28.03.2014 21:43
Denis_T
SaveStringToFile(ExpandConstant('{app}\123.bat'), 'Prog.exe -j"'+ExpandConstant('{app}')+'\The House of the Dead\1\dtlite.exe" -b"'+ExpandConstant('{app}')+'\The House of the Dead\House_of_the_Dead.mds" -x"C:\123\The House of the Dead\THOTD.EXE" -k"-d3d" -show ', True);
как-то так. код не проверял,но суть такова.

Автор: marineharrison
Дата сообщения: 28.03.2014 21:55
Доброго времени суток. Такая проблема. Имеется 2 архива freearc по 4,36 ГБ. Ниже мой скрипт, где реализована распаковка архивов по очереди с запросом второго диска. Кнопка "отменить распаковку" заменена обратно на стандартную отмена. Это сделано чтобы реализовать вместе с этим скриптом слайдшоу и сделать так, чтоб при установке окно инсталлера становилось ментьше.

Вот скрипт распаковки двух архивов.
[more]

#define NeedSize "5000000000"

#define NeedMem 512


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

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

[Files]
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy



[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
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
LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
ISDoneProgressBar1: TNewProgressBar;

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 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 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 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)+'%';

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;

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

procedure HideControls;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
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;
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;
WizardForm.CancelButton.OnClick:=@CancelButtonOnClick;
end;

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

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
if not FileSearchInit(false) then break;

if not ISArcExtract ( 0, 50, ExpandConstant('{src}\setup-1.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;

if not ShowChangeDiskWindow('Пожалуйста, вставьте диск 2 и дождитесь его инициализации.', ExpandConstant('{src}'),'setup-2.arc') then break;

if not ISArcExtract ( 0, 50, ExpandConstant('{src}\setup-2.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) 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;

[/more]

Вот тут находится скрипт с файлами, где реализовано слайдшоу и уменьшение окна во время установки
http://rghost.ru/53286086

Я отчаянно пытаюсь оба скрипта как-нибудь соединить, но у меня не выходит. Вот что пока вышло.

[more]

#define NeedSize "5000000000"

#define NeedMem 512


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


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

[Files]
Source: isSlideShow.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy nocompression
Source: walls\BackImage.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: walls\01.jpg; DestDir: "{tmp}"; Flags: dontcopy nocompression
Source: iQuantum.cjstyles; DestDir: {tmp}; Flags: dontcopy nocompression
Source: ISSkin.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression

Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy ignoreversion nocompression

[Messages]
BeveledLabel=Aliens: Colonial Marines installer by ]^[@r!ne_I-I@rr!$0n
SelectDirDesc=В какую папку Вы хотите установить игру?
ReadyLabel1=Программа установки готова начать установку игры на Ваш компьютер.
InstallingLabel=Пожалуйста, подождите, пока игра установится на Ваш компьютер.


[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
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
LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
ISDoneProgressBar1: TNewProgressBar;
ISDoneCancel:integer;
ISDoneError:boolean;
PCFVer:double;

TimerID: LongWord;
CurrentPicture:integer;
PicList: TStringlist;
BackgroundForm: TForm;
PageNameLabel, PageDescriptionLabel: TLabel;


type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

TProc=procedure(HandleW, msg, idEvent, TimeSys: 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 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 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 SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer); external 'InitializeSlideShow@files:isslideshow.dll stdcall';
procedure DeinitializeSlideShow; external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';
procedure ShowImage(ipath:PAnsiChar; Effect:integer); external 'ShowImage@files:isslideshow.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)+'%';

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;

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

procedure HideControls;
begin
WizardForm.FileNamelabel.Hide;
ISDoneProgressBar1.Hide;
LabelPct1.Hide;
LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
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;
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;
WizardForm.CancelButton.OnClick:=@CancelButtonOnClick;
end;

procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://vk.com/marine_harrison','', '', SW_SHOW, ewNoWait, ErrorCode)
end;

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('iQuantum.cjstyles');
LoadSkin(ExpandConstant('{tmp}\iQuantum.cjstyles'), '');
Result := True;
end;

procedure InitializeWizard();
begin
BackgroundForm:= TForm.Create(nil);
BackgroundForm.BorderStyle:= bsNone;
BackgroundForm.Color:=clBlack;
BackgroundForm.SetBounds(0, 0, GetSystemMetrics(0), GetSystemMetrics(1))
BackgroundForm.Visible:=True;
BackgroundForm.enabled:= false;
PicList:=tstringlist.Create;
ExtractTemporaryFile('BackImage.jpg');
ExtractTemporaryFile('01.jpg');
piclist.add(ExpandConstant('{tmp}') + '\01.jpg');
BackgroundForm.show;
InitializeSlideShow(BackgroundForm.Handle, 0, 0, GetSystemMetrics(0), GetSystemMetrics(1), false, 1);
ShowImage(ExpandConstant('{tmp}') + '\BackImage.jpg', 1);

begin
WizardForm.WizardBitmapImage.Width:=497
WizardForm.WelcomeLabel1.Visible:=False
WizardForm.WelcomeLabel2.Visible:=False
WizardForm.WizardBitmapImage2.Width:=497
WizardForm.FinishedLabel.Visible:=False
WizardForm.FinishedHeadingLabel.Visible:=False

begin
WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

begin
PageNameLabel:= TLabel.Create(WizardForm);
with PageNameLabel do begin
Left:= WizardForm.PageNameLabel.Left;
Top:= WizardForm.PageNameLabel.Top;
Width:= WizardForm.PageNameLabel.Width;
Height:= WizardForm.PageNameLabel.Height;
AutoSize:= False;
WordWrap:= True;
Font.Name:= WizardForm.PageNameLabel.Font.Name;
Font.Color:= clWhite;
Font.Style:= [fsBold];
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do begin
Left:= WizardForm.PageDescriptionLabel.Left-ScaleX(12);
Top:= WizardForm.PageDescriptionLabel.Top;
Height:= WizardForm.PageDescriptionLabel.Height;
Width:= ScaleX(220);
AutoSize:= False;
WordWrap:= True;
Font.Name:= WizardForm.PageDescriptionLabel.Font.Name;
Font.Color:= clWhite;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

with WizardForm do begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;

begin
with WizardForm do begin
with BeveledLabel do begin
OnClick:=@BevelLabelClick;
Font.Color:=clRed;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;

end;
end;
end;
end;
end;





procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
thePicture: integer;
delta: double;
begin
delta := WizardForm.ProgressGauge.Max / ( piclist.Count );
thePicture := round( WizardForm.ProgressGauge.Position / delta );
if( thePicture <> CurrentPicture ) then
begin
CurrentPicture := thePicture;
try
ShowImage(piclist.strings[CurrentPicture - 1], 1);
except
end;
end;
end;




Procedure CurPageChanged(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) ;

begin
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption:= WizardForm.PageDescriptionLabel.Caption;
begin
If CurPageID=wpInstalling then
begin

WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);

WizardForm.Position:=poScreenCenter;
WizardForm.Top:=ScaleY(BackgroundForm.Height-170);

WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
WizardForm.CancelButton.bringtofront;

TimerID:=SetTimer(0, 0, 200, WrapTimerProc(@OnTimer, 4));
end;
end;

if CurPageID=wpFinished then
begin
WizardForm.Visible:=False;
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Left:=(BackgroundForm.Width-WizardForm.Width) div 2;
WizardForm.Top:=(BackgroundForm.Height-WizardForm.Height) div 2;
WizardForm.Visible:=True;
showimage(ExpandConstant('{tmp}') + '\BackImage.jpg', 1);
end;
end;

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

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;

ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
if not FileSearchInit(false) then break;

if not ISArcExtract ( 0, 50, ExpandConstant('{src}\setup-1.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) then break;

if not ShowChangeDiskWindow('Пожалуйста, вставьте диск 2 и дождитесь его инициализации.', ExpandConstant('{src}'),'setup-2.arc') then break;

if not ISArcExtract ( 0, 50, ExpandConstant('{src}\setup-2.arc'), ExpandConstant('{app}'), '', false, '', '', '', notPCFonFLY) 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 DeinitializeSetup();
begin
DeinitializeSlideShow;
KillTimer(0, TimerID);
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;


[/more]

В общем, помогите, кто знает. Мне нужно чтоб окошко инсталлера сворачивалось как в скрипте в архиве. Я его в свое время сам дописал, переделывая.
Но пока не могу соединить. Таким образом, чтоб окно инсталлера сворачивалось при слайдшоу и кнопка отмена была по центру. И нужно удалить показатели сколько времени прошло и осталось.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


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