PDA

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


Страниц : 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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

LinkOFF
17-04-2011, 20:50
А можете еще сказать как сделать чтоб после у становки выкинуло на сайт автоматически(без подтверждения)

R.i.m.s.k.y.
17-04-2011, 20:52
А можете еще сказать как сделать чтоб после у становки выкинуло на сайт автоматически »
за такое руки отрывать, не скажу как сделать, а был бы модером - забанил бы того кто подскажет ;)

скрипт ведьмака
Ахринеть проще! Б-Р-А-В-О!

LinkOFF
17-04-2011, 21:00
Да мне автоматом надо.Я с галкой "Посетить сайт" знаю как

И как убрать вот это http://i19.fastpic.ru/big/2011/0417/c9/03d93d6e9b733dc2325c4d0a4e1c32c9.jpg

R.i.m.s.k.y.
17-04-2011, 21:12
И как убрать вот это »
прочитать в шапке коллекцию сриптов
procedure InitializeWizard();
begin
...
WizardForm.FileNameLabel.Visible:= False;
или как верно подсказывает Лександер
WizardForm.FilenameLabel.Hide;
...

Gnom_aka_Lexander
17-04-2011, 21:16
Б-Р-А-В-О! »
Половина - YURSHATу - авторан его :)

LinkOFF
17-04-2011, 21:36
R.i.m.s.k.y. скажи пожалуйста очень надо

Serega
17-04-2011, 21:41
рассуди нас »
Если мы указываем в секции [Setup] директиву ArchitecturesInstallIn64BitMode=x64, то доп. проверки производить не нужно. Запись будет перенаправлена на HKLM\Software\Wow6432Node\Gabest\Media Player Classic..
Но, есть хорошая поговорка: человеку свойственно ошибаться, а компьютер позволяет ему это делать ещё быстрее...
Поэтому я всегда использую доп. проверку Check: IsWin64, чтоб быть на 100% уверенным, что на клиентской машине, в независимости от от её глюков, запись будет сделана куда мне надо.

R.i.m.s.k.y.
17-04-2011, 21:50
Serega, странно
использую ArchitecturesInstallIn64BitMode=x64, строчка кода
Components: pl\mpc; Root: HKLM; Subkey: SOFTWARE\Gabest\Media Player Classic; ValueType: string; ValueName: ExePath; ValueData: {app}\MPC\mpc-hc.exe; Flags: uninsdeletekey
и в результате запись реестра
\\\Registry\HKEY_LOCAL_MACHINE\SOFTWARE\Gabest\Media Player Classic\ExePath
никаких HKLM\Software\Wow6432Node\Gabest\Media Player Classic

Что я делаю не так?

LinkOFF
17-04-2011, 21:54
Serega ты хоть скажешь как сделать чтоб после установки на сайт выкидывало без подтверждения

Gnom_aka_Lexander
17-04-2011, 22:05
LinkOFF, ага, ставлю я, такой, программу, ничего не подозреваю, а после установки меня кидает на загрузку вируса прямой ссылко, и весит он пару килобайт, что даже отменить не успеть...

Serega, R.i.m.s.k.y., Давайте остынем и подумаем :) Wow6432Node - подключ создаваемый для х32 приложений, ArchitecturesInstallIn64BitMode=x64 - автоматически заставляет писать напрямую, без Wow6432Node, и тогда действительно нужно писать в скрипт разные ключи и проверку IsWin64, а без этой строчки - ArchitecturesInstallIn64BitMode=x64 достаточно указать ключ для х32 и все всегда запишется правильно.

murlakatamenka
17-04-2011, 22:39
LinkOFF, сделать это просто, но я не считаю правильным, что пользователю не предоставляют выбор. может он не хочет на ваш сайт заходить ?
как я понял, что ArchitecturesInstallIn64BitMode=x64 позволяет больше ничего не дописывать. но на всякий случай чеки можно добавить, раз тут споры пошли по этому поводу.
осталось ещё 2 вопроса
1. Как можно настроить, чтобы отдельные папки/файлы сохранялись в отдельные .bin-файлы ?
3. Подскажите нормальный вариант для сплэша. Хочу сделать следующее: сначала появляется лого Mass Effect (появление плавное, т.е. со сменой прозрачности), а потом так же плавно появляестся 2 (это цифра, для Mass Effect 2 всё делается )и спустя некоторое врмя они плавно исчезают. isgsg.dll у меня не работает вообще (Win 7 x64), вариант через sleep мне не нравится тем, что при наведении на сплэш курсор меняется на со стрелки на кружок. С картинками поработать смогу (в Photoshop).
»
upd. значит вообще ничего делать не надо, ключи сами в реестр 64-битных систем правильно пропишутся

Serega
17-04-2011, 23:21
Что я делаю не так? »
Давайте остынем и подумаем »
Насчёт остынем, я и не нагревался... :) а насчет подумаем, это правильно.
Ну нет у меня под рукой х64 версии чтоб проверить, тогда открываем Справку и читаем... долго читаем... :)
И вот, что я увидел:
64-bit mode is selected if the user is running a 64-bit version of Windows and the system's processor architecture is included in the value of the ArchitecturesInstallIn64BitMode [Setup] section directive.
// здесь текст...
In 64-bit mode:
// ещё текст... и самое главное:
This is because Setup/Uninstall temporarily disables WOW64 file system redirection
Т.е. при указании директивы ArchitecturesInstallIn64BitMode отключается системная переадресация и тогда нужно указывать доп. проверки.
Но если в вашей сборке есть файлы, которые будут работать только на х64, то эту диррективу указывать нужно:
Normally, you should not change this directive from its default value unless your application contains native 64-bit binaries.

Хочу_спросить
18-04-2011, 01:43
подскажите как сделать чтобы во время установки фоном на весь экран воспроизводился видеофайл. заранее спс

R.i.m.s.k.y.
18-04-2011, 09:14
R.i.m.s.k.y. скажи пожалуйста очень надо »
нед

In 64-bit mode:
// ещё текст... и самое главное:
This is because Setup/Uninstall temporarily disables WOW64 file system redirection »
т.е. в 64битном режиме - при ArchitecturesInstallIn64BitMode=x64 - отключается запись в syswow64 и эти ключи надо указывать руками. Я так понял/перевел.
Или можно не указывать ArchitecturesInstallIn64BitMode=x64, тогда все 32битные/разрядные ключи будут писаться в syswow64.

Normally, you should not change this directive from its default value unless your application contains native 64-bit binaries »
мои паки - содержат, но я за реестром в этой части слежу внимательно, везде понатыканы IsWin64 / Not IsWin64

В общем "Следи за собой, будь осторожен" (с) Цой

Serega
18-04-2011, 09:44
при ArchitecturesInstallIn64BitMode=x64 - отключается запись в syswow64 и эти ключи надо указывать руками. Я так понял/перевел.
Или можно не указывать ArchitecturesInstallIn64BitMode=x64, тогда все 32битные/разрядные ключи будут писаться в syswow64. »
Всё правильно.
везде понатыканы IsWin64 / Not IsWin64 »
Я так же всегда делаю, но думаю надо всё же поэкспериментировать, т.е. добраться до х64 и произвести установку без указания директивы ArchitecturesInstallIn64BitMode=x64, но с обязательным указанием для файлов IsWin64 / not IsWin64...
Просто у меня есть такое подозрение, что в таком варианте должно быть всё нормально, т.е. все файлы будут на своих местах.

R.i.m.s.k.y.
18-04-2011, 09:55
Serega, держи 500-ю юбилейную благодарность ;)

Serega
18-04-2011, 10:48
держи 500-ю юбилейную благодарность »
:lol: Хотя это запрещено правилами, но спасибо.

my-94
18-04-2011, 11:26
Ребята помогите текст по середине сделать на 1 и на последней странице и чтобы картинок вообще не было


[Setup]
AppName=Machinarium
AppVerName=Machinarium
DefaultDirName={pf}\Machinarium
DefaultGroupName=Machinarium
VersionInfoCopyright=Bulat Ziganshin, Victor Dobrov, SotM, CTACKo, Alex Muscle
OutputBaseFilename=setup
OutputDir=.
UsePreviousAppDir=false
DirExistsWarning=no
ShowLanguageDialog=no

[Files]
;Source: *.arc; DestDir: {app}; Flags: nocompression
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: {group}\Играть; Filename: {app}\machinarium.exe
Name: {group}\Удалить; Filename: {app}\unins000.exe
Name: {commondesktop}\Машинариум; Filename: {app}\machinarium.exe

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

[CustomMessages]
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= сек

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

[Code]
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 в зависимости от версии
/// PAnsiChar = PChar; // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)
#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 CurStepChanged1(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;

// стандартный способ отката (не нужна CurPageChanged1), но архивы распаковываются до извлечения файлов инсталлятора
// if CurStep = ssInstall then
// if UnPack(Archives) <> 0 then Abort;

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

[Setup]


; --- Source: ISSkinSetupSilver.iss ------------------------------------------------------------
[Files]
; Add the ISSkin DLL used for skinning Inno Setup installations.
Source: ISSkin.dll; DestDir: {app}; Flags: dontcopy

; Add the Visual Style resource contains resources used for skinning,
; you can also use Microsoft Visual Styles (*.msstyles) resources.
Source: Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy

[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 InitializeSetup2(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup2();
begin
// Hide Window before unloading skin so user does not get
// a glimpse of an unskinned window before it is closed.
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;


[Setup]


; --- Dispatching code ------------------------------------------------------------

[Code]

procedure CurStepChanged(CurStep: TSetupStep);
begin
CurStepChanged1(CurStep);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
end;

procedure InitializeWizard();
begin
InitializeWizard1();
end;

function InitializeSetup(): Boolean;
begin
Result := InitializeSetup2(); if not Result then exit;
end;

procedure DeinitializeSetup();
begin
DeinitializeSetup2();
end;

R.i.m.s.k.y.
18-04-2011, 11:33
Ребята помогите текст по середине сделать на 1 и на последней странице и чтобы картинок вообще не было »
чего-то мне все это лепру напоминает

my-94
18-04-2011, 12:01
чего делать если я не могу это сделать ? (приходится просить)




© OSzone.net 2001-2012