Войти

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


Страниц : 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

by_gangster
18-03-2012, 20:04
люди помогите сделать две кликабельные ссылки пожалуйста
вот код


; Installer by Evgeniy Bytaikis
[Setup]
AppName=Sigerous Mod äëÿ COP
AppVerName=Sigerous Mod v2.2
DefaultDirName={pf}\S.T.A.L.K.E.R. - Çîâ Ïðèïÿòè
InfoBeforeFile=embedded\InfoBefore.rtf
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\logotip.bmp
SetupIconFile=embedded\sgm.ico
Compression=zip
OutputDir=.

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

[CustomMessages]
eng.ArcCancel=Îòìåíèòü
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.ArcCancel=Îòìåíèòü ðàñïàêîâêó
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= ñåê

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

[_Code]
{ RedesignWizardFormBegin } // Íå óäàëÿòü ýòó ñòðîêó!
// Íå èçìåíÿòü ýòó ñåêöèþ. Îíà ñîçäàíà àâòîìàòè÷åñêè.
var
Label1: TLabel;

procedure RedesignWizardForm;
begin
{ Label1 }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Name := 'Label1';
Parent := WizardForm.SelectDirPage;
Caption := 'Ðàñïàêóéòå â ïàïêó ñ óñòàíîâëåíîé èãðîé Ñòàëêåð Çîâ Ïðèïÿòè';
Color := clBtnFace;
Font.Color := clRed;
Font.Height := -11;
Font.Name := 'Tahoma';
Font.Style := [];
ParentColor := False;
ParentFont := False;
Transparent := False;
Left := ScaleX(0);
Top := ScaleY(112);
Width := ScaleX(328);
Height := ScaleY(13);
end;

with WizardForm.WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Width := ScaleX(495);
end;

with WizardForm.PageDescriptionLabel do
begin
Left := ScaleX(0);
Top := ScaleY(58);
end;

with WizardForm.PageNameLabel do
begin
Width := ScaleX(261);
end;

with WizardForm.FinishedLabel do
begin
Caption := 'Sigerous Mod äëÿ COP óñòàíîâëåí íà Âàø êîìïüþòåð. Ïðèëîæåíèå ìîæíî çàïóñòèòü ñ ïîìîùüþ ñîîòâåòñòâóþùåãî çíà÷êà.' + #13#10 +
'' + #13#10 +
'Íàæìèòå «Çàâåðøèòü», ÷òîáû âûéòè èç ïðîãðàììû óñòàíîâêè.' + #13#10 +
'';
end;

{ ReservationBegin }
// Âû ìîæåòå äîáàâèòü âàø êîä çäåñü.

{ ReservationEnd }
end;
// Íå èçìåíÿòü ýòó ñåêöèþ. Îíà ñîçäàíà àâòîìàòè÷åñêè.
{ RedesignWizardFormEnd } // Íå óäàëÿòü ýòó ñòðîêó!

const
Archives = '{src}\*.arc'; // óêàæèòå ðàñïîëîæåíèå àðõèâîâ FreeArc; äëÿ âíåøíèõ ôàéëîâ ñòðîêó â [Files] äîáàâëÿòü íåîáÿçàòåëüíî
totalSize = 2387; // total uncompressed size of archive data in mb, REQUIRED for correct progress displaying

PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;

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 below (äëÿ 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; 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;
LastTimerEvent: DWORD;

MouseLabel,SiteLabel: TLabel; // Êëèêàáåëüíàÿ òåêñòîâàÿ http-ññûëêà â ëåâîì íèæíåì óãëó èíñòàëëåðà //

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';

///////////////// Êëèêàáåëüíàÿ òåêñòîâàÿ http-ññûëêà â ëåâîì íèæíåì óãëó èíñòàëëåðà /////////////////
procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin

ShellExec('open', 'http://vk.com/by_gangster', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed;
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clblue;
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen;
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clblue;
end;
///////////////// Êëèêàáåëüíàÿ òåêñòîâàÿ http-ññûëêà â ëåâîì íèæíåì óãëó èíñòàëëåðà /////////////////

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;

// OnClick event function for btnCancel
procedure btnCancelUnpackingOnClick(Sender: TObject);
begin
if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then
CancelCode:= -127;
end;

// Scans the specified folders for archives and add them to list
function FindArcs(dir: string): Extended;
var
FSR: TFindRec;
Begin
if FindFirst(ExpandConstant(dir), FSR) then
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(Archives)) + FSR.Name;
Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);
Result:= Result + Arcs[n].Size;
until not FindNext(FSR);
finally
FindClose(FSR);
end;
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;

// 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 then {hh:mm:ss format}
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 then {1..60 minutes}
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)='written') and (totalSize>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 totalSize;
s := FmtMessage(cm('ExtractedInfo'), [IntToStr(Mb), IntToStr(totalSize)]);
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 totalSize;
s:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);
if Mb > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((totalSize - 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
allSize: 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.Show;
WizardForm.ActiveControl:= btnCancelUnpacking;
WizardForm.ProgressGauge.Position:= 0;
WizardForm.ProgressGauge.Max:= totalSize;
// Get the size of all archives
allSize:= FindArcs(Archives);
// 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

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 (ðàñïàêîâùèê âåðíóë îøèáêó)
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
RedesignWizardForm;
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(ScaleX(260), WizardForm.cancelbutton.top, ScaleX(140), WizardForm.cancelbutton.Height);
btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;
btnCancelUnpacking.Caption:= cm('ArcCancel');
btnCancelUnpacking.Hide;

///////////////// Êëèêàáåëüíàÿ òåêñòîâàÿ http-ññûëêà â ëåâîì íèæíåì óãëó èíñòàëëåðà /////////////////
MouseLabel:=TLabel.Create(WizardForm);
MouseLabel.Width:=WizardForm.Width;
MouseLabel.Height:=WizardForm.Height;
MouseLabel.Autosize:=False;
MouseLabel.Transparent:=True;
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2;
MouseLabel.Parent:=WizardForm;

SiteLabel:=TLabel.Create(WizardForm);
SiteLabel.Left:=10;
SiteLabel.Top:=330;
SiteLabel.Cursor:=crHand;
SiteLabel.Font.Color:=clblue;
SiteLabel.Caption:='Installer by Evgeniy Bytaikis';
SiteLabel.OnClick:=@SiteLabelOnClick;
SiteLabel.OnMouseDown:=@SiteLabelMouseDown;
SiteLabel.OnMouseUp:=@SiteLabelMouseUp;
SiteLabel.OnMouseMove:=@SiteLabelMouseMove;
SiteLabel.Parent:=WizardForm;
///////////////// Êëèêàáåëüíàÿ òåêñòîâàÿ http-ññûëêà â ëåâîì íèæíåì óãëó èíñòàëëåðà /////////////////

end;


[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030103F06000054504630F10B5457697A617264466F726D0A57697A61726 4466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C656674020 00B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010 D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724 E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C6963697457696 4746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E65725 06167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F74656 26F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4 578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B5 06167650D53656C656374446972506167650D4578706C69636974576964746803A1010E4578706C696369744865696768740 3ED0000F2020106544C6162656C064C6162656C31044C656674020003546F700270055769647468034801064865696768740 20D0743617074696F6E146E000000D0A0D0B0D181D0BFD0B0D0BAD183D0B9D182D0B520D0B220D0BFD0B0D0BFD0BAD18320D 18120D183D181D182D0B0D0BDD0BED0B2D0BBD0B5D0BDD0BED0B920D0B8D0B3D180D0BED0B920D0A1D182D0B0D0BBD0BAD0B 5D18020D097D0BED0B220D09FD180D0B8D0BFD18FD182D0B805436F6C6F720709636C42746E466163650C466F6E742E43686 172736574070F44454641554C545F434841525345540A466F6E742E436F6C6F720705636C5265640B466F6E742E486569676 87402F509466F6E742E4E616D6506065461686F6D610A466F6E742E5374796C650B000B506172656E74436F6C6F72080A506 172656E74466F6E74080B5472616E73706172656E7408000000F110544E65774E6F7465626F6F6B506167650952656164795 06167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F746 5626F6F6B506167650E496E7374616C6C696E67506167650D4578706C69636974576964746803A1010E4578706C696369744 8656967687403ED00000000F1065450616E656C094D61696E50616E656C00F10C544269746D6170496D6167651657697A617 264536D616C6C4269746D6170496D616765044C656674020005576964746803EF010C4578706C696369744C65667402000D4 578706C69636974576964746803EF010000F10E544E65775374617469635465787414506167654465736372697074696F6E4 C6162656C044C656674020003546F70023A0C4578706C696369744C65667402000B4578706C69636974546F70023A0000F10 E544E6577537461746963546578740D506167654E616D654C6162656C0557696474680305010D4578706C696369745769647 46803050100000000F110544E65774E6F7465626F6F6B506167650C46696E6973686564506167650D4578706C69636974576 964746803F1010E4578706C6963697448656967687403390100F10E544E6577537461746963546578740D46696E697368656 44C6162656C0743617074696F6E142E01000053696765726F7573204D6F6420D0B4D0BBD18F20434F5020D183D181D182D0B 0D0BDD0BED0B2D0BBD0B5D0BD20D0BDD0B020D092D0B0D18820D0BAD0BED0BCD0BFD18CD18ED182D0B5D1802E20D09FD180D 0B8D0BBD0BED0B6D0B5D0BDD0B8D0B520D0BCD0BED0B6D0BDD0BE20D0B7D0B0D0BFD183D181D182D0B8D182D18C20D18120D 0BFD0BED0BCD0BED189D18CD18E20D181D0BED0BED182D0B2D0B5D182D181D182D0B2D183D18ED189D0B5D0B3D0BE20D0B7D 0BDD0B0D187D0BAD0B02E0D0A0D0AD09DD0B0D0B6D0BCD0B8D182D0B520C2ABD097D0B0D0B2D0B5D180D188D0B8D182D18CC 2BB2C20D187D182D0BED0B1D18B20D0B2D18BD0B9D182D0B820D0B8D0B720D0BFD180D0BED0B3D180D0B0D0BCD0BCD18B20D 183D181D182D0B0D0BDD0BED0B2D0BAD0B82E0D0A0000000000

Devils Night
18-03-2012, 21:55
Как изменить иконку Uninstall.exe »
Вообще можно так:
[Setup]
SetupIconFile=icon.ico

или так:
[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}; IconFilename: icon.ico

Devils Night, вы бы уточнили, что это иконка ярлыка от деинсталлятора, а не самого файла »
Ну вообще то я сразу два варианта указал
1 вариант на сколько мне известно.
[Setup]
SetupIconFile=icon.icoИконка для инсталятора, она же идёт для деинсталятора unins000.exe.

Второй вариант
[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}; IconFilename: icon.icoгде путь прописывается к иконке.
Других вариантов не вижу.

Serega
18-03-2012, 22:03
можно поподробнее? »
Даже не знаю, суть вам объяснили, даже дали пример выше... осталось только готовый скрипт написать :)


[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Files]
Source: compiler:Examples\CodeAutomation.iss; DestDir: {app}; Check: InstallType1; Flags: ignoreversion
Source: compiler:Examples\CodeAutomation2.iss; DestDir: {app}; Check: InstallType2; Flags: ignoreversion


[Code]
var
ISCustomPage1: TWizardPage;
Label1: TLabel;
Label2: TLabel;
NewRadioButton1: TNewRadioButton;
NewRadioButton2: TNewRadioButton;

function InstallType1: Boolean;
begin
Result := NewRadioButton1.Checked;
end;

function InstallType2: Boolean;
begin
Result := NewRadioButton2.Checked;
end;

procedure Label1Click(Sender: TObject);
begin
NewRadioButton1.Checked := True;
end;

procedure Label2Click(Sender: TObject);
begin
NewRadioButton2.Checked := True;
end;

procedure InitializeWizard();
begin
{ Creates custom wizard page }
ISCustomPage1 := CreateCustomPage(wpWelcome, 'Тип установки', 'Выберите тип установки');

{ Label1 }
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Parent := ISCustomPage1.Surface;
AutoSize := False;
Caption := 'Тип №1' + #13#10#13#10 +
'Здесь пишем всякую муть про тип №1...';
OnClick := @Label1Click;
SetBounds(ScaleX(64), ScaleY(45), ScaleX(327), ScaleY(45));
end;

{ Label2 }
Label2 := TLabel.Create(WizardForm);
with Label2 do
begin
Parent := ISCustomPage1.Surface;
AutoSize := False;
Caption := 'Тип №2' + #13#10#13#10 +
'Здесь пишем всякую муть про тип №2...';
OnClick := @Label2Click;
SetBounds(ScaleX(64), ScaleY(136), ScaleX(327), ScaleY(45));
end;

{ NewRadioButton1 }
NewRadioButton1 := TNewRadioButton.Create(WizardForm);
with NewRadioButton1 do
begin
Parent := ISCustomPage1.Surface;
SetBounds(ScaleX(40), ScaleY(45), ScaleX(17), ScaleY(17));
end;

{ NewRadioButton2 }
NewRadioButton2 := TNewRadioButton.Create(WizardForm);
with NewRadioButton2 do
begin
Parent := ISCustomPage1.Surface;
SetBounds(ScaleX(40), ScaleY(136), ScaleX(17), ScaleY(17));
end;
end;


вот только одна мелочь странная,если мелкие файлы ,то их размер пишется правильно например 24.4 кб или 26.8мб,а крупные файлы почему,то 512.000000000БТ »
Видимо, что-то не так делаете, я даже не буду ничего спрашивать, скажу лишь одно, покажите скрипт.

FX-DENIS
18-03-2012, 23:21
Видимо, что-то не так делаете, я даже не буду ничего спрашивать, скажу лишь одно, покажите скрипт »

; Скрипт создан в Inno Setup Script Wizard
#define Components
#define MyAppName "Test Drive Unlimited 2"
#define MyAppVersion "v097 build 5"
#define MyAppPublisher "Eden Games,Atari."
#define MyAppURL "http://www.testdriveunlimited2.com/"
#define MyAppExeName "UpLauncher.exe"

[Setup]
; ПРИМЕЧАНИЕ: Значение AppId является уникальным для каждой программы.
; Не используйте одинаковые значения для разных программ.
; (Для создания уникальных значений используйте Инструменты | Генерация GUID.)
AppId={{24132856-6BC2-47AD-9551-C72EBCFE929B}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=D:\Games\{#MyAppName}
DefaultGroupName=Eden Games
OutputDir=F:\111111111111111_install
WizardStyle=modern
OutputBaseFilename=setup
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
LZMANumBlockThreads=2
LZMAUseSeparateProcess=yes
CompressionThreads=auto
SolidCompression=no
;Разбиение на диски
DiskSpanning=true
SlicesPerDisk=2
;Размер тома в байтах (здесь 1400 мегабайт)
DiskSliceSize=1540200000
ShowLanguageDialog=no
WizardImageBackColor=clBlack
TimeStampsInUTC=no
FlatComponentsList=false
AlwaysShowDirOnReadyPage=true
AlwaysShowGroupOnReadyPage=true
LanguageDetectionMethod=locale
UninstallDisplayIcon={app}\TDU2.ico
UninstallDisplayName=Test_Drive_Unlimited_2_v097_build_5_DEN
RestartIfNeededByRun=no
PrivilegesRequired=none
EnableDirDoesntExistWarning=no
DirExistsWarning=auto
ShowTasksTreeLines=yes
SetupIconFile=C:\Users\Den\Desktop\TDU2.ico
UsePreviousAppDir=false
ShowComponentSizes=yes
UserInfoPage=false
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
WizardImageFile=C:\Users\Den\Desktop\covers_376.bmp
WizardSmallImageFile=C:\Users\Den\Desktop\logo-paul.bmp
UsePreviousGroup=no
UsePreviousSetupType=no
UsePreviousTasks=no
UsePreviousUserInfo=no

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

[LangOptions]
LanguageName=russian
LanguageID=$0409
LanguageCodePage=0
DialogFontName=Arial
DialogFontSize=9
WelcomeFontName=Arial
WelcomeFontSize=16
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8
RightToLeft=no

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone

[Files]
Source: C:\Users\Den\Desktop\innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: F:\Test Drive Unlimited 2\*; DestDir: {app}; AfterInstall: Progress() ; Flags: ignoreversion recursesubdirs createallsubdirs
; ВАЖНО: Не используйте "Flags: ignoreversion" для системных файлов

[Icons]
Name: {group}\Test Drive Unlimited 2\{#MyAppName}; Filename: {app}\{#MyAppExeName}; IconFilename: {app}\TDU2.ico
Name: {group}\Test Drive Unlimited 2\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon; IconFilename: {app}\TDU2.ico; WorkingDir: {app}; Languages:

[Messages]
BeveledLabel=DEN 2011г.:%nhttp://3den.milivepage.ru/

[CustomMessages]
russian.Bt=Бт
russian.Kb=Кб
russian.Mb=Мб
russian.Gb=Гб
russian.Tb=Тб
russian.Pb=Пб
russian.Eb=Эб

[Registry]
; файл создан программой Converter v.0.1.3: 19 апреля 2011 г., в 10 час. 57 мин. 46 сек.
Root: HKLM; SubKey: SOFTWARE\Atari; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: AudioLib; ValueData: DirectSound; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: GUID; ValueData: ; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: InstallDir; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: ExePath; ValueData: {app}\TestDrive2.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: LauncherPat; ValueData: {app}\UpLauncher.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: Language; ValueData: Eng; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: UninstallExePath; ValueData: {{uninstallexe}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: GameProductVersion; ValueData: TDU2 v097; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: GameBuildVersion; ValueData: 5; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: NetworkNatType; ValueData: Strict:UdpBlocked; Flags: uninsdeletevalue uninsdeletekeyifempty
; затраченное время: 4 мсек.

[UninstallDelete]
Type: files; Name: {group}\{#MyAppName}
Type: files; Name: {group}\УДАЛИТЬ ИГРУ
Type: files; Name: {commondesktop}\{#MyAppName}; Tasks: desktopicon

[Code]
var
ProgressLabel, SizeLabel: TLabel;

function BytesToReadable(Bytes: Extended; Signs: Integer): string;
{ Перевод числа в значение Бт/Кб/Мб/Гб/Тб/Пб/Эб (Signs - количество знаков после запятой)}
var
ABytes: Extended;
i: Integer;
begin
i := 0;
ABytes := Bytes;
while Int(ABytes) >= 1024 do
begin
ABytes := ABytes/1024;
i := i + 1;
end;
case i of
0: Result := FloatToStr(Int(ABytes)) + Padl(ExpandConstant('{cm:Bt}'), 1); // Байт
1: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Kb}'), [ABytes]); // Килобайт
2: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Mb}'), [ABytes]); // Мегабайт
3: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Gb}'), [ABytes]); // Гигабайт
4: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Tb}'), [ABytes]); // Терабайт
// больше Терабайта конечно не пригодится, покрайней мере в ближайшее время, но всё же...
5: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Pb}'), [ABytes]); // Петабайт
6: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Eb}'), [ABytes]); // Эксабайт
end;
StringChange(Result, ',', '.');
end;

procedure Progress();
var
size: Integer;
begin
with WizardForm.ProgressGauge do
ProgressLabel.Caption := IntToStr((Position-Min)/((Max - Min)/100)) + '%';
FileSize(ExpandConstant(CurrentFileName), size);
SizeLabel.Caption := BytesToReadable(size, 1);
end;

procedure InitializeWizard();
begin
ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top := Top + Height + ScaleY(8);
ProgressLabel.Left := Left + Width/2 - ScaleX(8);
ProgressLabel.AutoSize := True;
ProgressLabel.Parent := WizardForm.InstallingPage;
end;

SizeLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
SizeLabel.Top := Top + Height + ScaleY(8);
SizeLabel.Left := Left;
SizeLabel.AutoSize := True;
SizeLabel.Parent := WizardForm.InstallingPage;
end;
end;

rasim933
18-03-2012, 23:28
Спасибо всем за все предыдущие ответы и советы!

Я перечитал литературу, но несмог найти что ищю.

Скажите пожалста, какой скрипт нужно написать, который непозволит деинсталятору удалить определённую папку (файл) и после окончания деинсталяции чтоб появлялось сообщение: "определённые парки не тронуты.".

boss911
18-03-2012, 23:33
Devils Night, вы бы уточнили, что это иконка ярлыка от деинсталлятора, а не самого файла Uninstall.exe.

alex_13_15, файлу Uninstall.exe задать свою иконку нельзя, разве что поменять ее самостоятельно и компилировать проект уже с этим деинсталлятором и не забыть прописать 'Uninstallable=false'. Не совсем красивый метод, но другого я не знаю.

Serega
19-03-2012, 00:04
FX-DENIS, дайте именно тот скрипт, в котором возникла ваша ошибка, а лучше всего залить архив на файлообменник, для теста. В скрипте, который вы приводите выше, ошибок не вижу.
Я перечитал литературу, но несмог найти что ищю. »
Так вы попытайтесь сформулировать более внятно, что вы собственно хотите.

rasim933
19-03-2012, 00:09
Попробую снова.

Установил игру. Запускаю деинстолятор. Ону даляет все файлы которые находятся в папке с игрой.

Мне нужен скрипт. Который недаст удалить нужную мне папку.

Пример: запусткаю деинстолятор, он удаляет все файлы кроме нужной мне папкии, выскакивает окно с надписью: такая-то папка небыла удалена.

Ivan_009
19-03-2012, 00:53
Как скрыть появление лого на странице установки

FX-DENIS
19-03-2012, 04:08
дайте именно тот скрипт, в котором возникла ваша ошибка, а лучше всего залить архив на файлообменник, для теста »
скрипт именно тот который вы мне дали,на скриншоте видно наглядно размер файла 512.00000000БТ,а в папке игры файл bigfile_RU_1.big весит 3.05 Гб,может инно не умеет такие большие распознавать?а смысл архив,если вы можете скопировать скрипт в блокнот и поменять на .iss :dont-know для теста и положить в папку Test Drive Unlimited 2 любые огромные файлы и убедиться.Врать мне нет смысла,потому,что это мне же нужно в первую очередь.Я не говорю,что вы мне чем то обязаны или должны ,просто помогите по человечески.Может убрать бт и кб,пусть пишет размеры типа 0.5 мб , 0.4 Гб,может это поможет.
И прикреплю сам скрипт,раз так надо для теста

Gnom_aka_Lexander
19-03-2012, 10:27
но другого я не знаю. »
[Setup]
UninstallIconFile=Icon.ico

Serega
19-03-2012, 13:24
Мне нужен скрипт. Который недаст удалить нужную мне папку. »
Вариаций может быть много...


[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
CreateDir(ExpandConstant('{app}\data'));
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usUninstall) and DirExists(ExpandConstant('{app}\data')) then
if MsgBox('Папка "' + ExpandConstant('{app}\data') + '" содержит ваши сохранения, желаете удалить и её?', mbInformation, MB_YESNO) = IDYES then
DelTree(ExpandConstant('{app}\data'), True, True, True);
end;


на скриншоте видно наглядно размер файла 512.00000000БТ »
Я вам сказал, что не тот скрипт, именно из-за того, что в конце увидел БТ. а не Бт.
Проблема ваша здесь:
а в папке игры файл bigfile_RU_1.big весит 3.05 Гб »

...
Only supports file sizes smaller than 2 GB
...

Для определения размера файла более 2ГБ, уже нужно писать свою функцию, чуть позже накидаю.

by_gangster
19-03-2012, 15:13
я хочу прописать в мой скрипт ещё вот этот,чем можно заменить procedure InitializeWizard(); а то меня в скрипте уже есть (при компиляции ругается)

[_code]
procedure InitializeWizard();
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('InnoCallback.dll');
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('Music.mp3');

BASS_Init(ExpandConstant('{tmp}\Music.mp3')) //Запускаем музыку
BASS_CreateOnOffButton(ExpandConstant('{tmp}\MusicButton.png'), 20, 320, 36, 36, 4) //Создаем кнопку вкл/выкл
end;

procedure DeinitializeSetup();
begin
BASS_DeInit; //Освобождаем процесс
gdipShutdown
end;

Serega
19-03-2012, 15:54
FX-DENIS, скрипт будет выглядеть так:


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

[CustomMessages]
ru.Bt=Бт
ru.Kb=Кб
ru.Mb=Мб
ru.Gb=Гб
ru.Tb=Тб
ru.Pb=Пб
ru.Eb=Эб

[Code]
var
ProgressLabel, SizeLabel: TLabel;

function BytesToReadable(Bytes: Extended; Signs: Integer): string;
{ Перевод числа в значение Бт/Кб/Мб/Гб/Тб/Пб/Эб (Signs - количество знаков после запятой)}
var
ABytes: Extended;
i: Integer;
begin
i := 0;
ABytes := Bytes;
while Int(ABytes) >= 1024 do
begin
ABytes := ABytes/1024;
i := i + 1;
end;
case i of
0: Result := FloatToStr(Int(ABytes)) + Padl(ExpandConstant('{cm:Bt}'), 1); // Байт
1: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Kb}'), [ABytes]); // Килобайт
2: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Mb}'), [ABytes]); // Мегабайт
3: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Gb}'), [ABytes]); // Гигабайт
4: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Tb}'), [ABytes]); // Терабайт
// больше Терабайта конечно не пригодится, покрайней мере в ближайшее время, но всё же...
5: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Pb}'), [ABytes]); // Петабайт
6: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Eb}'), [ABytes]); // Эксабайт
end;
StringChange(Result, ',', '.');
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;

function GetFileSize(const FileName: string): Extended;
var
FindRec: TFindRec;
begin
Result := 0;
if FindFirst(FileName, FindRec) then
try
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
Result := Size64(FindRec.SizeHigh, FindRec.SizeLow);
finally
FindClose(FindRec);
end;
end;

procedure Progress();
begin
with WizardForm.ProgressGauge do
ProgressLabel.Caption := IntToStr((Position-Min)/((Max - Min)/100)) + '%';
SizeLabel.Caption := BytesToReadable(GetFileSize(ExpandConstant(CurrentFileName)), 1);
end;

procedure InitializeWizard();
begin
ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top := Top + Height + ScaleY(8);
ProgressLabel.Left := Left + Width/2 - ScaleX(8);
ProgressLabel.AutoSize := True;
ProgressLabel.Parent := WizardForm.InstallingPage;
end;

SizeLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
SizeLabel.Top := Top + Height + ScaleY(8);
SizeLabel.Left := Left;
SizeLabel.AutoSize := True;
SizeLabel.Parent := WizardForm.InstallingPage;
end;
end;


чем можно заменить procedure InitializeWizard(); а то меня в скрипте уже есть (при компиляции ругается) »
Так объедините эти две процедуры, т.е. всё что написано в procedure InitializeWizard(); после слова begin, просто скопируйте в свою procedure InitializeWizard();

by_gangster
19-03-2012, 16:14
Serega, понятно спасибо

alex_13_15
19-03-2012, 17:51
Как сделать так чтобы файл копировался с заменой без предупреждений, автоматом

R.i.m.s.k.y.
19-03-2012, 17:54
alex_13_15, эээ флаг ignoreversion в секции Files, не?

alex_13_15
19-03-2012, 17:55
у меня при установке выдалось предупреждение что такой файл уже есть и его нельзя заменить,
и три кнопки "повторить" "пропустить" "прервать"

alert30
19-03-2012, 17:56
alex_13_15, значит у Вас какой-то файл поврежден...

alex_13_15
19-03-2012, 17:57
всё нормально я немного в скрипте ошибся




© OSzone.net 2001-2012