Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: Qarma
Дата сообщения: 15.04.2009 21:39
spider91

Забыл сказать спасибо!)
Автор: doombuster
Дата сообщения: 15.04.2009 21:41
Разместите потом пример скрипта, и я тоже скажу спасибо)
Автор: Qarma
Дата сообщения: 15.04.2009 21:46
Собственно вот....
[more][Setup]
AppName=Lost Planet Colonies
AppVerName=Lost Planet Colonies
DefaultDirName=D:\Games\Lost Planet Colonies
OutputBaseFilename=Setup
Compression=lzma/ultra64
SolidCompression=yes
DiskSpanning=true
SlicesPerDisk=3
DiskSliceSize=1100000000
InternalCompressLevel=ultra64
OutputDir=D:\test\lp_ce
WizardImageFile=D:\test\lp.bmp
WizardSmallImageFile=D:\test\lp_small.bmp
DisableProgramGroupPage=true
DefaultGroupName=Lost Planet Colonies
VersionInfoVersion=1.0.0.0
DirExistsWarning=no
DisableReadyPage=true
AppVersion=1.0.0.0
UninstallDisplayName=Lost Planet Colonies


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


[LangOptions]
WelcomeFontSize=10


[Icons]
Name: "{group}\Lost Planet Colonies"; Filename: "{app}\LPCLauncher.exe"; WorkingDir: "{app}";

Name: "{group}\Удалить игру"; Filename: "{uninstallexe}";
Name: "{userdesktop}\Lost Planet Colonies"; Filename: "{app}\LPCLauncher.exe"; WorkingDir: "{app}";

[Files]
Source:"D:\test\logo.bmp";DestDir:{tmp};Flags: dontcopy nocompression solidbreak
Source: "D:\Games\Lost Planet Colonies\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension
Source: D:\test\NOCOMP\ZZPack1.exe; DestDir: {app}; AfterInstall: Arc1; Flags: ignoreversion createallsubdirs recursesubdirs nocompression
[Code]

//////////////
var
PageNameLabel, PageDescriptionLabel: TLabel;
DesktopIcon: TCheckBox;
LogoImage:TBitmapImage;
LogoPanel: TPanel;
LogoLabel: TLabel;
const
NeedSize = 7760;

var
FreeMB, TotalMB: Cardinal;

NeedSpaceLabel, FreeSpaceLabel: TLabel;
ExtractFile:TNewStaticText;

/////////

function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.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';

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := false
else
WizardForm.NextButton.Enabled := true;
end;


//////////
procedure LogoLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://kirovmedia.ru/forum', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
TimerID: LongWord;
pfunc: LongWord;
Label1:tlabel;


procedure InitializeWizard();

var
WLabel1, WLabel2: TLabel;
FLabel1, FLabel2: TLabel;
begin
DesktopIcon := TCheckBox.Create(WizardForm);
DesktopIcon.Parent := WizardForm.SelectDirPage;
DesktopIcon.Caption := 'Добавить ярлык на рабочий стол';
DesktopIcon.Left := ScaleX(0);
DesktopIcon.Top := ScaleY(WizardForm.DirEdit.Top + 35);
DesktopIcon.Width := ScaleX(400);
DesktopIcon.Height := ScaleY(15);
DesktopIcon.TabOrder := 0;
DesktopIcon.Checked := True;



////////////
FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(76);
FLabel2.Left := ScaleX(176);
FLabel2.Width := ScaleX(301);
FLabel2.Height := ScaleY(53);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;
FLabel2.Font.Color:= clblack;
FLabel2.ShowAccelChar := False;
FLabel2.Caption := 'Программа установлена на Ваш компьютер.' #13#13
'Нажмите «Завершить», чтобы выйти из программы установки.';
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage



WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.WizardBitmapImage.Width := WizardForm.Width;
WizardForm.WizardBitmapImage.Height := WizardForm.Height;

WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(54);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 12;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clblack;
WLabel1.ShowAccelChar := False;
WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;

WLabel2:=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(76);
WLabel2.Left := ScaleX(176);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Color:= clblack;
WLabel2.ShowAccelChar := False;
WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;


WizardForm.WizardBitmapImage2.Width := WizardForm.Width;
WizardForm.WizardBitmapImage2.Height := WizardForm.Height;

FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(176);
FLabel1.Top := ScaleY(16);
FLabel1.Width := ScaleX(301);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 12;
FLabel1.Font.Style := [fsBold];
FLabel1.Font.Color:= clblack;
FLabel1.ShowAccelChar := False;
FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;


begin
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedHeadingLabel.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.WizardBitmapImage.Width := WizardForm.Width;
WizardForm.WizardBitmapImage.Height := WizardForm.Height;

WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(176);
WLabel1.Top := ScaleY(16);
WLabel1.Width := ScaleX(301);
WLabel1.Height := ScaleY(100);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Font.Size := 12;
WLabel1.Font.Style := [fsBold];
WLabel1.Font.Color:= clblack;
WLabel1.ShowAccelChar := False;
WLabel1.Caption := WizardForm.WelcomeLabel1.Caption;
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;

WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Top := ScaleY(76);
WLabel2.Left := ScaleX(176);
WLabel2.Width := ScaleX(301);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Font.Color:= clblack;
WLabel2.ShowAccelChar := False;
WLabel2.Caption := WizardForm.WelcomeLabel2.Caption;
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;

WizardForm.WizardBitmapImage2.Width := WizardForm.Width;
WizardForm.WizardBitmapImage2.Height := WizardForm.Height;

FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(176);
FLabel1.Top := ScaleY(16);
FLabel1.Width := ScaleX(301);
FLabel1.Height := ScaleY(54);
FLabel1.AutoSize := False;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 12;
FLabel1.Font.Style := [fsBold];
FLabel1.Font.Color:= clblack;
FLabel1.ShowAccelChar := False;
FLabel1.Caption := WizardForm.FinishedHeadingLabel.Caption;
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;

FLabel2 :=TLabel.Create(WizardForm);
FLabel2.Top := ScaleY(76);
FLabel2.Left := ScaleX(176);
FLabel2.Width := ScaleX(301);
FLabel2.Height := ScaleY(77);
FLabel2.AutoSize := False;
FLabel2.WordWrap := True;
FLabel2.Font.Color:= clblack;
FLabel2.ShowAccelChar := False;
FLabel2.Caption := 'Программа установлена на Ваш компьютер.' #13#13
'Нажмите «Завершить», чтобы выйти из программы установки.';
FLabel2.Transparent := True;
FLabel2.Parent := WizardForm.FinishedPage;
end;
//////////


////////
begin

WizardForm.DiskSpaceLabel.Hide;
NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do

begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);



Caption := 'Требуется место на диске: 7,57 GB' ;
end;
////////////
begin
begin
WizardForm.WizardSmallBitmapImage.Left:=0;
WizardForm.WizardSmallBitmapImage.Width:=497;
WizardForm.WizardSmallBitmapImage.Height:=58;
WizardForm.PageDescriptionLabel.Width:=300;
WizardForm.PageNameLabel.Width:=300;
end ;
begin
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(45);
Top := ScaleY(10);
Width := ScaleX(300);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clwhite;
Font.Style := [fsBold];
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(45);
Top := ScaleY(25);
Width := ScaleX(475);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clwhite;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
end;
end;

////////////IntToStr(NeedSize) + ' GB'
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;




WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

/////////////////
begin
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(8);
Top := ScaleY(327);
Width := ScaleX(120);
Height := ScaleY(28);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
ExtractTemporaryFile('logo.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoLabelOnClick;
end;
end;
end;

procedure Arc1;
var
res:Integer;
s,s1:string;
begin
s:=ExpandConstant('{app}')+'\ZZPack1.exe';
s1:=ExpandConstant('{app}\Papka\');
Exec(s, '-x -y -dp"'+ s1 + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
DeleteFile(ExpandConstant('{app}\ZZPack1.exe'));
end;

///procedure animateprogress;
///begin ProgressBar1.Position := ProgressBar1.Position+1
///end;

///ProgressBar1 := TNewProgressBar.Create(wizardform);
////with ProgressBar1 do
////begin
////Parent := wizardform.installingpage;
////Left := wizardform.progressgauge.left;
////Top := wizardform.progressgauge.top+wizardform.progressgauge.height+15;
///Width := wizardform.progressgauge.width;
///Height := wizardform.progressgauge.height;
///Max :=11; //задается как кол-во файлов в [_run]
///end;
procedure CurPageChanged(CurPageID: Integer);

begin

PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;

if CurPageID = wpSelectDir

then begin
WizardForm.NextButton.Caption:='Установить';
if FreeMB < NeedSize
then WizardForm.NextButton.Enabled:=False;

end;
end;

[/more]
Автор: msatmb
Дата сообщения: 15.04.2009 21:46

Цитата:
мм...тут смотри, там полный скрипт игры...очень даже не плохой скрипт...

Хех, я рад что комуто понадобился скрипт Кстати могу выложить скрипт в котором архивы не копируются, а берутся из корневой папки, и вообще немного доработан.
Автор: doombuster
Дата сообщения: 15.04.2009 21:48
Qarma
Прогрессбар то не прикручен к архиву?

msatmb
Пожалуйста выложи, если бар рабочий
Автор: spider91
Дата сообщения: 15.04.2009 21:49
msatmb


давай. и еще если знаеш скажи пож как сделать окно инно подвижным во время процедур и установки кодеков
Автор: doombuster
Дата сообщения: 15.04.2009 21:59
Qarma
Ты скрипт Лост Планет только для примера выложил? Ведь другая игра будет паковатся?
Автор: Qarma
Дата сообщения: 15.04.2009 22:00
doombuster
Я его делаю щас)
Автор: doombuster
Дата сообщения: 15.04.2009 22:05
Qarma
Я где-то читал, что архивированный Лост Планет свободно влезает на 1 DVD5
Автор: msatmb
Дата сообщения: 15.04.2009 22:08
doombuster

Цитата:
Пожалуйста выложи, если бар рабочий

Рабочий. Только он показывает не кол-во разархивированных файлов, как с 7zip от Expeditor`a, а количество распакованных архивов.

Цитата:
давай. и еще если знаеш скажи пож как сделать окно инно подвижным во время процедур и установки кодеков

Если чесно не заморачивался этим Да и не такой уж я программер, все у людей на форуме спрашивал
[more]
#define MyAppName "Морской охотник"
#define MyAppVerName "Морской охотник"
#define MyAppExeName "PT-Boats.exe"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\Akella Games\{#MyAppName}
DefaultGroupName=Akella Games\{#MyAppName}
AllowNoIcons=no
OutputDir=D:\MyInno_Script\Морской охотник\
OutputBaseFilename=setup
Compression=lzma/ultra64
SolidCompression=true
DiskSpanning=true
DiskClusterSize=4096
DiskSliceSize=1735040064
WizardImageFile=D:\MyInno_Script\Морской охотник\scripts\big.bmp
WizardSmallImageFile=D:\MyInno_Script\Морской охотник\scripts\small.bmp
WindowVisible=no
WindowShowCaption=no
WindowResizable=no
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyPage=yes
UninstallDisplayIcon={app}\{#MyAppExeName}
SetupIconFile=D:\MyInno_Script\Морской охотник\Scripts\icon.ico


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

[Files]
Source: "D:\MyInno_Script\archives_soft\arc.exe"; DestDir: "{tmp}"; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
Source: "D:\MyInno_Script\vtv\scripts\BASS.dll"; DestDir: "{tmp}"; Flags: dontcopy ignoreversion; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
Source: "D:\MyInno_Script\Морской охотник\scripts\main_theme.mp3"; DestDir: "{tmp}"; Flags: dontcopy ignoreversion; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
Source: D:\MyInno_Script\Морской охотник\Local Settings\Aplication Data\*; DestDir: {localappdata}; OnlyBelowVersion: 0,5.1; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath
Source: D:\MyInno_Script\Морской охотник\Морской Охотник\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; BeforeInstall: HideInstallPath; AfterInstall: ShowInstallPath

[Run]
Filename: "{tmp}\Arc.exe"; Parameters: "x -y -dp""{app}\GameData"" ""{src}\setup-2.bin"""; StatusMsg: "Идет восстановление окружающего мира..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -y -dp""{app}\GameData"" ""{src}\setup-3.bin"""; StatusMsg: "Идет восстановление моделей кораблей..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -y -dp""{app}\GameData"" ""{src}\setup-4.bin"""; StatusMsg: "Идет восстановление звукового окружения..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{tmp}\Arc.exe"; Parameters: "x -y -dp""{app}\GameData"" ""{src}\setup-5.bin"""; StatusMsg: "Идет восстановление моделей оружия..."; Flags: runhidden; Afterinstall: animateprogress
Filename: "{src}\Drivers\Ageia\PhysX.exe"; Parameters: "/quiet"; StatusMsg: "Установка: NVIDIA PhysX System Software..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp1
Filename: "{src}\Drivers\VCRedist\vcredist_x86.exe"; Parameters: "/q"; StatusMsg: "Установка: Microsoft Visual C++ 2005..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp2
Filename: "{src}\Drivers\codec\XviD-1.1.3.exe"; Parameters: "/verysilent /nocancel"; StatusMsg: "Установка: XviD кодек..."; Flags: runhidden; Afterinstall: animateprogress; Check: customComp3

[Registry]
Root: HKLM; Subkey: "SOFTWARE\Akella"; Flags: uninsdeletekey
Root: HKLM; Subkey: "SOFTWARE\Akella\PTBoats"; ValueName: "Install Dir"; ValueType: String; ValueData: "{app}"; Flags: uninsdeletevalue


[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {group}\Руководство; Filename: {app}\manual.pdf; WorkingDir: {app}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; WorkingDir: {app}; IconFilename: {app}\{#MyAppExeName}


[Messages]
BeveledLabel=Repack by MSA
StatusExtractFiles=Копирование файлов
WizardSelectDir=Выбор папки установки и дополнительных задач
SelectDirDesc=Выберите целевую директорию и дополнительные задачи, которые должны выполниться во время установки
UninstalledAll=Удаление завершено
ConfirmUninstall=Удалить %1?

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

[Code]
type
HSTREAM = DWORD;

const
NeedSize = 1800;
BASS_SAMPLE_LOOP = 4;

var
DesktopIcon,Comp1,Comp2,Comp3: TCheckBox;
PageNameLabel, PageDescriptionLabel: TLabel;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;
ProgressBar1: TNewProgressBar;
AppDir: string; ResultCode: Integer;

function BASS_Init(device: Integer; freq, flags: DWORD; win: hwnd; CLSID: Integer): Boolean;
external 'BASS_Init@files:BASS.dll stdcall delayload';

function BASS_StreamCreateFile(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): HSTREAM;
external 'BASS_StreamCreateFile@files:BASS.dll stdcall delayload';

function BASS_Start(): Boolean;
external 'BASS_Start@files:BASS.dll stdcall delayload';

function BASS_ChannelPlay(handle: DWORD; restart: BOOL): Boolean;
external 'BASS_ChannelPlay@files:BASS.dll stdcall delayload';

function BASS_Stop(): Boolean;
external 'BASS_Stop@files:BASS.dll stdcall delayload';

function BASS_Free(): Boolean;
external 'BASS_Free@files:BASS.dll stdcall delayload';

function MakeDesktopIcon: Boolean;
begin
Result:=DesktopIcon.Checked;
end;

Function customComp1:Boolean;
begin
Result:=Comp1.Checked;
end;
Function customComp2:Boolean;
begin
Result:=Comp2.Checked;
end;
Function customComp3:Boolean;
begin
Result:=Comp3.Checked;
end;

procedure HideInstallPath();
begin
WizardForm.FileNameLabel.Visible := False;
end;
//*******//
procedure ShowInstallPath();
begin
WizardForm.FileNameLabel.Visible := True;
end;

procedure ReadEntries();
begin
    RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Akella\PTBoats', 'Install Dir', AppDir);
end;

procedure animateprogress;
begin ProgressBar1.Position := ProgressBar1.Position+1
end;

function InitializeSetup(): Boolean;
var
Exe: string;
begin
Exe:='PT-Boats.exe';
if (RegValueExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Akella\PTBoats', 'Install Dir')) then
begin
ReadEntries;
case (MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' уже найдена на Вашем компьютере. Запустить игру?', mbConfirmation, MB_YESNOCANCEL or MB_DEFBUTTON3)) of
IDYES:
begin
if (FileExists(AddBackslash(AppDir) + Exe)) then
begin
Exec(AddBackslash(AppDir) + Exe, '', ExtractFilePath(AddBackslash(AppDir) + Exe), SW_SHOW, ewNoWait, ResultCode);
end else begin
MsgBox('Невозможно запустить ' + '{#SetupSetting("AppName")}' + ', т.к. исполняемый файл программы не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1);
end
Result:=False;
end
IDNO:
begin
Result:=True;
end
IDCANCEL:
begin
Result:=False;
end
end
end else begin
Result:=True;
end
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 InitializeWizard();
var
Name1: string;
    i: Integer;
begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('main_theme.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\main_theme.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
    begin
BASS_ChannelPlay(i, True);
end;
end;
DesktopIcon := TCheckBox.Create(WizardForm);
with DesktopIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Добавить ярлык на рабочий стол';
Left := ScaleX(0);
Top := ScaleY(175);
Width := ScaleX(400);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
PageNameLabel := TLabel.Create(WizardForm);
with PageNameLabel do
begin
Left := ScaleX(10);
Top := ScaleY(10);
Width := ScaleX(350);
Height := ScaleY(14);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
Font.Style := [fsBold];
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;

PageDescriptionLabel := TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left := ScaleX(15);
Top := ScaleY(25);
Width := ScaleX(330);
Height := ScaleY(30);
AutoSize := False;
WordWrap := True;
Font.Color := clWhite;
ShowAccelChar := False;
Transparent := True;
Parent := WizardForm.MainPanel;
end;
begin
WizardForm.BorderStyle := bsDialog;
end;
with WizardForm do
begin
PageNameLabel.Hide;
PageDescriptionLabel.Hide;
with MainPanel do
begin
with WizardSmallBitmapImage do
begin
Left := ScaleX(0);
Top := ScaleY(0);
Width := Mainpanel.Width;
Height := MainPanel.Height;
end;
end;
end;
begin
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: 1,8 GB';
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Left := wizardform.progressgauge.left;
Top := wizardform.progressgauge.top+wizardform.progressgauge.height+15;
Width := wizardform.progressgauge.width;
Height := wizardform.progressgauge.height;
Max :=4; //задается как кол-во файлов в [_run]
end;

Comp3 := TCheckBox.Create(WizardForm);
with Comp3 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'XviD кодек';
Left := ScaleX(0);
Top := ScaleY(112);
Width := ScaleX(97);
Height := ScaleY(17);
TabOrder := 1;
Checked := True;
end;
Comp2 := TCheckBox.Create(WizardForm);
with Comp2 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Microsoft Visual C++ 2005';
Left := ScaleX(0);
Top := ScaleY(132);
Width := ScaleX(250);
Height := ScaleY(17);
TabOrder := 1;
Checked := True;
end;

Comp1 := TCheckBox.Create(WizardForm);
with Comp1 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'NVIDIA PhysX System Software';
Left := ScaleX(0);
Top := ScaleY(152);
Width := ScaleX(250);
Height := ScaleY(17);
TabOrder := 0;
Checked := True;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
PageNameLabel.Caption := WizardForm.PageNameLabel.Caption;
PageDescriptionLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
If CurPageID=wpSelectDir then
if CurPageID = wpSelectDir
then begin
WizardForm.NextButton.Caption:='Установить';
if FreeMB < NeedSize
then WizardForm.NextButton.Enabled:=False;
end;
begin
WizardForm.Position:=poScreenCenter;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
if DesktopIcon.Checked then
begin
CreateShellLink(ExpandConstant('{userdesktop}\{#MyAppName}.lnk'), '{#MyAppName}',
ExpandConstant('{app}\{#MyAppExeName}'), '', ExpandConstant('{app}'), '', 0, SW_SHOWNORMAL);
end;
MsgBox('Игра ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
end;

/////////// Удаление игровых сохранений
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var ResultStr:String;
begin
if CurUninstallStep=usPostUninstall then
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Akella\PTBoats', 'UnInstConfirm', ResultStr)
if DirExists(ExpandConstant('{localappdata}')+'\PT-Boats') then
if MsgBox('Удалить сохраненные игры' #13#13 'и настройки игры.',mbconfirmation, mb_YesNo) = IDYES then
begin
if not DelTree(ExpandConstant('{localappdata}')+'\PT-Boats', True, True, True)
then
MsgBox('Папка не удалена!' #13#13 'Папка не существует или задействована.', mbError, MB_OK);
end;
end;
begin
if CurUninstallStep = usUninstall then
DeleteFile(ExpandConstant('{userdesktop}\{#MyAppName}.lnk'));
end;
end;

procedure DeInitializeSetup();
begin
BASS_Stop(); //нужно для остановки проигрывания
BASS_Free(); //нужно для быстрой выгрузки библиотеки вместе с муз. файлом
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=True;
end;

procedure InitializeUninstallProgressForm();
begin
UninstallProgressForm.MainPanel.Hide;
UninstallProgressForm.PageNameLabel.Hide;
UninstallProgressForm.PageDescriptionLabel.Hide;
UninstallProgressForm.Bevel1.Hide;
UninstallProgressForm.InnerNotebook.Top := ScaleY(0);
UninstallProgressForm.Height := ScaleY(120);
end;
[/more]
Все благодарности и респекты уходят ЗломуДеду, kombat 77, WinstAn70, skeptik_vdm, Serega0675 а также другим форумчанам которые помогали в написании этого скрипта и выкладывали части своих скриптов для более глубоко понятия и изучения

PS. если будет нужно потом снабжу все комментариями, пока помню
Автор: doombuster
Дата сообщения: 15.04.2009 22:13
msatmb


Цитата:
Да и не такой уж я программер

Не не , ты тоже часть этого сообщества. Так что и тебе Спасибо!


Всетки ты не перевел [Run] в [Code]
Автор: msatmb
Дата сообщения: 15.04.2009 22:23
doombuster

Цитата:
Всетки ты не перевел [Run] в [Code]

Ага. я просто там окончательно запутался У меня то распаковывались, то пролетали мимо распаковки Короче решил забить на это и сделать более простым способом
Автор: doombuster
Дата сообщения: 15.04.2009 22:33
msatmb
А арк подхватит свой архив, если расширение ему написать , допустим, cab?

А вот в чисто английской винде, твой инсталлятор на каком языке будет? Кряказябров не будет?
Автор: STALKER_HIGHLANDER
Дата сообщения: 15.04.2009 23:08
Подскажите пожалуйста ответы на вопросы, которые я задавал ранее. Нужно очень срочно.
[more]
Как в этом окне (и ему подобных, т.е. не основные окна инсталлятора) изменить размер и вид шрифта? Каким образом можно отцентровать текст в этом окне?


Возможно ли в окне выбора компонентов каким-либо образом изменить шрифт этих строк (например, сделать жирными и т.д.)?

Можно ли в инсталлере поменять местами страницу, отвечающую за секцию [Tasks], и страницу выбора компонентов?
[/more]

Если ответы на эти вопросы есть где-то в справке или ФАК-ах, прошу прошения, но ничего похожего вроде не обнаружил.

Заранее спасибо.
Автор: chelobey
Дата сообщения: 15.04.2009 23:11
Кто о чем, а монах о богомольцах...
Help...
Автор: DeKaNszn
Дата сообщения: 15.04.2009 23:40
STALKER_HIGHLANDER


Цитата:
Как в этом окне (и ему подобных, т.е. не основные окна инсталлятора) изменить размер и вид шрифта? Каким образом можно отцентровать текст в этом окне?


Это окна системы, либо ISSkin, либо никак
Для центрирования используй пробелы

chelobey

в исходник Corona Skin не заглядывал?
Автор: doombuster
Дата сообщения: 16.04.2009 00:04
chelobey
Может тут или тут есть ответ)

Делал кто-то во втором-третьем томе скины с анимированными кнопками, но ссылки умерли, может у кого есть?

STALKER_HIGHLANDER
Лучше скрипт, или кусок от него покажи, и тебе его поправят)
Автор: Artem1143
Дата сообщения: 16.04.2009 04:42
тест
Автор: Qarma
Дата сообщения: 16.04.2009 05:05
spider91
что за странная ошибка ?


Добавлено:
Ещё вопрос - как сделать чтобы можно было в секции Run указать куда архив распакуется
Автор: DeKaNszn
Дата сообщения: 16.04.2009 06:04
Qarma

надо было через связку Files + Afterinstall делать
было бы проще
Автор: Qarma
Дата сообщения: 16.04.2009 06:08

Цитата:
надо было через связку Files + Afterinstall делать
было бы проще

А как? Не скажешь?

Добавлено:
Код секции Run

Код: [Run]
Filename: "{app}\ZZPack1.exe"; WorkingDir: "{app}"; Parameters: "-x -y -dp {app}\Papka\ -s2 "; StatusMsg: "&#200;&#228;&#229;&#242; &#240;&#224;&#241;&#239;&#224;&#234;&#238;&#226;&#234;&#224; &#228;&#224;&#237;&#237;&#251;&#245;, &#239;&#238;&#228;&#238;&#230;&#228;&#232;&#242;&#229; &#239;&#238;&#230;&#224;&#235;&#243;&#233;&#241;&#242;&#224;...";
Filename: "cmd.exe"; WorkingDir: "{app}"; Parameters: "/C del /F /Q ZZPack1.exe"; Flags: runhidden runasoriginaluser
Автор: Yoldosh
Дата сообщения: 16.04.2009 06:37
што я здесь делаю не так [more][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=zip

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

[Files]
Source: "D:\Run.exe"; DestDir: "{app}"; Flags: deleteafterinstall nocompression
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Удалить"; IconFilename: "{app}\unins000.exe"; Filename: "{app}\unins000.exe"

Code
var
ProgressBar : TNewProgressBar;
ExtractFile:TNewStaticText;

procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:pchar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';

procedure InitializeWizard();
begin
ProgressBar := TNewProgressBar.Create(WizardForm);
ExtractFile:=TNewStaticText.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(55);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 100;
ProgressBar.Position := 0;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
try
Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{app}') + '\Run.exe', ExpandConstant('{app}'), '');
except
end;
end;[/more] помогите срочна заранееспасибо за помошь !!!!
Автор: Qarma
Дата сообщения: 16.04.2009 06:39
Yoldosh
По-моему библиотека is7z.dll работает только с 7z архивами и не принимает другие форматы

Добавлено:
Мне то кто нить поможет?
Автор: chelobey
Дата сообщения: 16.04.2009 07:14
[more=скрипт...]
Код: [Setup]
AppName=Application
AppVerName=Application [Version]
DefaultDirName={pf}\Application

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: flash.bmp; DestDir: {tmp}; Flags: dontcopy nocompression

[no][Code][/no]

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;

WizardImage, FlashImage: TBitmapImage;
FlashButton: Tpanel;
FlashLabel: 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

FlashImage.Left:=-29 // анимация объекта
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
FlashImage.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:=7
Labl.Top:=2
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Font.Name:='Tahoma'
Labl.Font.Size:=10
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 InitializeWizard;
begin

ExtractTemporaryFile('button.bmp')
ExtractTemporaryFile('flash.bmp')

FlashButton := TPanel.Create(WizardForm); // создание объекта
FlashButton.Left := 10;
FlashButton.Top := 325;
FlashButton.Width := 29;
FlashButton.Height := 27;
FlashButton.Parent := WizardForm;

FlashImage:=TBitmapImage.Create(WizardForm)
FlashImage.Left:=0;
FlashImage.Top:=0;
FlashImage.Width:=58;
FlashImage.Height:=27;
FlashImage.Enabled:=False;
FlashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\flash.bmp'));
FlashImage.Parent:=FlashButton;

FlashLabel := TLabel.Create(WizardForm);
FlashLabel.Width := 29;
FlashLabel.Height := 27;
FlashLabel.Autosize := False;
FlashLabel.Transparent := True;
FlashLabel.OnMouseDown := @ButtonLabelMouseDown;
FlashLabel.OnMouseUp := @ButtonLabelMouseUp;
FlashLabel.Parent := FlashButton;

WizardForm.BackButton.Left:=293
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Left:=375
WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.Left:=211
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Top:=67
WizardForm.DirBrowseButton.Left:=335
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Top:=200
WizardForm.GroupBrowseButton.Left:=375
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
Автор: doombuster
Дата сообщения: 16.04.2009 07:47
chelobey
Не [more=так][Files]
Source: Button.bmp; Flags: dontcopy
Source: Button2.bmp; Flags: dontcopy

[Code]
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;

procedure BtnOnClick(Sender :TObject);
begin
ExtractTemporaryFile('Button2.bmp')
BtnImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Button2.bmp'));
end;

procedure InitializeWizard();
begin
BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=132
Height:=27
Cursor:=crHand
OnClick:=@BtnOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True
Enabled:=False
ExtractTemporaryFile('Button.bmp')
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=BtnPanel
end
end;[/more]

Дописать координаты)
Автор: DeKaNszn
Дата сообщения: 16.04.2009 07:55
Qarma


Код: [no][Files][/no]
Source:"D:\test\logo.bmp";DestDir:{tmp};Flags: dontcopy nocompression solidbreak
Source: "D:\Games\Lost Planet Colonies\*"; DestDir: "{app}"; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension nocompression; AfterInstall: Unpack
Source: D:\test\NOCOMP\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs nocompression

[no][Code][/no]
Procedure Unpack;
var
ResultCode:integer;
begin
Case ExtractFileName(CurrentFileName) Of
'ZZPack1.exe','ZZPack2.exe','ZZPack3.exe':begin
ExecAsOriginalUser(CurrentFileName, '-x -y -dp ' + ExpandConstant('{app}'), ExpandConstant('{app}'), SW_HIDE, ewWaitUntilTerminated, ResultCode);
DelTree(CurrentFileName, False, True, False);
end;
end;
end;
Автор: Lana4ka
Дата сообщения: 16.04.2009 08:31
Добрый день!

Подскажите, пожалуйста, что означают ключи (-х, -y, /C) вот в этих записях:
[Run]
Filename: "{app}\GameDataSP1.exe"; WorkingDir: "{app}"; Parameters: "-x -y -s2 -d."; StatusMsg: "..."; Flags: runminimized runasoriginaluser
Filename: "cmd.exe"; WorkingDir: "{app}"; Parameters: "/C del /F /Q GameDataSP1.exe"; Flags: runhidden runasoriginaluser
Автор: Yoldosh
Дата сообщения: 16.04.2009 08:51
Qarma

Цитата:
По-моему библиотека is7z.dll работает только с 7z архивами и не принимает другие форматы


is7z.dll работет с 7z архивами и 7z SFX архивими с расширением .exe
Автор: chelobey
Дата сообщения: 16.04.2009 09:44
doombuster, не то. в моем [more=коде...]
Код: [Setup]
AppName=Application
AppVerName=Application [Version]
DefaultDirName={pf}\Application

[Files]
Source: button.bmp; DestDir: {tmp}; Flags: dontcopy nocompression
Source: flash.bmp; DestDir: {tmp}; Flags: dontcopy nocompression

[no][Code][/no]

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;

WizardImage, FlashImage: TBitmapImage;
FlashButton: Tpanel;
FlashLabel: 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

FlashImage.Left:=-29 // анимация объекта
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ButtonImage[TLabel(Sender).Tag].Left:=0
FlashImage.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:=7
Labl.Top:=2
Labl.Autosize:=True
Labl.Alignment:=taCenter
Labl.Tag:=AButtonIndex
Labl.Transparent:=True
Labl.Font.Color:=clWhite
Labl.Font.Name:='Tahoma'
Labl.Font.Size:=10
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 InitializeWizard;
begin

ExtractTemporaryFile('button.bmp')
ExtractTemporaryFile('flash.bmp')

FlashButton := TPanel.Create(WizardForm); // создание объекта
FlashButton.Left := 10;
FlashButton.Top := 325;
FlashButton.Width := 29;
FlashButton.Height := 27;
FlashButton.Parent := WizardForm;

FlashImage:=TBitmapImage.Create(WizardForm)
FlashImage.Left:=0;
FlashImage.Top:=0;
FlashImage.Width:=58;
FlashImage.Height:=27;
FlashImage.Enabled:=False;
FlashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\flash.bmp'));
FlashImage.Parent:=FlashButton;

FlashLabel := TLabel.Create(WizardForm);
FlashLabel.Width := 29;
FlashLabel.Height := 27;
FlashLabel.Autosize := False;
FlashLabel.Transparent := True;
FlashLabel.OnMouseDown := @ButtonLabelMouseDown;
FlashLabel.OnMouseUp := @ButtonLabelMouseUp;
FlashLabel.Parent := FlashButton;

WizardForm.BackButton.Left:=293
WizardForm.BackButton.Width:=ButtonWidth
WizardForm.BackButton.Height:=ButtonHeight

WizardForm.NextButton.Left:=375
WizardForm.NextButton.Width:=ButtonWidth
WizardForm.NextButton.Height:=ButtonHeight

WizardForm.CancelButton.Left:=211
WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:=ButtonHeight

WizardForm.DirBrowseButton.Top:=67
WizardForm.DirBrowseButton.Left:=335
WizardForm.DirBrowseButton.Width:=ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Top:=200
WizardForm.GroupBrowseButton.Left:=375
WizardForm.GroupBrowseButton.Width:=ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

LoadButtonImage(WizardForm.BackButton,bidBack)
LoadButtonImage(WizardForm.NextButton,bidNext)
LoadButtonImage(WizardForm.CancelButton,bidCancel)
LoadButtonImage(WizardForm.DirBrowseButton,bidDirBrowse)
LoadButtonImage(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButton(WizardForm.BackButton,bidBack)
UpdateButton(WizardForm.NextButton,bidNext)
UpdateButton(WizardForm.CancelButton,bidCancel)
UpdateButton(WizardForm.DirBrowseButton,bidDirBrowse)
UpdateButton(WizardForm.GroupBrowseButton,bidGroupBrowse)
end;
Автор: spider91
Дата сообщения: 16.04.2009 10:14
Yoldosh


у меня тоже самое было. если я бросал туда небольшой архив то все нормально шло но если архив большой то вобще ниче не распаковывалось

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.