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

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

Автор: serg_aka_lain
Дата сообщения: 08.02.2008 22:40
alftair

Если рядом, то использовать флаг "external"
Source: "{src}\Path\*"; DestDir: "{app}\Path"; Flags: recursesubdirs createallsubdirs external;
или просто файл
Source: "{src}\file.pak"; DestDir: "{app}"; Flags: external;

JHeavy

procedure InitializeWizard();
begin
WizardForm.WizardSmallBitmapImage.Left:= ScaleX(0);
WizardForm.WizardSmallBitmapImage.Top:= ScaleY(0);
WizardForm.WizardSmallBitmapImage.Height:= WizardForm.Mainpanel.Height;
WizardForm.WizardSmallBitmapImage.Width:= WizardForm.MainPanel.Width;
end;
Автор: Chanka
Дата сообщения: 09.02.2008 07:13
[Удаленно]
Автор: Victor_Dobrov
Дата сообщения: 09.02.2008 11:41
Corona Skin & Check System Requirements (460 Кб в архиве) - расширение инсталлятора Inno Setup.

Исправлены ошибки поиска bassmidi.dll и basswma.dll. Файлы InnoCallback.dll и bass*.dll перенесены в папку скина (сначала поиск идёт в папке Corona, затем в папке компилятора). Файлы echoNoLF.com и md5deep.exe заменены одним md5.exe.
Восстановлена совместимость со старыми (5.0) версиями компилятора. Для поддержки Windows 9x(ME) инсталлятор необходимо собирать под этой системой!
Переписал справку, теперь в файле ReadMe.rtf всё расписано как по нотам
Автор: Kindly
Дата сообщения: 09.02.2008 13:27
Chanka, ну так выложи этот оригинальный скрипт. Чего дразнишь?
Автор: Sandy Ann
Дата сообщения: 09.02.2008 23:11
Victor_Dobrov
Не работает Ваш скрипт в МЕ :
[23:24:24,710] *** Setup started
[23:24:24,930] Setup version: Inno Setup version 5.2.2
[23:24:24,930] Original Setup EXE: D:\VIRTUAL\PROJECT_OK\SETUP.EXE
[23:24:24,930] Setup command line: /SL5="$670,53248,0,D:\VIRTUAL\PROJECT_OK\SETUP.EXE" /DEBUGWND=$61C
[23:24:24,980] Windows version: 4.10.3000 (NT platform: No)
[23:24:25,040] 64-bit Windows: No
[23:24:25,040] Processor architecture: x86
[23:24:25,150] 64-bit install mode: No
[23:24:25,200] Created temporary directory: C:\WINDOWS\TEMP\is-54C8A.tmp
[23:24:27,730] Exception message:
[23:24:27,790] Message box (OK):
    Runtime Error (at -1:0):
    Cannot Import dll:kernel32.dll.
[23:24:29,320] User chose OK.
[23:24:29,430] Deinitializing Setup.
[23:24:29,650] *** Setup exit code: 1

#define-ы Requirements, MediaPlayer, ShowOnBackground, EnableSplash, AutoPass, LicenseScroll, WizardPos были отключены.
Что нужно сделать чтоб оставить совместимость сборки с 9x(ME)? То бишь упаковка в ХР и возможность безгеморойно установить софтину в Win9х. От теста системы и музыкального проигрывателя готов отказаться, если это поможет. Помогите пожайлуста, уж очень эту красотень хочется оставить.
Автор: Victor_Dobrov
Дата сообщения: 10.02.2008 01:59
Sandy Ann, Не работает Ваш скрипт в МЕ

найди в Corona_kernel.iss строку
#if Pos("4.", GetFileVersion(AddBackslash(GetEnv("windir")) +"Explorer.exe")) == 1
и замени на эту:
#if LowerCase(GetEnv("OS")) != "windows_nt"
Автор: GRom V
Дата сообщения: 10.02.2008 04:25
Знает кто нить как кодом обьяснить что file.bmp и file.txt - это одно и тоже.???
Автор: DicDikiy
Дата сообщения: 10.02.2008 09:48
подскажите как в INI подключить модуль??
например сюда добавить FL.dll

[Libraries]
readfile.dll
engbase.dll
x86math.dll
rendcomp.dll
system.dll
Thorn.dll
DebugLib.dll
rp8.dll
shading.dll


Другой модуль подключается вот так


[Libraries]
readfile.dll
engbase.dll
x86math.dll
rendcomp.dll
system.dll
Thorn.dll
DebugLib.dll
rp8.dll
shading.dll
C:\PROGRA~1\Shell\Shell.dll
Автор: Sandy Ann
Дата сообщения: 10.02.2008 13:22
Victor_Dobrov
Спасибо огромное, сборка в МЕ на ура идет. Вот только вырос в объеме почти в 10 раз в отличии от сборки на ХР. Правда по большей части вопрос остался открытый: Как, собрав в ХР, не потерять возможность распаковать в 9х. Переваливать все проэкты в виртуальную машину очень небыстро. Там вместо 15 мин пакуется часа 3-4. А в живую не поставить-рэйды. Помогите пожайлуста с этой проблемой. Очень нужно. Просто горит. HELP!!!
DicDikiy
[INI]
Filename: путь до ini-файла; Section: Libraries; Key: FL.dll
Filename: путь до ini-файла; Section: Libraries; Key: C:\PROGRA~1\Shell\Shell.dll
Юрзай ISTool, там проще ковыряться.
Автор: Dadushka_Au
Дата сообщения: 10.02.2008 15:29
Люди, подсобите пожалуйста, проблема такая:
Создаю инсталлятор для игры (весит в установленном виде 600 с гагом метров). Инсталлер получается на 400 с лишним. Вставил в сетап проигрывание mp3, заставку. Для начала упражнялся с мелкими левыми файлами, после компиляции всё было отлично, запускалось, работало. А вот после окончательной компиляции с непосредственными игровыми файлами, инсталлер зависает и выводит страницу приветствия аж через 15 мин.! Что я не так делаю, в чём может быть причина таких тормозов? Помогите, очень надо. Код: [more]function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure Initialize1();
var
width,height: Integer;
BackgroundBitmapImage: TBitmapImage;
s: string;
begin
ExtractTemporaryFile('Daikatana_9m.bmp');
s:=ExpandConstant('{tmp}')+'\Daikatana_9m.bmp';
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;
const
BASS_SAMPLE_LOOP = 4;

type
HSTREAM = DWORD;

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

procedure InitializeWizard();
var
Name1: string;
    i: Integer;
begin
Initialize1
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('1.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\1.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
    begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;[/more]
Автор: iTASmania_Inc
Дата сообщения: 10.02.2008 15:46
Dadushka_Au
В вышеприведённом коде ничего информативного Вы не сообщили, так как в данном случае желательно поглядеть секцию [Files]. Предполагаю, что Вы поставили файлы, извлекаемые в темп, в конец секции - рекомендуется перенести их в начало секции. Также неплохо было бы применить к этим файлам флаг solidbreak.
Автор: Dadushka_Au
Дата сообщения: 10.02.2008 16:01
Ага, они у меня в конце, вот они:
Source: Daikatana\Daikatana_9m.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Daikatana\1.mp3; DestDir: {tmp}; Flags: dontcopy
Source: Daikatana\bass.dll; DestDir: {tmp}; Flags: dontcopy
Сейчас попробую в начало их перенести.
Весь код вставить не могу, выдаёт ошибку. В секции [Files] очень много файлов.

Добавлено:
iTASmania_Inc
Огромное мужское СПАСИБО!, всё работает как часы.
А вот ещё один момент не могли бы подсказать, как прилепить третью procedure InitializeWizard, пытаюсь - не получается, исполняются первые 2, а вот третья никак не хочет. Где лажа? Код: [more]function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure Initialize1();
var
width,height: Integer;
BackgroundBitmapImage: TBitmapImage;
s: string;
begin
ExtractTemporaryFile('Daikatana_9m.bmp');
s:=ExpandConstant('{tmp}')+'\Daikatana_9m.bmp';
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;
const
BASS_SAMPLE_LOOP = 4;

type
HSTREAM = DWORD;

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

procedure InitializeWizard();
var
Name1: string;
i: Integer;
begin
Initialize1
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('1.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\1.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;

procedure Initialize2();
var
SplashImage: TBitmapImage;
SplashForm: TForm;
SplashFileName: String;
I : Integer;
begin

SplashFileName := ExpandConstant('{tmp}\splash.bmp');
ExtractTemporaryFile(ExtractFileName(SplashFileName));

SplashForm := TForm.create(nil);
with SplashForm do
begin
BorderStyle := bsNone;
Position := poScreenCenter;
// Указываем размеры показываемого изображения
ClientWidth := 405;
ClientHeight := 310;
end;

SplashImage := TBitmapImage.Create(SplashForm);
with SplashImage do
begin
Bitmap.LoadFromFile(SplashFileName);
Stretch := true;
Align := alClient;
Parent := SplashForm;
end;

with SplashForm do
begin
Show;
for I := 1 to 1 do
begin
Repaint;
// показ изображения в секундах (1000 – одна секунда, 2000 – две секунды и т.д.)
Sleep(1000);
end;
Close;
Free;
end;
end;[/more]
Прошу прощения за вопиющую "ламероватость" - знакомиться с Inno Setup начал только вчера.
Заранее нескромная благодарность.
Автор: iTASmania_Inc
Дата сообщения: 10.02.2008 16:51
Dadushka_Au
[more=Подробнее]function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure Initialize1();
var
width,height: Integer;
BackgroundBitmapImage: TBitmapImage;
s: string;
begin
ExtractTemporaryFile('Daikatana_9m.bmp');
s:=ExpandConstant('{tmp}')+'\Daikatana_9m.bmp';
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
width:=GetSystemMetrics(0);
height:=GetSystemMetrics(1);
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
MainForm.Left := 0;
MainForm.Top := 0;
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;
end;
const
BASS_SAMPLE_LOOP = 4;

type
HSTREAM = DWORD;

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

procedure Initialize2();
var
SplashImage: TBitmapImage;
SplashForm: TForm;
SplashFileName: String;
I : Integer;
begin

SplashFileName := ExpandConstant('{tmp}\splash.bmp');
ExtractTemporaryFile(ExtractFileName(SplashFileName));

SplashForm := TForm.create(nil);
with SplashForm do
begin
BorderStyle := bsNone;
Position := poScreenCenter;
// Указываем размеры показываемого изображения
ClientWidth := 405;
ClientHeight := 310;
end;

SplashImage := TBitmapImage.Create(SplashForm);
with SplashImage do
begin
Bitmap.LoadFromFile(SplashFileName);
Stretch := true;
Align := alClient;
Parent := SplashForm;
end;

with SplashForm do
begin
Show;
for I := 1 to 1 do
begin
Repaint;
// показ изображения в секундах (1000 – одна секунда, 2000 – две секунды и т.д.)
Sleep(1000);
end;
Close;
Free;
end;
end;

procedure InitializeWizard();
var
Name1: string;
i: Integer;
begin
Initialize1
Initialize2
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('1.mp3');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\1.mp3');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
begin
BASS_ChannelPlay(i, True);
end;
end;
end;
procedure DeInitializeSetup();
begin
BASS_Stop();
BASS_Free();
end;
[/more]

P.S.: для BackGround рекомендую использовать скрипт Виктора Доброва, скачать отсюда. Для музыки также можно использовать и кнопки управления, они не раз мелькали тут.
Автор: Dadushka_Au
Дата сообщения: 10.02.2008 17:22
iTASmania_Inc
Очередная благодарность!
Форум читал, про кнопки знаю, в будущем планирую попробовать реализовать. Скрипт скачал ещё в процессе сёрфинга по форуму. Обязательно всё попробую, инсталлятор мне очень понравился - затянуло. Игра готова - потестил, всё работает, знакомые говорят - "круто". А Виктор Добров вообще большая умница - чистейший, безоговорочный респект за труды! Побольше бы таких толковых энтузиастов.
Автор: Victor_Dobrov
Дата сообщения: 11.02.2008 15:20
Corona Skin & Check System Requirements (460 Кб в архиве) - расширение инсталлятора Inno Setup.

Sandy Ann - Для совместимости с Windows 9x(ME) теперь не нужно собирать инсталлятор под этой системой. Функции опроса физической и виртуальной памяти работают на системах от 9х до Висты, но для 9x(ME) будет ограничение: не более 2Гб.
Автор: DicDikiy
Дата сообщения: 11.02.2008 18:30

Цитата:
[INI]
Filename: путь до ini-файла; Section: Libraries; Key: FL.dll
Filename: путь до ini-файла; Section: Libraries; Key: C:\PROGRA~1\Shell\Shell.dll
Юрзай ISTool, там проще ковыряться.

Цитата:
[INI]
Filename: путь до ini-файла; Section: Libraries; Key: FL.dll
Filename: путь до ini-файла; Section: Libraries; Key: C:\PROGRA~1\Shell\Shell.dll
Юрзай ISTool, там проще ковыряться.


Key: не прописывает без значения String:

Дак что далать то?

Автор: Sandy Ann
Дата сообщения: 11.02.2008 20:57
Victor_Dobrov
Спасибо преогромнейшее!!! Все рулит и педалит как нельзя лучше. Вы меня очень выручили. Великий респект за помощь
DicDikiy

Цитата:
Key: не прописывает

Кто не прописывает? ISTool? Надо было в ISTool ini-файл импортировать и там подправить:

Код: [INI]
Filename: G:\Test.ini; Section: Libraries; Key: readfile.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: engbase.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: x86math.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: rendcomp.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: system.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: Thorn.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: DebugLib.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: rp8.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: shading.dll; String: ""
Filename: G:\Test.ini; Section: Libraries; Key: C:\PROGRA~1\Shell\Shell.dll; String: ""
Автор: argnistkroleg
Дата сообщения: 12.02.2008 12:07
Скорее всего мой вопрос глупый...
Можно ли в секции [Code] вместо вставки битмапов задавать цвет нужного элемента оформления в виде $****** (16ричная кодировка)
З.Ы. Паскаль только начнем изучать через пару месяцев. Сам ничего написать не могу. Но разобрться в чужом коде получается. Если кто может помочь - несколько десятков строк кода накатать, прошу очень
З.З.Ы. Слайдшоу мне нафик не нужно. Просто сменить цветовую гамму инсталлятора.
Автор: Diawer
Дата сообщения: 12.02.2008 17:12
Уважаемые знатоки Inno Setup, помогите решить две задачи:

1. Как сделать слайд-шоу под ProgressBor`ом, как в игре Sacred (если знаете).
Надо её перепаковать, файлы с изображением из сетапа игры выдернул, 11 штук
с разр. 400x150, install0.bmp, install1...10. Если можно попроще. Не сочтите
за наглость просто я с секцией [Code] не в ладах.
Буду очень признателен.

2. Как сделать, что при
[UninstallDelete]
Type: filesandordirs; Name: "{app}"
удаляеться полностью папка со всем содержимым, но одна папка "Saves" оставалась.(исключение)
Дело в том, что в игре много папок и после запуска игры создаётся ещё куча всего, поэтому
отследить и прописать всё трудно.

P.S. Спасибо avzaytsev за помощь в "удалении пустых записей из реестра".
Автор: PSKOVMAIL
Дата сообщения: 12.02.2008 18:59
Diawer

1. Тут посмотри
Правда там код чтобы внизу прогресс бар, а вверху картинки!!!

2. Папку SAVE отдельной строкой в секции
[Files]
Source: ....\Games\Saves\*; DestDir: {app}; Flags: uninsneveruninstall recursesubdirs createallsubdirs

или так лучше ИМХО

[more]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ResultStr:string;
begin
case CurUninstallStep of
usUninstall:
begin
ResultStr:= 'Удалить все профили и сохранённые игры?'
if MsgBox(ResultStr, mbInformation, MB_YESNO) = idYes
then
if not DelTree(ExpandConstant('{app}')+'\Saves', True, True, True)
then
MsgBox('Папка не удалена!' #13#13 'Папка не существует или задействована.', mbError, MB_OK);
end;
end;
end;
[/more]



Добавлено:
iTASmania_Inc
А у меня такая вот проблемма никак не могу соеденить два скрипта [more="Скрипт-1"]//////////////////////////////////////////////////
//Установка splash + progress
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

function InitializeSetup(): Boolean;
var
Form, Splash: TSetupForm;
ProgressBar: TNewProgressBar;
CancelButton: TButton;
StaticText: TNewStaticText;
BitmapImage, BitmapImage1: TBitmapImage;
BitmapFileName, ResultStr: String;
i, ResultCode: Integer;
begin
Form := CreateCustomForm();
try
with Form do
begin
ClientWidth := ScaleX(380);
ClientHeight := ScaleY(120);
BorderStyle:= bsDialog;
Left:= GetSystemMetrics(16) - ClientWidth - ScaleX(50);
Top:= GetSystemMetrics(17) - ClientHeight - ScaleY(50);
end;

BitmapFileName := ExpandConstant('{tmp}\SmallProgress.bmp');
ExtractTemporaryFile(ExtractFileName(BitmapFileName));
BitmapImage := TBitmapImage.Create(Form);
BitmapImage.Left := ScaleX(8);
BitmapImage.Top := ScaleY(8);
BitmapImage.AutoSize := True;
BitmapImage.Bitmap.LoadFromFile(BitmapFileName);
BitmapImage.Parent := Form;

StaticText := TNewStaticText.Create(Form);
StaticText.Top := BitmapImage.Top;
StaticText.Left := BitmapImage.Left + BitmapImage.Width + ScaleX(8)
StaticText.Caption := 'Подождите идёт сбор информации о системе ...' + #10#13 + 'Идёт подготовка к установке ...';
StaticText.AutoSize := True;
StaticText.Parent := Form;

CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Cancel';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;

ProgressBar := TNewProgressBar.Create(Form);
with ProgressBar do
begin
Height := CancelButton.Height - ScaleY(8);
Width := Form.Width - ScaleX(108);
Top := CancelButton.Top + ScaleY(4);
Left := BitmapImage.Left;
Parent := Form;
Min:= 0;
Max:= 30;
Position := 0;
end;

Form.ActiveControl := CancelButton;
Form.Show();

Splash := CreateCustomForm;
Splash.BorderStyle := bsNone;
BitmapImage1 := TBitmapImage.Create(Splash);
with BitmapImage1 do begin
AutoSize := True;
Align := alClient;
Left := 0;
Top := 0;
Stretch := True;
Parent := Splash;
end;

ExtractTemporaryFile('Splash.bmp');
BitmapImage1.Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\Splash.bmp');
Splash.Width := BitmapImage1.Width;
Splash.Height := BitmapImage1.Height;
Splash.Center;
Splash.Show;
BitmapImage1.Refresh;

for i:= 0 to 30 do
begin
ProgressBar.Position:= i;
Form.Repaint;
Sleep(300);
i:= i + 1;
end;
finally
Form.Free();
Splash.Free();
end;
Result:= True;
end;
////////////////////////////////////////////////////
{Установка слайдшоу на окне инсталятора}
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
URLLabel: TNewStaticText;
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
case currTime of
{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_2.bmp')) end;
2*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_3.bmp')) end;
3*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_4.bmp')) end;
4*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_5.bmp')) end;
5*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_6.bmp')) end;
6*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_7.bmp')) end;
7*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_8.bmp')) end;
8*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_9.bmp')) end;
9*{#TIME_FOR_VIEW}: begin SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_10.bmp'))end;
end;
if CurrTime = 9*{#TIME_FOR_VIEW} then CurrTime := -1;
end;
///////////////////////////////////////////////////
const
BASS_SAMPLE_LOOP = 4; //повторение

type
HSTREAM = DWORD; //тип звукового потока

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';
///////////////////////////////
var
state, soft: boolean;
Image1, Image2: TBitmapImage;
const
NeedSize = 6;
DRIVE_UNKNOWN = 0;
DRIVE_NO_ROOT_DIR = 1;
DRIVE_REMOVEABLE = 2;
DRIVE_FIXED = 3;
DRIVE_REMOTE = 4;
DRIVE_CDROM = 5;
DRIVE_RAMDISK = 6;

var
ListBox: TListBox;

function GetLogicalDrives: DWORD;
external 'GetLogicalDrives@kernel32.dll stdcall';

function GetDriveType(nDrive: string): Longint;
external 'GetDriveTypeA@kernel32.dll stdcall';

function GetVideoCardName(): PChar;
external 'hwc_GetVideoCardName@files:get_hw_caps.dll stdcall';

function GetSoundCardName(): PChar;
external 'hwc_GetSoundCardName@files:get_hw_caps.dll stdcall';

function DetectHardware(): Integer;
external 'hwc_DetectHardware@files:get_hw_caps.dll stdcall';

function GetHardDriveFreeSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveFreeSpace@files:get_hw_caps.dll stdcall';

function GetHardDriveName(hdd: integer): PChar;
external 'hwc_GetHardDriveName@files:get_hw_caps.dll stdcall';

function GetHardDriveTotalSpace(hdd: integer): Integer;
external 'hwc_GetHardDriveTotalSpace@files:get_hw_caps.dll stdcall';

function GetHardDrivesCount(): Integer;
external 'hwc_GetHardDrivesCount@files:get_hw_caps.dll stdcall';

function GetSoundCards(): Integer;
external 'hwc_GetSoundCards@files:get_hw_caps.dll stdcall';

function GetSystemPage(): Integer;
external 'hwc_GetSystemPage@files:get_hw_caps.dll stdcall';

function GetSystemPhys(): Integer;
external 'hwc_GetSystemPhys@files:get_hw_caps.dll stdcall';

function GetVidMemLocal(): Integer;
external 'hwc_GetVidMemLocal@files:get_hw_caps.dll stdcall';

function GetVidMemNonLocal(): Integer;
external 'hwc_GetVidMemNonLocal@files:get_hw_caps.dll stdcall';

function GetVideoCardDev(): Integer;
external 'hwc_GetVideoCardDev@files:get_hw_caps.dll stdcall';

function GetVideoCardVen(): Integer;
external 'hwc_GetVideoCardVen@files:get_hw_caps.dll stdcall';

function DelSp(const s: string): string; // функция удаления пробелов в начале строки
var
c, i: integer;
stt, st, st1: string;
begin
c := 0;
st := s;

for i := 1 to Length(st) do
begin

stt := copy(st, i, 1);
if (stt = ' ') and (c >= 1) then
begin
st1 := st1;
c := c + 1;
end
else if (stt = ' ') and (c = 0) then
begin
c := c + 1;
st1 := st1 + stt;
end
else if (stt <> ' ') then
begin
c := 0;
st1 := st1 + stt;
end
end;

Result := st1;
end;

procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.softclub.ru/games/game.asp?id=10775', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure ListBoxOnClick(Sender: TObject);
var
NewLetter, OldString: string;
i: Integer;
begin
for i := 0 to ListBox.Items.Count - 1 do
begin
if ListBox.Selected[i] then
begin
NewLetter := Copy(ListBox.Items[i], 0, 1);
OldString := Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
WizardForm.DirEdit.Text := NewLetter + OldString;
end;
end;
end;


procedure InitializeWizard();
var
Name1: string;
i: Integer;
Text: TNewStaticText;
Path: string;
FreeMB, TotalMB: Cardinal;
drives: DWORD;

begin
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('my.wav');
if BASS_Init(-1, 44100, 0, 0, 0) then
begin
BASS_Start();
Name1:=ExpandConstant('{tmp}\my.wav');
i:=BASS_StreamCreateFile(FALSE, PChar(Name1), 0, 0, 4);
if i <> 0 then
    begin
BASS_ChannelPlay(i, True);
end
end

///////////////////////////////////////////////////////////
{Изменение окна инсталятора с пермещение прогрессбара}
ExtractTemporaryFile('Image_1.bmp');
ExtractTemporaryFile('Image_2.bmp');
ExtractTemporaryFile('Image_3.bmp');
ExtractTemporaryFile('Image_4.bmp');
ExtractTemporaryFile('Image_5.bmp');
ExtractTemporaryFile('Image_6.bmp');
ExtractTemporaryFile('Image_7.bmp');
ExtractTemporaryFile('Image_8.bmp');
ExtractTemporaryFile('Image_9.bmp');
ExtractTemporaryFile('Image_10.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + 10;
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.Width - WizardForm.CancelButton.Width - ScaleX(40);
WizardForm.ProgressGauge.Height := 12;
WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := WizardForm.ProgressGauge.Width;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_1.bmp'));
SplashImage.Hide;
///////////////////////////////////////////////////////////

URLLabel := TNewStaticText.Create(WizardForm);
URLLabel.Caption := 'Официальный сайт';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := WizardForm;
{ Alter Font *after* setting Parent so the correct defaults are inherited first }
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := 330;
URLLabel.Left := 40;

ExtractTemporaryFile('Welcome.bmp')
ExtractTemporaryFile('Finish.bmp')
WizardForm.WizardSmallBitmapImage.Top:=0
WizardForm.WizardSmallBitmapImage.Left:=0
WizardForm.WizardSmallBitmapImage.Width:=498
WizardForm.WizardSmallBitmapImage.Height:=58
WizardForm.PageNameLabel.Visible:=false
WizardForm.PageDescriptionLabel.Visible:=false
WizardForm.FinishedLabel.Visible:=False
WizardForm.FinishedHeadingLabel.Visible:=False
WizardForm.WelcomeLabel1.Visible:=False
WizardForm.WelcomeLabel2.Visible:=False
Text := TNewStaticText.Create(WizardForm);
Text.Top := 102;
Text.Width := 332;
Text.Height := 14;
Text.Caption := 'Список жестких дисков и свободного места';
Text.Parent := WizardForm.SelectDirPage;

ListBox := TListBox.Create(WizardForm);
ListBox.Top := 120;
ListBox.Width := 332;
ListBox.Height := ScaleY(90);
ListBox.Parent := WizardForm.SelectDirPage;
ListBox.OnClick := @ListBoxOnClick;
ListBox.Font.Name := 'Courier New';
ListBox.Font.Size := 10;
ListBox.Font.Style := [fsBold];
ListBox.Color := clBtnFace;

drives := GetLogicalDrives();
for i := 0 to 31 do
begin
if (drives and (1 shl i)) > 0 then
begin
Path := chr(ord('A') + i) + ':\';
if GetDriveType(Path) = DRIVE_FIXED then
begin
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB>1024 then ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + floatToStr(round(FreeMB/1024*100)/100) + ' GB')
else ListBox.Items.Add(Path + ' ' + IntToStr(round(FreeMB / TotalMB * 100)) + '% ' + IntToStr(FreeMB) + ' MB');
end;
end;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
Path,s,z: String;
FreeMB, TotalMB: Cardinal;
begin
Result:= True;
if CurPageID = wpSelectDir then
begin
Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB < (NeedSize*1024) then
begin
if FreeMB>1024 then
begin
s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB!'
end
else s:='Для установки приложения необходимо '+ IntTostr(NeedSize)+ ' GB,'#13+'а на выбранном Вами диске доступно только '+ + IntToStr(FreeMB)+' MB';
MsgBox(s, mbCriticalError, MB_OK)
Result := False;
end;
end;
////////////////////////////////
begin
if CurPageID = wpUserInfo then
begin
Result:=true;
if not state
or not soft
then
begin
z:='Не все компоненты удовлетворяют требованиям игры.' #13+#13 'Вы действительно хотите продолжить установку?'
if MsgBox(z, mbInformation, MB_YESNO)=idNo
then Result:=false;
end
end
end
end;

procedure CurPageChanged(CurPageID: Integer);
var
Text: TNewStaticText;
Windows,WindowsName: TMemo;
Os,OS1,OS2,OS3,OS4,OS5,HARD: string; // строка с названием необходимой ОС
ProcessorName: string;
Processor, VideoCardPanel, AudioCardPanel, RAMPanel, PageFilePanel: TMemo;
ProcessorNamePanel, VideoCardNamePanel, AudioCardNamePanel, RAMTotalPanel, PageFileTotalPanel: TMemo;
ProcessorMHZ: Cardinal;
StaticText: TNewStaticText;
VidRam: integer;
pfunc: LongWord;
begin
/////////////////////////////////////////
{Здесь код показа на странице Инсталл измененного прогрессбара}
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);

WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
URLLabel.Hide;

WizardForm.ProgressGauge.Show;
SplashImage.Show;
WizardForm.StatusLabel.Show;

WizardForm.CancelButton.Enabled :=True;
end
else
begin
URLLabel.Show;
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.StatusLabel.Hide;
//WizardForm.FilenameLabel.Hide;

if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;

end;
//////////////////////////////////////////////////////////////
If CurPageID=wpFinished then
begin
Image2:=TBitmapImage.Create(WizardForm)
with Image2 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.FinishedPage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Finish.bmp')
end
WizardForm.NextButton.Left:=380;
WizardForm.NextButton.Top:=325;
end
//////////////////////////////
If CurPageID=wpWelcome then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Начать>';
end
begin
Image1:=TBitmapImage.Create(WizardForm)
with Image1 do begin
Left:=0
Top:=0
Width:=497
Height:=313
Parent:=WizardForm.WelcomePage
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Welcome.bmp')
end
end
if CurPageID=wpSelectTasks then
begin
If WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Установка';
If WizardForm.FindComponent('CancelButton') is TButton
then
TButton(WizardForm.FindComponent('CancelButton')).Caption:='Выход';
end
if CurPageID = wpUserInfo then
begin
//подменяем сраницу информации о пользователе на информацию об ОС
wizardForm.UserInfoNameEdit.visible:=false;
wizardForm.UserInfoNameEdit.text:='Игрок'; //на случай, когда имя пользователя не указано в системе
wizardForm.UserInfoNameLabel.visible:=false;
wizardForm.UserInfoOrgLabel.visible:=false;
wizardForm.UserInfoOrgEdit.visible:=false;
wizardForm.UserInfoOrgEdit.text:='Группа игроков ';//на случай, когда организация не указано в системе
wizardForm.PageNameLabel.Caption := 'Аппаратное обеспечение и Операционная система';
wizardForm.PageDescriptionLabel.Caption := 'Программа установки обнаружила следующие необходимые компоненты и Операционную систему ';
RegQueryStringValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', 'ProcessorNameString', ProcessorName);
RegQueryDWordValue(HKLM, 'HARDWARE\DESCRIPTION\System\CentralProcessor\0', '~MHz', ProcessorMHZ);

OS:=' Microsoft Windows XP Service Pack 2'; //строка является записью из реестра
OS1:=' Microsoft Windows 2000 Service Pack 4'; //строка является записью из реестра
OS2:=' Windows Vista (TM) Ultimate ';
OS3:=' Windows Vista (TM) Home Basic ';
OS4:=' Windows Vista (TM) Home Premium ';
OS5:=' Windows Vista (TM) Business ';
HARD:='Все компоненты удовлетворяют требованиям игры.';
Windows := TMemo.Create(WizardForm);

StaticText := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with StaticText do begin
Left := 0;
Top := 52;
Width := 417;
Height := 14;
Caption := 'Все компоненты удовлетворяют требованиям игры.';
Parent := WizardForm.UserInfoPage;
StaticText.font.color:=clGreen;
end


with Windows do
begin
Text := ' Операц. система';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
Processor := TMemo.Create(WizardForm);
with Processor do begin
Text := ' Процессор';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
VideoCardPanel := TMemo.Create(WizardForm);
with VideoCardPanel do begin
Text := ' Видеоадаптер';
Parent := WizardForm.UserInfoPage;

Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := clBtnFace;
end
AudioCardPanel := TMemo.Create(WizardForm);
with AudioCardPanel do begin
Text := ' Звуковая карта';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;

end
RAMPanel := TMemo.Create(WizardForm);
with RAMPanel do begin
Text := ' ОЗУ';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


ReadOnly := True;

end

PageFilePanel := TMemo.Create(WizardForm);
with PageFilePanel do begin
Text := ' Файл подкачки';
Parent := WizardForm.UserInfoPage;
Color := clBtnFace;
Left := ScaleX(0); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(106); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.


ReadOnly := True;

ProcessorNamePanel := TMemo.Create(WizardForm);
with ProcessorNamePanel do begin

Text := DelSP(ProcessorName) + ' ' + IntToStr(ProcessorMHZ) + 'MHz'; //новое обработанное значение строки
Parent := WizardForm.UserInfoPage;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(77);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;

if ProcessorMHZ < 2800 then
begin
ProcessorNamePanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;

VideoCardNamePanel := TMemo.Create(WizardForm);
with VideoCardNamePanel do begin
Text := ' ' + GetVideoCardName; //+' ОЗУ-'+inttostr(round(GetVidMemLocal/1000000))+' МБ'
Parent := WizardForm.UserInfoPage;
VidrAM := GetVidMemLocal / 1000000;

if VidRam > 127 then
begin
if VidRam < 200 then text := text + ' ОЗУ - 128 МB'
else if VidRam < 300 then text := text + ' ОЗУ - 256 МB'
else if VidRam < 400 then text := text + ' ОЗУ - 384 МB'
else if VidRam > 500 then text := text + ' ОЗУ - 512 МB';
end;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(104);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;

if GetVidMemLocal < 127000000 then //128 MB
begin
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
VideoCardNamePanel.Color := $ccccff;
end;


end
AudioCardNamePanel := TMemo.Create(WizardForm);
with AudioCardNamePanel do begin
Text := ' ' + GetSoundCardName;
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(131);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R

ReadOnly := True;

end
RAMTotalPanel := TMemo.Create(WizardForm);
with RAMTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPhys + 1) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(158);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
if GetSystemPhys + 1 < 1024 then
begin
RAMTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;

PageFileTotalPanel := TMemo.Create(WizardForm);
with PageFileTotalPanel do begin
Text := ' ' + IntToStr(GetSystemPage) + ' MB';
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(185);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
if GetSystemPage < 1247 then
begin
PageFileTotalPanel.Color := $ccccff;
StaticText.Caption := 'Не все компоненты удовлетворяют требованиям игры.';
StaticText.font.color:=clRed;
end;
end;


end

if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')='' then
begin

WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;

Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;
Color := $CCFFCC;
end

end

end;

// Проверка Windows 9x
if ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')<>'' then
begin
WindowsName := TMemo.Create(WizardForm);
with WindowsName do begin
Text := ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,ProductName|}')+ExpandConstant(' {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion,CSDVersion|}');
Parent := WizardForm.UserInfoPage;
Color := $CCFFCC;
Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
Top := ScaleY(20);
Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.

ReadOnly := True;

end

end;


if OS=(WindowsName.Text) then state:=true else
if OS2=(WindowsName.Text) then state:=true else
if OS3=(WindowsName.Text) then state:=true else
if OS4=(WindowsName.Text) then state:=true else
if OS5=(WindowsName.Text) then state:=true else
if OS1=(WindowsName.Text) then state:=true else state:=false;

////////////////////////////////////////////////////////////////////////
{условие проверки оборудования}
if HARD=(StaticText.Caption) then soft:=true else soft:=false;
////////////////////////////////////////////////////////////////////////
Text := TNewStaticText.Create(WizardForm);
with Text do begin
Left := 0;
Top := 0;
Width := 417;
Height := 14;
if state then
begin
Font.Color:=clGreen;
WindowsName.color:=$CCFFCC;
// SP_Num.color:=$CCFFCC;
Caption := 'Операционная система соответствует требованиям игры.';
end
else
begin
Font.Color:=clREd;
WindowsName.color:=clRed;

WindowsName.Left := ScaleX(110); //оригинал S.T.A.L.K.E.R.
WindowsName.Top := ScaleY(20);
WindowsName.Width := ScaleX(304); //оригинал S.T.A.L.K.E.R.
WindowsName.Height := ScaleY(22); //оригинал S.T.A.L.K.E.R.
WindowsName.ReadOnly := True;



Caption := 'Операционная система не соответствует требованиям игры.';
end
Parent := WizardForm.UserInfoPage;
end
Text := TNewStaticText.Create(TNewStaticText.Create(WizardForm));
with Text do begin
Left := 0;
Top := 220;
Width := 417;
Height := 14;
Caption := 'Когда Вы будете готовы продолжить установку, нажмите «Далее».';
Parent := WizardForm.UserInfoPage;
end

end;
end;

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

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
ResultStr:string;
begin
case CurUninstallStep of
usUninstall:
begin
ResultStr:= 'Удалить все профили и сохранённые игры?'
if MsgBox(ResultStr, mbInformation, MB_YESNO) = idYes
then
if not DelTree(ExpandConstant('{userdocs}')+'\My Games', True, True, True)
then
MsgBox('Папка не удалена!' #13#13 'Папка не существует или задействована.', mbError, MB_OK);
end;
end;
end;
[/more] и [more="Скрипт-2"]var ResultCode:Integer;
ResultReg:string;
procedure CurPageChanged(CurPageID:Integer);
begin
if CurPageID=wpWelcome then
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Crytek\Crysis','InstallDir') then
If WizardForm.FindComponent('NextButton') is TButton then
TButton(WizardForm.FindComponent('NextButton')).Caption:='Играть';
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Crytek\Crysis','InstallDir') then
begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Crytek\Crysis','InstallDir', ResultReg)
Result:=False;
Exec(ResultReg+'\Bin64\Crysis.exe', '', '', SW_SHOW,ewNoWait, ResultCode)
WizardForm.Close;
end
else
Result:=True;
end;


procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=True;
if CurPageID=wpWelcome then
begin
if RegValueExists(HKEY_LOCAL_MACHINE, 'Software\Wow6432Node\Crytek\Crysis','InstallDir') then
Confirm:=False;
end;
end;
[/more]
Как только вставляю в procedure CurPageChanged(CurPageID: Integer); проверку присутствия значения реестра - сразу кнопка становится "Далее>" , т.е. стандартная, а мне надо - чтобы, если есть ветка реестра, кнопка на странице wpWelcome была "Играть>" , во всех остальных случаях "Начать>"!




Автор: serg_aka_lain
Дата сообщения: 12.02.2008 19:30
Diawer

в личке пример slideshow 400x150.
Автор: Diawer
Дата сообщения: 13.02.2008 18:34
Был такай вопрос.

1. Как сделать слайд-шоу под ProgressBor`ом, как в игре Sacred (если знаете).
Надо её перепаковать, файлы с изображением из сетапа игры выдернул, 11 штук
с разр. 400x150, install0.bmp, install1...10. Если можно попроще. Не сочтите
за наглость просто я с секцией [Code] не в ладах.
Буду очень признателен.

Подсказали два варианта, попробовал нечего не получилось.
Пропишите ПОЖАЛУЙСТА детально, где должны лежать DLL и прочие необходимые файлы.
Те в тягость, пожалуйста.
Автор: serg_aka_lain
Дата сообщения: 13.02.2008 19:18
Diawer

в этом случае в папке скрипта
Source: "InnoCallback.dll"; DestDir: "{tmp}"; Flags: dontcopy;
Source: "bitmap\*"; DestDir: "{tmp}"; Flags: dontcopy;



Автор: Angel_Smerti
Дата сообщения: 13.02.2008 21:22
Приветствую СООБЩЕСТВО!
Помогите правильно расставить флажки!
Я вроде и не совсем чайник, но вопрос, такой как у чайника?!
У меня, в одной игровой сборке, есть файлы, которые копируются в системную папку, и я выставил флажки таким образом:

Код:

Source: ..\system32\AniGIF.ocx; DestDir: {sys}; Permissions: authusers-modify; Flags: uninsneveruninstall onlyifdoesntexist
Source: ..\system32\asycfilt.dll; DestDir: {sys}; Permissions: authusers-modify; Flags: uninsneveruninstall onlyifdoesntexist
Source: ..\system32\Comdlg32.dll; DestDir: {sys}; Permissions: authusers-modify; Flags: allowunsafefiles uninsneveruninstall onlyifdoesntexist
Source: ..\system32\msvcr71.dll; DestDir: {sys}; Permissions: authusers-modify; Flags: uninsneveruninstall onlyifdoesntexist

Автор: gofryA
Дата сообщения: 14.02.2008 02:20
Angel_Smerti
"Игровая сборка" такого делать не должна. Лучше положи эти библиотеки в папку с игрой и проверь, будет ли работать для 9х. А то, что ты хочешь сделать есть очень нехорошо. Почему именно, долго обьяснять, т.к. касается работы системы. Если конечно тебе не все равно, как будет у твоих друзей работать ОС после этого.
Автор: Chanka
Дата сообщения: 14.02.2008 18:56
Помогите, пожалуйста. Проблема с MessageBox сообщениями.
В этом коде. Когда появляется это сообщение, то на панели задач как будто открыто 2 сообщения. Под разными заголовками. "Установка" и "Сообщение программы установки".
А должно же быть на панели задач "Установка", а в заголовке сообщения "Сообщение программы установки".
Очень прошу помочь!

Код: [code]

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';

function InitializeSetup(): Boolean;
var hWnd: Integer;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\MY_PROGRAM') then begin
hWnd := StrToInt(ExpandConstant('{wizardhwnd}'));
MessageBox(hWnd, 'Программа MY_PROGRAM не установлена или установлена неверно.', 'Сообщение программы установки', MB_OK or $30);
Result:=False;
end;
end;
Автор: alftair
Дата сообщения: 14.02.2008 21:33
У меня в компьютере установлена "программа". Можно ли на странице "Выбор папки установки" сделать, чтобы по умолчанию выбиралась папка куда установлена "эта программа"??
Т.е. меня есть название программы (допустим Winamp), инсталлятор определяет, что программа такая существует и подставляет путь куда она была установлена на страницу инсталлятора - "Выбор папки установки"...
Автор: 1uzer1
Дата сообщения: 15.02.2008 12:13
возникла проблема с запуском инсталлятора на висте. При большом размере файла инсталлятора(больше 1ГБ) происходят подвисания минут на 5 при старте. Потом как пролагается все норм. Антивирусов-фаирволов не стоит. На XP тот же самый инсталятор работает без проблем. Никто не встречался с данной проблемой ?
Автор: Diawer
Дата сообщения: 15.02.2008 12:31
serg_aka_lain

Ты говорил про Corona Skin & Check System Requirements от Victor_Dobrov,
или я не там ищу.
не получаеться, выдаёт ошибку буквально в каждой строке.
Если тебе не трудно закинь рабочий скрипт по Слайд-шоу с разр. картинки 400x150,
без лишнего хлама, только то что нужно для его работы.
В скрипте который ты посоветовал посмотреть куча всего и для меня как человека не
разбирающегося в этом всё выглядит кашей.
Автор: noiseless
Дата сообщения: 15.02.2008 12:38
alftair
Можно пойти двумя путями.

1. В секции [Setup] прописать напрямую путь, куда установленная программа:
DefaultDirName={reg:HKLM\Software\My_programm,Path|},
где Path - значение пути

2. Писать так:
В секции [Setup]
DefaultDirName={code:iPath}

[Code]
var PathL: string;

function iPath(Param: String): String;
begin
if (RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\My_programm','Path', PathL)) then
begin
if fileexists(PathL + '\Programm.exe') then Result:=PathL;
end;
end;

Второй вариант более правильный будет (там идет проверка на наличие в папке установки файла программы).

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


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