Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Jerichoman
30-01-2010, 19:26
Подскажите, пожалуйста, что нужно сделать, чтобы при создании инсталла с arc архивом, инно его упаковывал в bin файлы http://s002.radikal.ru/i197/1001/ae/07fadc7ebcd1.jpg , а то сколько не пытался, все время получается вот так (сам arc архив+инсталл на его распаковку) http://s001.radikal.ru/i194/1001/9e/082cc59602bb.jpg Если добавлять архив в секцию Files, то получается так как на первой картинке, но при установке инсталл тупо выдает сам архив :(
Jerichoman, просто arc переминованый в bin просто когда будеш паковать в место пример названия архива data.arc переминуй в Data.bin
Source: {src}\*.arc; DestDir: {app}\; Flags: external dontcopy и сдесь подправь на Source: {src}\*.bin ; DestDir: {app}\; Flags: external dontcopy
Jerichoman
30-01-2010, 20:34
vint56
Это можно, но все равно он так и будет одним куском, а хотелось бы чтоб он при создании инсталла делился+при установке он не разархивируется а копируется сам архив
Jerichoman, Почему я так делаю нормально работает он распаковывает архив
может быть как то возможно увеличить размер окна? »
Семёрки у меня нет, т.е. проверить негде, попробуйте прописать сообщение заново:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Code]
#ifdef UNICODE
type
PChar = PAnsiChar;
#endif
function MessageBox(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
external 'MessageBoxA@user32.dll stdcall';
#ifndef IS_ENHANCED
const
MB_ICONQUESTION = $00000020;
#endif
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:= False;
Cancel:= False;
if MessageBox(WizardForm.Handle, SetupMessage(msgExitSetupMessage),
SetupMessage(msgExitSetupTitle), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) = IDYES then
Cancel:= True;
end;
P.S.
Если результат будет таким же, то можно создать отдельную форму с сообщением.
Возможно ли перемещение задач (или хотя бы чекбоксов), если, к примеру, у меня в [Tasks] так:
[Tasks]
Name: "icon"; Description: "{cm:xx}";
Name: "icon\sp"; Description: "{cm:sp}";
Name: "icon\mp"; Description: "{cm:mp}";
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Дело в том, что я растягиваю окно инталлятора, и, разумеется, чекбоксы нужно разместить иначе. Возможно ли такое? Или лучше всё делать в [Сode] и не париться? :)
чекбоксы нужно разместить иначе »
Такое только всё делать в [Сode] »
Serega, так и думал... спрашивал для очистки совести, получается... :)
Вообщем немогу собрать два скрипта.
Один готовый и к нему надо добавить скрипт маленький который проверяет конфигурацию.
Вот первый:
[Setup]
AppName=FIFA 2007
AppVerName=FIFA 2007 by yamaha
DefaultDirName={pf}\PanCopmany by yamaha\FIFA 2007
UsePreviousAppDir=true
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=FIFA 2007
OutputDir=C://FIFA 2000-2010
VersionInfoCopyright=PanCompany, Inc.
DiskSliceSize=2100000000
DiskSpanning=yes
ReserveBytes=5242880
DefaultGroupName=FIFA 2007 by yamaha
Compression=lzma/ultra
SolidCompression=yes
[Languages]
Name: "eng"; MessagesFile: "compiler:Default.isl"
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
[CustomMessages]
eng.ArcBreak=Installation cancelled!
eng.ExtractedInfo=Extracted %1 Mb of %2 Mb
eng.ArcInfo=Archive: %1 of %2
eng.ArcTitle=Extracting FreeArc archive
eng.ArcError=Decompression failed with error code %1
eng.ArcFail=Decompression failed!
eng.AllProgress=Overall extraction progress: %1%%
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.
eng.Extracting=Extracting: %1
eng.taskbar=%1%%, %2 remains
eng.remains=Remaining time: %1
eng.LongTime=at no time
eng.ending=ending
eng.hour= hours
eng.min= mins
eng.sec= secs
rus.ArcBreak=Установка прервана!
rus.ExtractedInfo=Распаковано %1 Мб из %2 Мб
rus.ArcInfo=Архив: %1 из %2
rus.ArcTitle=Распаковка архивов FreeArc
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1
rus.ArcFail=Распаковка не завершена!
rus.AllProgress=Общий прогресс распаковки: %1%%
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.
rus.Extracting=Распаковывается: %1
rus.taskbar=%1%%, жди %2
rus.remains=Осталось ждать %1
rus.LongTime=вечно
rus.ending=завершение
rus.hour= часов
rus.min= мин
rus.sec= сек
[Icons]
Name: {group}\Uninstall FIFA 2007; Filename: {app}\unins000.exe
[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy
[UninstallDelete]
Type: filesandordirs; Name: {app}
[Code]
// Importing LoadSkin API from ISSkin.DLL
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
// Importing UnloadSkin API from ISSkin.DLL
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
// Importing ShowWindow Windows API from User32.DLL
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalSilver.ini');
Result := True;
end;
const
Archives = '{src}\*.arc'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно
PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;
type
#ifdef UNICODE ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup
#define A "W"
#else
#define A "A" ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии
#endif
#if Ver < 84018176
AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and above (для Inno Setup версий 5.2.4 и выше эта строка не нужна)
#endif
TMyMsg = record
hwnd: HWND;
message: UINT;
wParam: Longint;
lParam: Longint;
time: DWORD;
pt: TPoint;
end;
TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;
TArc = record Path: string; OrigSize: Integer; Size: Extended; end;
var
ExtractFile: TLabel;
lblExtractFileName: TLabel;
btnCancelUnpacking: TButton;
CancelCode, n, UnPackError, StartInstall: Integer;
Arcs: array of TArc;
msgError: string;
lastMb: Integer;
baseMb: Integer;
totalUncompressedSize: Integer; // total uncompressed size of archive data in mb
LastTimerEvent: DWORD;
Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';
function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';
function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';
procedure AppProcessMessage;
var
Msg: TMyMsg;
begin
while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;
// Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть
Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do
SetLength(Result, Length(Result)-1);
End;
function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;
Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo;
if Lo<0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi:= Hi-1 Downto 0 do
Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;
// Converts OEM encoded string into ANSI
// Преобразует OEM строку в ANSI кодировку
function OemToAnsiStr( strSource: AnsiString): AnsiString;
var
nRet : longint;
begin
SetLength( Result, Length( strSource ) );
nRet:= OemToChar( strSource, Result );
end;
// Converts ANSI encoded string into UTF-8
// Преобразует строку из ANSI в UTF-8 кодировку
function AnsiToUtf8( strSource: string ): string;
var
nRet : integer;
WideCharBuf: string;
MultiByteBuf: string;
begin
strSource:= strSource + chr(0);
SetLength( WideCharBuf, Length( strSource ) * 2 );
SetLength( MultiByteBuf, Length( strSource ) * 2 );
nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );
nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);
Result:= MultiByteBuf;
end;
// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;
var origsize: Integer;
// The callback function for getting info about FreeArc archive
function FreeArcInfoCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
begin
if string(what)='origsize' then origsize := Mb else
if string(what)='compsize' then else
if string(what)='total_files' then else
Result:= CancelCode;
end;
// Returns decompressed size of files in archive
function ArchiveOrigSize(arcname: string): Integer;
var
callback: longword;
Begin
callback:= WrapFreeArcCallback(@FreeArcInfoCallback,4); //FreeArcInfoCallback has 4 arguments
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'l', '--', AnsiToUtf8(arcname), '', '', '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
if Result >= 0 then Result:= origsize;
except
Result:= -63; // ArcFail
end;
end;
// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
Result:= 0;
if FindFirst(ExpandConstant(dir), FSR) then begin
try
repeat
// Skip everything but the folders
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;
n:= GetArrayLength(Arcs);
// Expand the folder list
SetArrayLength(Arcs, n +1);
Arcs[n].Path:= ExtractFilePath(ExpandConstant(dir)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
Arcs[n].OrigSize := ArchiveOrigSize(Arcs[n].Path)
totalUncompressedSize := totalUncompressedSize + Arcs[n].OrigSize
until not FindNext(FSR);
finally
FindClose(FSR);
end;
end;
End;
// Sets the TaskBar title
Procedure SetTaskBarTitle(Title: String); var h: Integer;
Begin
h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);
End;
// Converts milliseconds to human-readable time
// Конвертирует милисекунды в человеко-читаемое изображение времени
Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail {hh:mm:ss format} then
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 {more than hour} then
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 {1..60 minutes} then
Result:= IntToStr(Ticks/60000) +m+' '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +s
else Result:= IntToStr(Ticks/1000) +s {less than one minute}
End;
// The main callback function for unpacking FreeArc archives
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;
var
percents, Remaining: Integer;
s: String;
begin
if GetTickCount - LastTimerEvent > 1000 then begin
// This code will be executed once each 1000 ms (этот код будет выполняться раз в 1000 миллисекунд)
// ....
// End of code executed by timer
LastTimerEvent := LastTimerEvent+1000;
end;
if string(what)='filename' then begin
// Update FileName label
lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )
end else if (string(what)='write') and (totalUncompressedSize>0) and (Mb>lastMb) then begin
// Assign to Mb *total* amount of data extracted to the moment from all archives
lastMb := Mb;
Mb := baseMb+Mb;
// Update progress bar
WizardForm.ProgressGauge.Position:= Mb;
// Show how much megabytes/archives were processed up to the moment
percents:= (Mb*1000) div totalUncompressedSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalUncompressedSize)]);
if GetArrayLength(Arcs)>1 then
s := s + '. '+FmtMessage(cm('ArcInfo'), [IntToStr(n+1), IntToStr(GetArrayLength(Arcs))])
ExtractFile.Caption := s
// Calculate and show current percents
percents:= (Mb*1000) div totalUncompressedSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalUncompressedSize - Mb)/Mb)) else Remaining:= 0;
if Remaining = 0 then SetTaskBarTitle(cm('ending')) else begin
s:= s + '. '+FmtMessage(cm('remains'), [TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)])
SetTaskBarTitle(FmtMessage(cm('taskbar'), [IntToStr(percents/10), TicksToTime(Remaining, 'h', 'm', 's', false)]))
end;
WizardForm.FileNameLabel.Caption := s
end;
AppProcessMessage;
Result:= CancelCode;
end;
// Extracts all found archives
function UnPack(Archives: string): Integer;
var
totalCompressedSize: Extended;
callback: longword;
FreeMB, TotalMB: Cardinal;
begin
// Display 'Extracting FreeArc archive'
lblExtractFileName.Caption:= '';
lblExtractFileName.Show;
ExtractFile.caption:= cm('ArcTitle');
ExtractFile.Show;
// Show the 'Cancel unpacking' button and set it as default button
btnCancelUnpacking.Caption:= WizardForm.CancelButton.Caption;
btnCancelUnpacking.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
// Get the size of all archives
totalUncompressedSize := 0;
totalCompressedSize := FindArcs(Archives);
WizardForm.ProgressGauge.Max:= totalUncompressedSize;
// Other initializations
callback:= WrapFreeArcCallback(@FreeArcCallback,4); //FreeArcCallback has 4 arguments
StartInstall:= GetTickCount; {время начала распаковки}
LastTimerEvent:= GetTickCount;
baseMb:= 0
for n:= 0 to GetArrayLength(Arcs) -1 do
begin
lastMb := 0
CancelCode:= 0;
AppProcessMessage;
try
// Pass the specified arguments to 'unarc.dll'
Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', AnsiToUtf8(Arcs[n].Path), '', '', '', '', '');
if CancelCode < 0 then Result:= CancelCode;
except
Result:= -63; // ArcFail
end;
baseMb:= baseMb+lastMb
// Error occured
if Result <> 0 then
begin
msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);
GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);
case Result of
-1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)
else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);
-127: msgError:= cm('ArcBreak'); //Cancel button
-63: msgError:= cm('ArcFail');
end;
// MsgBox(msgError, mbInformation, MB_OK); //сообщение показывается на странице завершения
Log(msgError);
Break; //прервать цикл распаковки
end;
end;
// Hide labels and button
WizardForm.FileNameLabel.Caption:= '';
lblExtractFileName.Hide;
ExtractFile.Hide;
btnCancelUnpacking.Hide;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
UnPackError:= UnPack(Archives)
if UnPackError = 0 then
SetTaskBarTitle(SetupMessage(msgSetupAppTitle))
else
begin
// Error occured, uninstall it then
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); //откат установки из-за ошибки unarc.dll
SetTaskBarTitle(SetupMessage(msgErrorTitle))
WizardForm.Caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
end;
end;
end;
// стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;
Procedure CurPageChanged(CurPageID: Integer);
Begin
if (CurPageID = wpFinished) and (UnPackError <> 0) then
begin // Extraction was unsuccessful (распаковщик вернул ошибку)
// Show error message
WizardForm.FinishedLabel.Font.Color:= $0000C0; // red (красный)
WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;
WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;
end;
End;
procedure InitializeWizard();
begin
with WizardForm.ProgressGauge do
begin
// Create a label to show current FileName being extracted
lblExtractFileName:= TLabel.Create(WizardForm);
lblExtractFileName.parent:=WizardForm.InstallingPage;
lblExtractFileName.autosize:=false;
lblExtractFileName.Width:= Width;
lblExtractFileName.top:=Top + ScaleY(35);
lblExtractFileName.Caption:= '';
lblExtractFileName.Hide;
// Create a label to show percentage
ExtractFile:= TLabel.Create(WizardForm);
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width:= Width;
ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);
ExtractFile.caption:= '';
ExtractFile.Hide;
end;
// Create a 'Cancel unpacking' button and hide it for now.
btnCancelUnpacking:=TButton.create(WizardForm);
btnCancelUnpacking.Parent:= WizardForm;
btnCancelUnpacking.SetBounds(WizardForm.CancelButton.Left, WizardForm.CancelButton.top, WizardForm.CancelButton.Width, WizardForm.CancelButton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Hide;
end;
И вот этот надо добавить:
[_ISToolPreCompile]
#include AddBackslash(SourcePath) +"InnoSetupUpgrade.iss"
[Icons]
Name: {group}\Notepad; Filename: notepad.exe
[Code]
Procedure InitializeWizard;
Begin
{значения системных требований (необязательно)} NeedSys:= 5.1; NeedSp:= 2; NeedMB:= 250; NeedMHZ:= 1800; NeedRAM:= 512; NeedVRAM:= 128; NeedSwap:= 960; NeedSoundCard:= 'Creative'; NeedRegKey:= 'Software\Microsoft\.NETFramework'; NeedRegKeyOK:=' Пакет Microsoft .NET Framework установлен'; NeedRegKeyNO:=' Требуется установить Microsoft .NET Framework'
InnoUpgrade { InnoSetup Add-on by Victor Dobrov }
End;
Постоянно ошибки выдаёт.
yamaha, вот http://upwap.ru/731665
svensoft, вот скрипт
#define MyAppName "Resident Evil™ 4 Ultimate Edition"
[Setup]
AppId={{6AA7E180-8314-4263-9FF0-40825E4CE420}
AppName=Resident Evil 4 Ultimate Edition
AppVerName=Resident Evil 4 UE v.1.0.1
AppPublisher=Sotonisto
DefaultDirName={pf}\Soto\Resident Evil 4 UE
DefaultGroupName=Soto\Resident Evil 4 UE
OutputDir=C:\Pack
SetupIconFile=re4.ico
OutputBaseFilename=setup2
Compression=lzma
SolidCompression=yes
DiskSpanning=yes
DiskSliceSize=934003200
DiskClusterSize=2753
DisableReadyPage=True
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
russian.Welcome_1=Вас приветствует мастер установки игры
russian.Welcome_2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nНа время установки рекомендуется закрыть все прочие приложения.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти.
russian.SelectDir_1=В какую папку Вы хотите установить {#MyAppName}?
russian.SelectDir_2=Обновить DirectX
russian.SelectDir_3=Добавить ярлык на Рабочий стол
russian.SelectGroup_l=Нажмите «Установить», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
russian.Installing_l=Пожалуйста, подождите, пока игра установится на Ваш компьютер.
russian.Finished_1=Установка игры {#MyAppName} успешно завершена.
russian.Finished_2=Игра {#MyAppName} была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий значек в меню «Пуск» или ярлык на Рабочем столе.
russian.Finished_3=Нажмите «Завершить», чтобы выйти из программы установки.
russian.Space_1=Доступно места на диске:
russian.Space_2=Требуется места на диске:
russian.Language=Язык озвучки:
russian.DirectXInstall=Идет обновление DirectX...
russian.Uninstall=Удалить {#MyAppName}
[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; Flags: dontcopy ignoreversion
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: my.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: 1.bmp; Flags: dontcopy
Source: 2.bmp; Flags: dontcopy
Source: 3.bmp; Flags: dontcopy
Source: 4.bmp; Flags: dontcopy
Source: 5.bmp; Flags: dontcopy
Source: autorun.exe; DestDir: {app}; Flags: ignoreversion
[Icons]
Name: {group}\Начать игру; Filename: {app}\game.exe
Name: {group}\Настройки игры; Filename: {app}\setuptool.exe
Name: {group}\Readme; Filename: {app}\Readme.txt
Name: {group}\RG PKS; Filename: http://rg-pks.at.ua/
Name: {group}\Удалить игру; Filename: {uninstallexe}
Name: {userdesktop}\Resident Evil 4 Ultimate Edition; Filename: {app}\game.exe; WorkingDir: {app}
[Code]
//type
// TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
const
ButtonWidth = 80;
ButtonHeight = 23;
bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
var
WizardLabel: TLabel;
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
n: Integer;
ImagePage_Welcome, ImagePage_SelectDir, ImagePage_SelectGroup, ImagePage_Installing, ImagePage_Finished: TBitmapImage;
WelcomeText_1, WelcomeText_2, SelectDirText_1, SelectDirText_2, SelectDirText_3, SelectDirText_4, SelectDirText_5,
SelectGroupText_1, InstallingText_1, PageNameLabel1, PageDescriptionLabel1, PageNameLabel2,
PageDescriptionLabel2, PageNameLabel3, FilenameLabel, FinishedText_1, FinishedText_2: TLabel;
DirectX, Icons: TCheckBox;
NeedSize: Integer;
FreeMB, TotalMB: Cardinal;
FreeSpaceLabel: TLabel;
//=========
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;
//=========
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
SelectDirText_4.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr(round(FreeMB/1024*100)/100) + ' GB' else
SelectDirText_4.Caption := ExpandConstant('{cm:SPACE_1} ')+ NumToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True;
end;
//========
procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
SelectDirText_5.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr(round(NeedSize/1024*100)/100) + ' GB' else
SelectDirText_5.Caption := ExpandConstant('{cm:SPACE_2} ')+ NumToStr(NeedSize)+ ' MB';
end;
//========
procedure DirectXLabelOnClick(Sender: TObject);
begin
if DirectX.Checked = False then
DirectX.Checked:= True else
DirectX.Checked:= False;
end;
//========
procedure IconsOnClick(Sender: TObject);
begin
if Icons.Checked = False then
Icons.Checked:= True else
Icons.Checked:= False;
end;
//=========
Procedure WizardFormHideAll();
begin
WizardForm.Bevel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.BeveledLabel.Hide;
WizardForm.OuterNotebook.Hide;
WizardForm.InnerNotebook.Hide;
ImagePage_Welcome.Hide;
ImagePage_SelectDir.Hide;
ImagePage_SelectGroup.Hide;
ImagePage_Installing.Hide;
ImagePage_Finished.Hide;
WelcomeText_1.Hide;
WelcomeText_2.Hide;
SelectDirText_1.Hide;
SelectDirText_2.Hide;
SelectDirText_3.Hide;
SelectDirText_4.Hide;
SelectDirText_5.Hide;
SelectGroupText_1.Hide;
InstallingText_1.Hide;
PageNameLabel1.Hide;
PageDescriptionLabel1.Hide;
PageNameLabel2.Hide;
PageDescriptionLabel2.Hide;
PageNameLabel3.Hide;
FilenameLabel.Hide;
FinishedText_1.Hide;
FinishedText_2.Hide;
//WizardForm.bidDirBrowse.Hide;
WizardForm.DirEdit.Hide;
DirectX.Hide;
Icons.Hide;
//WizardForm.bidGroupBrowse.Hide;
WizardForm.GroupEdit.Hide;
end;
//=========
procedure WizardFormImagePage();
begin
ExtractTemporaryFile('1.bmp');
ExtractTemporaryFile('2.bmp');
ExtractTemporaryFile('3.bmp');
ExtractTemporaryFile('4.bmp');
ExtractTemporaryFile('5.bmp');
WizardForm.Width:=ScaleX(790);
WizardForm.Height:=ScaleY(533);
WizardForm.Font.Color:=$ffffff;
WizardForm.BorderStyle:=bsNone;
WizardForm.Center;
ImagePage_Welcome:= TBitmapImage.Create(WizardForm);
ImagePage_Welcome.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
ImagePage_Welcome.Top:= ScaleY(0);
ImagePage_Welcome.Left:= ScaleX(0);
ImagePage_Welcome.Width:= ScaleX(790);
ImagePage_Welcome.Height:= ScaleY(533);
ImagePage_Welcome.Stretch:= true
ImagePage_Welcome.Parent:= WizardForm;
ImagePage_SelectDir:= TBitmapImage.Create(WizardForm);
ImagePage_SelectDir.Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
ImagePage_SelectDir.Top:= ScaleY(0);
ImagePage_SelectDir.Left:= ScaleX(0);
ImagePage_SelectDir.Width:= ScaleX(790);
ImagePage_SelectDir.Height:= ScaleY(533);
ImagePage_SelectDir.Stretch:= true;
ImagePage_SelectDir.Parent:= WizardForm;
ImagePage_SelectGroup:= TBitmapImage.Create(WizardForm);
ImagePage_SelectGroup.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3.bmp'));
ImagePage_SelectGroup.Top:= ScaleY(0);
ImagePage_SelectGroup.Left:= ScaleX(0);
ImagePage_SelectGroup.Width:= ScaleX(790);
ImagePage_SelectGroup.Height:= ScaleY(533);
ImagePage_SelectGroup.Stretch:= true;
ImagePage_SelectGroup.Parent:= WizardForm;
ImagePage_Installing:= TBitmapImage.Create(WizardForm);
ImagePage_Installing.Bitmap.LoadFromFile(ExpandConstant('{tmp}\4.bmp'));
ImagePage_Installing.Top:= ScaleY(0);
ImagePage_Installing.Left:= ScaleX(0);
ImagePage_Installing.Width:= ScaleX(790);
ImagePage_Installing.Height:= ScaleY(533);
ImagePage_Installing.Stretch:= true;
ImagePage_Installing.Parent:= WizardForm;
ImagePage_Finished:= TBitmapImage.Create(WizardForm);
ImagePage_Finished.Bitmap.LoadFromFile(ExpandConstant('{tmp}\5.bmp'));
ImagePage_Finished.Top:= ScaleY(0);
ImagePage_Finished.Left:= ScaleX(0);
ImagePage_Finished.Width:= ScaleX(790);
ImagePage_Finished.Height:= ScaleY(533);
ImagePage_Finished.Stretch:= true
ImagePage_Finished.Parent:= WizardForm;
end;
//=========
Procedure WizardFormTextPage();
begin
WelcomeText_1:= TLabel.Create(WizardForm);
with WelcomeText_1 do
begin
Top:= ScaleY(180);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(65);
AutoSize:= false;
Alignment := taCenter;
Transparent:= true;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 16;
Font.Color:=ClWhite;
Font.Style := [fsBold];
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Welcome_1}')+#13+('{#MyAppName}');
end;
WelcomeText_2:=TLabel.Create(WizardForm);
with WelcomeText_2 do
begin
Top:= ScaleY(270);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Georgia';
Font.Size:= 11
Font.Style := [fsBold, fsItalic];
Font.Color:=ClWhite;
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Welcome_2}');
end;
PageNameLabel1:= TLabel.Create(WizardForm);
with PageNameLabel1 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(300);
Height:= ScaleY(30);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
end;
SelectDirText_1:= TLabel.Create(WizardForm);
with SelectDirText_1 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:SelectDir_1}');
end;
PageDescriptionLabel1:= TLabel.Create(WizardForm);
with PageDescriptionLabel1 do
begin
Caption:= WizardForm.SelectDirBrowseLabel.Caption;
Left:= ScaleX(120);
Top:= ScaleY(250);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
Parent:= WizardForm;
end;
SelectDirText_2:= TLabel.Create(WizardForm);
with SelectDirText_2 do
begin
Left:= ScaleX(90);
Top:= ScaleY(340);
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:SelectDir_2}');
OnClick:= @DirectXLabelOnClick;
end;
SelectDirText_3:= TLabel.Create(WizardForm);
with SelectDirText_3 do
begin
Left:= ScaleX(90);
Top:= ScaleY(360);
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
Caption:=ExpandConstant('{cm:SelectDir_3}');
OnClick:= @IconsOnClick;
end;
SelectDirText_4:= TLabel.Create(WizardForm);
with SelectDirText_4 do
begin
Left:= ScaleX(65);
Top:= ScaleY(420);
Width:= ScaleX(209);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
Parent:= WizardForm;
end;
SelectDirText_5:= TLabel.Create(WizardForm);
with SelectDirText_5 do
begin
Left:= ScaleX(65);
Top:= ScaleY(440);
Width:= ScaleX(209);
Height:= ScaleY(13);
Font.Name:= 'Georgia';
Font.Size:= 8;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent:= True;
Parent:= WizardForm;
end;
PageNameLabel2:= TLabel.Create(WizardForm);
with PageNameLabel2 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(350);
Height:= ScaleY(30);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
end;
PageDescriptionLabel2:= TLabel.Create(WizardForm);
with PageDescriptionLabel2 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Wordwrap:= True;
Transparent := True;
Parent:= WizardForm;
end;
SelectGroupText_1:=TLabel.Create(WizardForm)
with SelectGroupText_1 do
begin
Left:= ScaleX(120);
Top:= ScaleY(250);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
WordWrap:= True;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
WordWrap:=True;
Transparent:=True;
Parent:=WizardForm;
Caption:=ExpandConstant('{cm:SelectGroup_l}')
end;
PageNameLabel3:= TLabel.Create(WizardForm);
with PageNameLabel3 do
begin
Left:= ScaleX(65);
Top:= ScaleY(185);
Width:= ScaleX(150);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 13;
Font.Style:= [fsBold];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
end;
InstallingText_1:= TLabel.Create(WizardForm);
with InstallingText_1 do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Installing_l}')
end;
FilenameLabel:= TLabel.Create(WizardForm);
with FilenameLabel do
begin
Left:= ScaleX(65);
Top:= ScaleY(275);
Width:= ScaleX(625);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm;
end;
FinishedText_1:=TLabel.Create(WizardForm);
with FinishedText_1 do
begin
Left:= ScaleX(70);
Top:= ScaleY(180);
Width:= ScaleX(650);
Height:= ScaleY(65)
AutoSize:= false;
Alignment := taCenter;
WordWrap:= true;
Font.Name:='Georgia';
Font.Size:= 16;
Font.Color:=ClWhite;
Font.Style := [fsBold];
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Finished_1}');
end;
FinishedText_2:= TLabel.Create(WizardForm);
with FinishedText_2 do
begin
Top:= ScaleY(270);
Left:= ScaleX(70);
Width:= ScaleX(650);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Georgia'
Font.Size:= 11;
Font.Style := [fsBold, fsItalic];
Font.Color:=ClWhite;
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:Finished_2}')+#13#13+ExpandConstant('{cm:Finished_3}');
end;
end;
//=========
Procedure WizardFormOthersObject();
begin
with WizardForm do
begin
DirBrowseButton.Top:= ScaleY(305);
DirBrowseButton.Parent:= WizardForm;
DirEdit.Left:= ScaleX(120);
DirEdit.Top:= ScaleY(305);
DirEdit.Width:= ScaleX(460);
DirEdit.Font.Size:= 9;
DirEdit.Parent:= WizardForm;
end;
DirectX:= TCheckBox.Create(WizardForm);
with DirectX do
begin
Left:= ScaleX(65);
Top:= ScaleY(340);
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= False;
Parent:= WizardForm;
end;
Icons:= TCheckBox.Create(WizardForm);
with Icons do
begin
Left:= ScaleX(65);
Top:= ScaleY(360);
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 2;
Checked:= False;
Parent:= WizardForm;
end;
WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
with WizardForm do
begin
GroupBrowseButton.Top:= ScaleY(305);
GroupBrowseButton.Parent:= WizardForm;
//строка выбора пути
GroupEdit.Left:= ScaleX(120);
GroupEdit.Top:= ScaleY(305);
GroupEdit.Width:= ScaleX(460);
GroupEdit.Font.Size:=9;
GroupEdit.Parent:= WizardForm;
end;
with WizardForm do
begin
ProgressGauge.Top:=ScaleY(310);
ProgressGauge.Left:=ScaleX(100);
ProgressGauge.Width:=ScaleX(590);
ProgressGauge.Parent:= WizardForm;
end;
end;
//=========
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 ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
begin
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
if ButtonLabel[TLabel(Sender).Tag].Enabled then
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
ButtonImage[TLabel(Sender).Tag].Left:= -160
end;
end;
//==========
procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Left <> -80 then
for n:=0 to 4 do ButtonImage[n].Left:= 0
end;
//==========
procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
ButtonLabel[AButtonIndex].Left:= ButtonPanel[AButtonIndex].Width div 2 - ButtonLabel[AButtonIndex].Width div 2;
ButtonLabel[AButtonIndex].Top:= ButtonPanel[AButtonIndex].Height div 2 - ButtonLabel[AButtonIndex].Height div 2;
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:=240
Image.Height:=23
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
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end
Labl:=TLabel.Create(WizardForm)
Labl.Left:=23
Labl.Top:=5
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Caption:=AButton.Caption
Labl.OnClick:=@ButtonLabelClick
Labl.OnDblClick:=@ButtonLabelClick
Labl.OnMouseMove:=@ButtonLabelMove
Labl.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;
//=========
Procedure WizardFormButton();
begin
WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.Left:= ScaleX(0)
WizardLabel.Top:= ScaleY(0)
WizardLabel.Width:= ScaleX(790);
WizardLabel.Height:= ScaleY(533);
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.Caption:='';
WizardLabel.OnMouseMove:=@WizardLabelMove
WizardLabel.Parent:= WizardForm;
WizardLabel.Show;
WizardForm.BackButton.SetBounds(WizardForm.ClientWidth - ScaleX(8) * 37,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));
WizardForm.NextButton.SetBounds(WizardForm.ClientWidth - ScaleX(8) * 26,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));
WizardForm.CancelButton.SetBounds(WizardForm.ClientWidth - ScaleX(8)* 15,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 2, ScaleX(ButtonWidth), ScaleY(ButtonHeight));
WizardForm.DirBrowseButton.SetBounds(WizardForm.ClientWidth - ScaleX(5) * 30,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 10, ScaleX(ButtonWidth), ScaleY(ButtonHeight));
WizardForm.GroupBrowseButton.SetBounds(WizardForm.ClientWidth - ScaleX(5) * 30,
WizardForm.ClientHeight - ScaleY(ButtonHeight) * 10, ScaleX(ButtonWidth), ScaleY(ButtonHeight));
ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
//=========
procedure CurPageChangedButton(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
if CurPageID=wpSelectProgramGroup then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установить';
end;
end;
//=========
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 InitializeSetup(): Boolean;
begin
//ExtractTemporaryFile('BASS.dll');
//ExtractTemporaryFile('sound.mp3');
//mp3Name := ExpandConstant('{tmp}\sound.mp3');
//BASS_Init(-1, 44100, 0, 0, 0);
//mp3Handle := BASS_StreamCreateFile(FALSE, PChar(mp3Name), 0, 0, BASS_SAMPLE_LOOP);
//BASS_Start();
//BASS_ChannelPlay(mp3Handle, False);
//Result := True;
ExtractTemporaryFile('my.cjstyles');
LoadSkin(ExpandConstant('{tmp}\my.cjstyles'), '');
Result := True;
end;
//************
Procedure InitializeWizard();
begin
WizardFormImagePage();
WizardFormTextPage();
WizardFormOthersObject();
WizardFormButton();
end;
//=========
procedure CurWelcomePageChanged();
begin
ImagePage_Welcome.Show;
WelcomeText_1.Show;
WelcomeText_2.Show;
end;
//=========
procedure CurSelectDirPageChanged();
begin
ImagePage_SelectDir.Show;
SelectDirText_1.Show;
SelectDirText_2.Show;
SelectDirText_3.Show;
SelectDirText_4.Show;
SelectDirText_5.Show;
PageNameLabel1.Show;
PageDescriptionLabel1.Show;
//bidDirBrowse.Show;
WizardForm.DirEdit.Show;
DirectX.Show;
Icons.Show;
end;
//============
procedure CurProgrammGroupPageChanged();
begin
ImagePage_SelectGroup.Show;
PageNameLabel2.Show;
PageDescriptionLabel2.Show;
SelectGroupText_1.Show;
//bidGroupBrowse.Show;
WizardForm.GroupEdit.Show;
end;
//============
procedure CurInstallingPageChanged();
begin
end;
//============
procedure CurFinishedPageChanged();
begin
end;
//============
procedure CurPageChanged(CurPageID: Integer);
begin
ButtonPanel[3].Hide; //добавил vint56
ButtonPanel[4].Hide; //добавил vint56
WizardForm.ProgressGauge.Hide; //добавил vint56
WizardForm.GroupBrowseButton.Hide //добавил vint56
WizardForm.DirBrowseButton.Hide //добавил vint56
CurPageChangedButton(CurPageID);
WizardFormHideAll();
If CurPageID=wpWelcome then
begin
CurWelcomePageChanged();
WelcomeText_1.Show; //добавил vint56
WelcomeText_2.Show; //добавил vint56
end
else
If CurPageID=wpSelectDir then
begin
CurSelectDirPageChanged();
WizardForm.DirBrowseButton.Show; //добавил vint56
SelectDirText_3.Show; //добавил vint56
SelectDirText_4.Show; //добавил vint56
SelectDirText_5.Show; //добавил vint56
end
else
If CurPageID=wpSelectProgramGroup then
begin
CurProgrammGroupPageChanged();
ImagePage_SelectGroup.Show; //добавил vint56
WizardForm.GroupBrowseButton.Show; //добавил vint56
SelectGroupText_1.Show; //добавил vint56
end
else
If CurPageID=wpInstalling then
begin
CurInstallingPageChanged();
ImagePage_Installing.Show; //добавил vint56
WizardForm.ProgressGauge.Show; //добавил vint56
InstallingText_1.Show; //добавил vint56
end
else
If CurPageID=wpFinished then
begin
CurFinishedPageChanged();
ImagePage_Finished.Show; //добавил vint56
FinishedText_1.Show; //добавил vint56
FinishedText_2.Show; //добавил vint56
end
end;
Когда он выдаёт ошибку мол типо повтор такой же строки.Что делать?
И как вообще правильно скидывать дополнения к своему инсталятору?
yamaha, какой строки повтор
МИШАНЧИК, вот что просил http://upwap.ru/731786
возможно-ли сделать, что бы эти файлы не копировались, а запускались?(имеют расширение ехе, и еще как сделать что-бы все ПО включая и это устанавливалось после распаковки архивов FreeArc?)
[Types]
Name: custom; Description: Выборочная установка; Flags: iscustom
[Components]
Name: lng; Description: Выберите версию игры:; Flags: fixed; Types: custom
Name: lng/ru; Description: Версия игры 1.6.01(патч1); Flags: exclusive
Name: lng/en; Description: Версия игры 1.6.02(патч2); Flags: exclusive
[Files]
Source: C:\1.6.01\*; DestDir: {app}\; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\1.6.02\*; DestDir: {app}\; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
----------------- или так:
Source: C:\1.exe; DestDir: {app}\; Components: lng/ru; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Source: C:\2.exe; DestDir: {app}\; Components: lng/en; Flags: recursesubdirs ignoreversion sortfilesbyextension createallsubdirs
Например такие:
Строка 74
Колонка 19
Dupcicate identifier 'n'
Далeе всё теже колонки тока цифры другие и identifier expected
еще colon (':') expected
yamaha,
var
n: Integer; значит еще где есть n: поблизости значит найди и удали и не будет дубликата
Serega,
всмысле заново?
//Как избавиться от запроса подтверждения выхода из инсталлятора?
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
end;
этот код работает только для отмены окна подтверждения при выходе :(
но есть другие окна) к примеру "ни один компонент не выбран" данное сообщение не уберешь) оно нужно
Sotonisto
31-01-2010, 18:24
Народ, тут вот такая штука.
Как можно реализовать удаление из папки с игрой некоторых файлов (5 штук)?
Просто у меня есть обновление для RE4, так там перед его установкой нужно удалить эти 5 файлов (замена файлов оригинала на файлы апдейта отпадает).
serg aka lain
31-01-2010, 19:07
перед его установкой нужно удалить эти 5 файлов (замена файлов оригинала на файлы апдейта отпадает). »
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
if FileExists(ExpandConstant('{app}\MyProg.exe')) then
DeleteFile(ExpandConstant('{app}\MyProg.exe'));
// if FileExists(2) then .... DeleteFile(2);
end;
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.