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. если будет нужно потом снабжу все комментариями, пока помню