Войти

Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 [57] 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

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, то получается так как на первой картинке, но при установке инсталл тупо выдает сам архив :(

vint56
30-01-2010, 20:31
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
Это можно, но все равно он так и будет одним куском, а хотелось бы чтоб он при создании инсталла делился+при установке он не разархивируется а копируется сам архив

vint56
30-01-2010, 20:49
Jerichoman, Почему я так делаю нормально работает он распаковывает архив

Serega
30-01-2010, 23:14
может быть как то возможно увеличить размер окна? »
Семёрки у меня нет, т.е. проверить негде, попробуйте прописать сообщение заново:

[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.
Если результат будет таким же, то можно создать отдельную форму с сообщением.

A1EXXX
31-01-2010, 00:00
Возможно ли перемещение задач (или хотя бы чекбоксов), если, к примеру, у меня в [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] и не париться? :)

Serega
31-01-2010, 00:19
чекбоксы нужно разместить иначе »
Такое только всё делать в [Сode] »

A1EXXX
31-01-2010, 00:35
Serega, так и думал... спрашивал для очистки совести, получается... :)

yamaha
31-01-2010, 04:34
Вообщем немогу собрать два скрипта.
Один готовый и к нему надо добавить скрипт маленький который проверяет конфигурацию.
Вот первый:
[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;

Постоянно ошибки выдаёт.

vint56
31-01-2010, 09:30
yamaha, вот http://upwap.ru/731665

vint56
31-01-2010, 09:47
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
31-01-2010, 10:06
Когда он выдаёт ошибку мол типо повтор такой же строки.Что делать?
И как вообще правильно скидывать дополнения к своему инсталятору?

vint56
31-01-2010, 10:12
yamaha, какой строки повтор

vint56
31-01-2010, 11:43
МИШАНЧИК, вот что просил http://upwap.ru/731786

Tukash
31-01-2010, 15:58
возможно-ли сделать, что бы эти файлы не копировались, а запускались?(имеют расширение ехе, и еще как сделать что-бы все ПО включая и это устанавливалось после распаковки архивов 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

yamaha
31-01-2010, 17:07
Например такие:
Строка 74
Колонка 19
Dupcicate identifier 'n'

Далeе всё теже колонки тока цифры другие и identifier expected
еще colon (':') expected

vint56
31-01-2010, 17:52
yamaha,
var
n: Integer; значит еще где есть n: поблизости значит найди и удали и не будет дубликата

lexikon
31-01-2010, 18:21
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