Подскажите пожалуста, как к кнопке привязать текстуру(в FreeArc скрипте). Заранее спасибо.
[more=Пример скрипта]
#define MyAppName "Left 4 Dead 2"
#define MyAppVerName "Left 4 Dead 2"
#define MyAppPublisher "Bioscorpius&CDSerg™"
#define MyAppExeName "left4dead2.exe"
[Setup]
AppId={{D3A09036-101B-4D68-88B9-9C126FD24BC6}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
DisableReadyPage=true
DisableProgramGroupPage=true
ShowLanguageDialog=yes
OutputBaseFilename=setup
OutputDir=G:\TEST
VersionInfoCopyright={#MyAppPublisher}
DiskSpanning=false
DiskSliceSize=1556925645
SlicesPerDisk=3
UninstallDisplayIcon=
SetupIconFile=C:\Documents and Settings\Admin\Мои документы\Иконки\10 - IXbox 360.ico
DefaultGroupName={#MyAppName}
UninstallFilesDir={app}\Unistall
InternalCompressLevel=ultra
Compression=lzma/ultra
DisableStartupPrompt=true
[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=сек
[Files]
;Source: .arc; DestDir: {app}; Flags: nocompression
Source: 1.bmp; DestDir: {tmp}; Flags: dontcopy
;Размер 640х400
Source: Button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
[UninstallDelete]
Type: filesandordirs; Name: {app}
[Run]
Filename: {src}\DirectX\dxsetup.exe; WorkingDir: {src}\DirectX\; StatusMsg: Обновление DirectX; Check: InstallDirectX; Flags: skipifdoesntexist
Filename: {src}\Redist\vcredist_x86.exe; WorkingDir: {src}\Redist; StatusMsg: Установка Microsoft C++; Check: InstallRedist; Flags: skipifdoesntexist; Parameters: /q; Languages:
[Code]
const
Archives = '{src}\*.bin'; // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно
PM_REMOVE = 1;
CP_ACP = 0; CP_UTF8 = 65001;
oneMb = 1048576;
NeedSize = 10000;
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
DirectX, Redist,Icons, Group: TCheckBox;///Чекбоксы
lblDirectX, lblRedist,lblIcons, lblGroup: TLabel;///Надписи к чекбоксам
WelcomeLabel,SelectDirBrowseLabel,StatusLabel,FinishedLabel, FinishedHeadingLabel : TLabel;///Страницы
BmpFile: TBitmapImage; //Вставка Изображения В окно Инсталятора
FreeMB, TotalMB: Cardinal; //Нужное Место На диске
NeedSpaceLabel,FreeSpaceLabel: TLabel;//Место на диске
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 NoIconsLabelOnClick (Sender: TObject);
begin
WizardForm.NoIconsCheck.Checked:=Not(WizardForm.NoIconsCheck.Checked)
end;
procedure RedistOnClick(Sender: TObject);
begin
if Redist.Checked = False then
Redist.Checked:= True else
Redist.Checked:= False;
end;
procedure lblDirectXOnClick(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 GroupOnClick(Sender: TObject);
begin
if Group.Checked = False then
Group.Checked:= True else
Group.Checked:= False;
end;
function InstallDirectX: Boolean;
begin
Result:= DirectX.Checked;
end;
function InstallRedist: Boolean;
begin
Result:=Redist.Checked;
end;
function CreateIcons: Boolean;
begin
Result:=Icons.Checked;
end;
function GroupIcons: Boolean;
begin
Result:=Group.Checked;
end;
////Место
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;
////Место
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 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;
//******************************************* [Начало - Текстурирование кнопок] ***************************************************//
const
ButtonWidth = 80; //Указываем размер кнопок
ButtonHeight = 23;
bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
var
ButtonPanel: array [0..4] of TPanel;
ButtonImage: array [0..4] of TBitmapImage;
ButtonLabel: array [0..4] of TLabel;
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 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:=160 //Обязательно прописать оригинальный размер рисунка
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
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.OnMouseDown:=@ButtonLabelMouseDown
Labl.OnMouseUp:=@ButtonLabelMouseUp
Labl.Parent:=Panel
ButtonLabel[AButtonIndex]:=Labl
end;
procedure UpdateButton(AButton: TButton;AButtonIndex: integer);
begin
ButtonLabel[AButtonIndex].Caption:=AButton.Caption
ButtonPanel[AButtonIndex].Visible:=AButton.Visible
ButtonLabel[AButtonIndex].Enabled:=Abutton.Enabled
end;
procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=True
end;
procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
ButtonLabel[bidNext].Enabled:=False
end;
procedure CurPageChanged2(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
ButtonLabel[bidBack].Left := (ButtonPanel[bidBack].Width / 2 - ButtonLabel[bidBack].Width / 2);
ButtonLabel[bidNext].Left := (ButtonPanel[bidNext].Width / 2 - ButtonLabel[bidNext].Width / 2);
ButtonLabel[bidCancel].Left := (ButtonPanel[bidCancel].Width / 2 - ButtonLabel[bidCancel].Width / 2);
ButtonLabel[bidDirBrowse].Left := (ButtonPanel[bidDirBrowse].Width / 2 - ButtonLabel[bidDirBrowse].Width / 2);
ButtonLabel[bidGroupBrowse].Left := (ButtonPanel[bidGroupBrowse].Width / 2 - ButtonLabel[bidGroupBrowse].Width / 2);
end;
procedure InitializeWizard2();
begin
WizardForm.BackButton.Left:=385
WizardForm.BackButton.Top:=340
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight
WizardForm.NextButton.Left:=468
WizardForm.NextButton.Top:=340
WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight
WizardForm.CancelButton.Left:=550
WizardForm.CancelButton.Top:=340
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight
WizardForm.DirBrowseButton.Left:=380
WizardForm.DirBrowseButton.Top:=170
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight
WizardForm.GroupBrowseButton.Left:=337
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight
WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick
WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick
ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
///////Скрытие Обьектов с инсталлера
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
DiskSpaceLabel.Hide;
SelectDirBitmapImage.Hide;
SelectDirBrowseLabel.Hide;
SelectDirLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
MainPanel.Hide
FilenameLabel.Hide;
StatusLabel.Hide;
SelectStartMenuFolderLabel.Hide;
SelectStartMenuFolderBrowseLabel.Hide;
ReadyLabel.Hide;
LicenseLabel1.Hide;
end;
///////Скрытие Обьектов с инсталлера
end;
/////Текстурирование кнопок
////Размер окна инсталлера
procedure InitializeWizard3();
begin
WizardForm.Width:=640;
WizardForm.Height:=400;
end;
////Размер окна инсталлера
///Место
procedure InitializeWizard4();
begin
WizardForm.DiskSpaceLabel.Hide;
ExtractTemporaryFile('1.bmp');//Извлечение Файлов Которые Идут В окно Инсталятора
//Вставка изображений в окно инсталятора
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 640, 400);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 640, 400);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.LicensePage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 640, 400);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.SelectDirPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 640, 400);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.InstallingPage;
BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
BmpFile.SetBounds(0, 0, 640, 400);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.FinishedPage;
BmpFile:= TBitmapImage.Create(WizardForm);
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Transparent:= true;
Font.Style:= [fsbold,fsitalic];
Font.Size:= 9;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Left := ScaleX(5);
Top := ScaleY(325);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 7.5 GB';
end;
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Transparent:= true;
Font.Style:= [fsbold,fsitalic];
Font.Size:= 9;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Left := ScaleX(5);
Top := ScaleY(345);
Width := ScaleX(209);
Height := ScaleY(13);
end;
WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
with WizardForm do
begin
InnerNotebook.Left := ScaleX(0);
InnerNotebook.Top := ScaleY(0);
InnerNotebook.Width := ScaleX(640);
InnerNotebook.Height := ScaleY(400);
OuterNotebook.Left := ScaleX(0);
OuterNotebook.Top := ScaleY(0);
OuterNotebook.Width := ScaleX(640);
OuterNotebook.Height := ScaleY(400);
end;
with WizardForm do
begin
DirEdit.Left:= DirEdit.Left + ScaleX(40);
DirEdit.Top:= DirEdit.Top + ScaleY(90);
DirEdit.Color:=clWhite;
ProgressGauge.Top:=ScaleY(200);
ProgressGauge.Left:=ScaleX(100);
end;
WelcomeLabel:= TLabel.Create(WizardForm);
with WelcomeLabel do
begin
Left:= ScaleX(75);
Top:= ScaleY(45);
Width:= ScaleX(601);
Height:= ScaleY(654);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Size:= 17;
Font.Name:= 'Constantia';
Font.Color:=ClWhite //Цвет Текста !!!
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.WelcomePage;
Caption:= 'Вас приветствует Мастер установки игры'
end;
WelcomeLabel:= TLabel.Create(WizardForm);
with WelcomeLabel do
begin
Left:= ScaleX(220);
Top:= ScaleY(75);
Width:= ScaleX(601);
Height:= ScaleY(654);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Size:= 17;
Font.Name:= 'Constantia';
Font.Color:=ClWhite //Цвет Текста !!!
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.WelcomePage;
Caption:= '{#MyAppName}'
end;
WelcomeLabel:=TLabel.Create(WizardForm);
with WelcomeLabel do
begin
Top:= ScaleY(140);
Left:= ScaleX(30);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 13;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.WelcomePage;
Caption:= 'Программа установит игру "{#MyAppName}" на ваш компьютер.'
end;
WelcomeLabel:=TLabel.Create(WizardForm);
with WelcomeLabel do
begin
Top:= ScaleY(180);
Left:= ScaleX(35);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 13;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.WelcomePage;
Caption:= 'Рекомендуется закрыть антивирусные пакеты,а также все' + #10 + 'прочие приложения перед тем,как продолжить.'
end;
WelcomeLabel:=TLabel.Create(WizardForm);
with WelcomeLabel do
begin
Top:= ScaleY(240);
Left:= ScaleX(35);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 13;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.WelcomePage;
Caption:= 'Нажмите «Далее»,чтобы продолжить,или «Отмена»,' + #10 + 'чтобы выйти из программы установки.'
end;
SelectDirBrowseLabel:=TLabel.Create(WizardForm);
with SelectDirBrowseLabel do
begin
Top:= ScaleY(5);
Left:= ScaleX(15);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 12;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsBold]
Parent:= WizardForm.SelectDirPage;
Caption:= 'Выбор папки установки'
end;
SelectDirBrowseLabel:=TLabel.Create(WizardForm);
with SelectDirBrowseLabel do
begin
Top:= ScaleY(28);
Left:= ScaleX(30);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 12;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.SelectDirPage;
Caption:= 'В какую папку Вы хотите установить "{#MyAppName}" .'
end;
SelectDirBrowseLabel:=TLabel.Create(WizardForm);
with SelectDirBrowseLabel do
begin
Top:= ScaleY(80);
Left:= ScaleX(40);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 12;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.SelectDirPage;
Caption:= 'Программа установит игру "{#MyAppName}" в следующую папку'
end;
SelectDirBrowseLabel:=TLabel.Create(WizardForm);
with SelectDirBrowseLabel do
begin
Top:= ScaleY(115);
Left:= ScaleX(40);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 12;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.SelectDirPage;
Caption:= 'Нажмите «Установить»,чтобы продолжить.Если вы хотите выбрать' + #10 + 'другую папку,нажмите «Обзор»'
end;
FinishedHeadingLabel:=TLabel.Create(WizardForm);
with FinishedHeadingLabel do
begin
Top:= ScaleY(45);
Left:= ScaleX(55);
Width:= ScaleX(601);
Height:= ScaleY(653);
AutoSize:= false;
WordWrap:= true;
Font.Size:= 17;
Font.Color:=ClWhite
Font.Style := [fsBold]
Font.Name:= 'Constantia';
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= 'Установка игры "{#MyAppName}" успешно'
end;
FinishedHeadingLabel:=TLabel.Create(WizardForm);
with FinishedHeadingLabel do
begin
Top:= ScaleY(70);
Left:= ScaleX(250);
Width:= ScaleX(601);
Height:= ScaleY(653);
AutoSize:= false;
WordWrap:= true;
Font.Size:= 17;
Font.Color:=ClWhite
Font.Style := [fsBold]
Font.Name:= 'Constantia';
Transparent:= true;
Parent:= WizardForm.FinishedPage;
Caption:= 'завершена'
end;
FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do
begin
Left:= ScaleX(30);
Top:= ScaleY(136);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 13;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.FinishedPage;
Caption:= 'Игра "{#MyAppName}" была успешно установлена на Ваш' + #10 + 'компьютер.Для её запуска выберите соответствующий' + #10 + 'значок в меню "Пуск" или запустите с ярлыка на рабочем' + #10 + 'столе.'
end;
FinishedLabel:= TLabel.Create(WizardForm);
with FinishedLabel do
begin
Left:= ScaleX(30);
Top:= ScaleY(230);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 13;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.FinishedPage;
Caption:= 'Нажмите «Завершить»,чтобы выйти из программы' + #10 + 'установки.'
end;
StatusLabel:=TLabel.Create(WizardForm);
with StatusLabel do
begin
Top:= ScaleY(5);
Left:= ScaleX(15);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 12;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsBold]
Parent:= WizardForm.installingpage;
Caption:= 'Установка...'
end;
StatusLabel:=TLabel.Create(WizardForm);
with StatusLabel do
begin
Top:= ScaleY(30);
Left:= ScaleX(15);
Width:= ScaleX(600);
Height:= ScaleY(200);
AutoSize:= false;
WordWrap:= true;
Transparent:= true;
Font.Size:= 12;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsBold,fsitalic]
Parent:= WizardForm.installingpage;
Caption:= 'Пожалуйста, подождите, пока игра установится на Ваш компьютер.'
end;
ExtractFile:= TLabel.Create(WizardForm);
with ExtractFile do
begin
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 50;
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Size:= 10;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;
//lblExtractFileName: TLabel;
lblExtractFileName:= TLabel.Create(WizardForm);
with lblExtractFileName do
begin
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 70;
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Size:= 10;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;
DirectX:= TCheckBox.Create(WizardForm);
with DirectX do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 75;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 0;
Checked:= True;
end;
lblDirectX:= TLabel.Create(WizardForm);
with lblDirectX do
begin
Caption:='Обновить DirectX';
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 75;
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Size:= 10;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @lblDirectXOnClick;
end;
Redist:= TCheckBox.Create(WizardForm);
with Redist do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 95;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 1;
Checked:= True;
end;
lblRedist:= TLabel.Create(WizardForm);
with lblRedist do
begin
Caption:='Установить Microsoft C++';
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 95;
Width:= ScaleX(150);
Height:= ScaleY(13);
Transparent := True;
Font.Size:= 10;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Parent:= WizardForm.SelectDirPage;
OnClick:= @RedistOnClick;
end;
Icons:= TCheckBox.Create(WizardForm);
with Icons do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 2;
Checked:= True;
end;
lblIcons:= TLabel.Create(WizardForm);
with lblIcons do
begin
Caption:='Добавить ярлык на Рабочий стол';
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 35;
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Size:= 10;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @IconsOnClick;
end;
Group:= TCheckBox.Create(WizardForm);
with Group do
begin
Parent:= WizardForm.SelectDirPage;
Left:= WizardForm.DirEdit.Left;
Top:= WizardForm.DirEdit.Top + 55;
Width:= ScaleX(14);
Height:= ScaleY(14);
TabOrder:= 3;
Checked:= True;
end;
lblGroup:= TLabel.Create(WizardForm);
with lblGroup do
begin
Caption:='Добавить ярлык в меню "Пуск"';
Left:= WizardForm.DirEdit.Left + 20;
Top:= WizardForm.DirEdit.Top + 55;
Width:= ScaleX(150);
Height:= ScaleY(13);
Font.Size:= 10;
Font.Name:= 'Constantia';
Font.Color:=ClWhite
Font.Style := [fsbold,fsitalic]
Transparent := True;
Parent:= WizardForm.SelectDirPage;
OnClick:= @GroupOnClick;
end;
end;
///Место
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
begin
WizardForm.NextButton.Caption:='Установить';
end;
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
end;
[/more]