Войти

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


Страниц : 1 2 3 4 5 6 7 8 9 10 [11] 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

serg aka lain
03-10-2009, 20:24
А не подскажете какой ключ в реестре отвечает за добавление ярлыков в папку игры на windows vista? »
За это отвечает GameuxInstallHelper.dll

Lancer2404
03-10-2009, 20:58
А поподробнее можно а то я новичек в этом деле

Lancer2404
03-10-2009, 21:23
Спасибо.

serg aka lain
03-10-2009, 21:25
А поподробнее можно а то я новичек в этом деле »
Можно, нужна сама библиотека "GameuxInstallHelper.dll".

Сам скрипт (Пример для юникод версии Inno):

[Setup]
AppName=Call of Juarez - Bound in Blood
AppVerName=Call of Juarez - Bound in Blood
DefaultDirName={pf}\Call of Juarez - Bound in Blood
OutputDir=userdocs:CoJ_Install.

[Files]
Source: "GameuxInstallHelper.dll"; DestDir: "{app}"; Flags: ignoreversion overwritereadonly;
Source: "CoJBiBGame_x86.exe"; DestDir: "{app}"; Flags: ignoreversion;

[Code]

const
PlayTask = 0;

type
TGUID = record
Data1: Cardinal;
Data2,
Data3: Word;
Data4: array [0..7] of char;
end;

function GenerateGUID(var GUID: TGUID): Cardinal;
external 'GenerateGUID@files:GameuxInstallHelper.dll stdcall setuponly';
function AddToGameExplorer(Binary: String; Path: String; InstallType: Integer; var GUID: TGUID): Cardinal;
external 'AddToGameExplorerW@files:GameuxInstallHelper.dll stdcall setuponly';
function CreateTask(InstallType: Integer; var GUID: TGUID; TaskType: Integer; TaskNumber: Integer; TaskName: String; Binary: String; Parameters: String): Cardinal;
external 'CreateTaskW@files:GameuxInstallHelper.dll stdcall setuponly';
function RetrieveGUIDForApplication(Binary: String; var GUID: TGUID): Cardinal;
external 'RetrieveGUIDForApplicationW@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveFromGameExplorer(var GUID: TGUID): Cardinal;
external 'RemoveFromGameExplorer@{app}\GameuxInstallHelper.dll stdcall uninstallonly';
function RemoveTasks(var GUID: TGUID): Cardinal;
external 'RemoveTasks@{app}\GameuxInstallHelper.dll stdcall uninstallonly';

var
GUID: TGUID;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
GenerateGUID(GUID);
if CurStep = ssPostInstall then
begin
AddToGameExplorer(ExpandConstant('{app}\CoJBiBGame_x86.exe'), ExpandConstant('{app}'), 3, GUID);
CreateTask(3, GUID, PlayTask, 0, 'Play', ExpandConstant('{app}\CoJBiBGame_x86.exe'), '');
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
RetrieveGUIDForApplication(ExpandConstant('{app}\CoJBiBGame_x86.exe'), GUID);
RemoveFromGameExplorer(GUID);
RemoveTasks(GUID);

UnloadDll(ExpandConstant('{app}\GameuxInstallHelper.dll'));
end;
end;

Lancer2404
03-10-2009, 21:34
А вот я растягиваю картинку на весь экран,а при выборе компонентов,как сделать чтобы белого фона сзади не было?

414895494
04-10-2009, 10:15
Помогите мне пожалуйста. Объедините пожалуйста эти скрипты:


[Code]
const
Color = clblack;

procedure InitializeWizard();
begin
WizardForm.PageNameLabel.Font.Color:=clWhite;
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;



[Code]
var
ProgressBar1: TNewProgressBar;

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

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:=false;
WizardForm.StatusLabel.Top:=ScaleY(81);
WizardForm.StatusLabel.Width:=ScaleX(262);
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.ProgressGauge.Left:=ScaleX(155);
WizardForm.ProgressGauge.Width:=ScaleX(262);

ProgressBar1 := TNewProgressBar.Create(wizardform);
with ProgressBar1 do
begin
Parent := wizardform.installingpage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(150);
Height := ScaleY(21);
Max := 3; //задается как кол-во файлов в [_run]
end;
end;




[Files]
Source: D:\Влад\Скрипты Inno Setup\3Tq4d6iRHl.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
var
WelcomeLabel1, WelcomeLabel2: TLabel;
BmpFile: TBitmapImage;

procedure InitializeWizard4();
begin
ExtractTemporaryFile('3Tq4d6iRHl.bmp');

BmpFile:= TBitmapImage.Create(WizardForm);
BmpFile.Bitmap.LoadFromFile(ExpandConstant('{tmp}\3Tq4d6iRHl.bmp'));
BmpFile.SetBounds(0, 0, 497, 320);
BmpFile.Stretch:= true
BmpFile.Parent:= WizardForm.WelcomePage;

with WizardForm do
begin
WelcomeLabel1.Hide;
WelcomeLabel2.hide;
end;

WelcomeLabel1:= TLabel.Create(WizardForm);
with WelcomeLabel1 do
begin
WelcomeLabel1.Alignment:=taCenter;
Left:= ScaleX(176);
Top:= ScaleY(66);
Width:= ScaleX(301);
Height:= ScaleY(71);
AutoSize:= false;
Transparent:= true;
WordWrap:= true;
Font.Name:='Tahoma'
Font.Size:= 12;
Font.Color:=ClWhite
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel1.Caption;
end;

WelcomeLabel2:=TLabel.Create(WizardForm);
with WelcomeLabel2 do
begin
WelcomeLabel2.Alignment:=taCenter;
Top:= ScaleY(136);
Left:= ScaleX(176);
Width:= ScaleX(301);
Height:= ScaleY(300);
AutoSize:= false;
WordWrap:= true;
Font.Color:=ClWhite
Font.Name:='Segoe UI'
Transparent:= true;
Parent:= WizardForm.WelcomePage;
Caption:= WizardForm.WelcomeLabel2.Caption;
end;
end;



[Files]
Source: D:\Влад\Скрипты Inno Setup\d68840406b78.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://www.pirat.ca/forum/index.php', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard3();
begin
ExtractTemporaryFile('d68840406b78.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
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;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\d68840406b78.bmp'));
end;

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



[Code]
procedure InitializeWizard();
begin
with WizardForm do begin
with MainPanel do
Height := Height - 1;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 497; //
end;
with PageNameLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
with PageDescriptionLabel do begin
Font.Name := 'Tahoma'
Width := Width - 497; //Поставьте здесь значения на 0, если хотите вернуть текст
Left := Left + 497; //
end;
end;
end;


и вот этот


[Setup]
ExtraDiskSpaceRequired=4517483645
DiskSpanning=true
DiskSliceSize=1457664000
AppName=S.T.A.L.K.E.R. - Зов Припяти
AppVerName=S.T.A.L.K.E.R. - Зов Припяти v1.6.00
AppPublisher=CSKA-4empion
AppPublisherURL=http://www.pirat.ca
AppSupportURL=http://www.pirat.ca
AppUpdatesURL=http://www.pirat.ca
DefaultDirName={pf}\S.T.A.L.K.E.R. - Зов Припяти
DefaultGroupName=S.T.A.L.K.E.R. - Зов Припяти
OutputDir=D:\Влад\Инсталяторы Inno Setup\STALKER
OutputBaseFilename=setup
SetupIconFile=D:\Влад\Игры\S.T.A.L.K.E.R. - Зов Припяти\stalker_cop.ico
Compression=lzma/ultra64
SolidCompression=true
RestartIfNeededByRun=false
AllowCancelDuringInstall=true
DisableDirPage=false
EnableDirDoesntExistWarning=false
DirExistsWarning=yes
DisableProgramGroupPage=false
DisableReadyMemo=false
DisableReadyPage=false
AlwaysShowComponentsList=false
Uninstallable=true
DisableStartupPrompt=false
ShowComponentSizes=false
SlicesPerDisk=1
ReserveBytes=0
InfoBeforeFile=
LicenseFile=
PrivilegesRequired=none
InternalCompressLevel=ultra64
WizardSmallImageFile=D:\Влад\Скрипты Inno Setup\ec03e09c995c.bmp

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

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

[Files]
Source: D:\Влад\Игры\S.T.A.L.K.E.R. - Зов Припяти\Stalker-COP.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Влад\Игры\S.T.A.L.K.E.R. - Зов Припяти\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
; ОТМЕТЬТЕ: Не используйте "Флажки: Проигнорировать версию" на любых общедоступных системных файлах

[Icons]
Name: {group}\Удалить игру; Filename: {uninstallexe}; WorkingDir: {app}
Name: {group}\S.T.A.L.K.E.R. - Зов Припяти; Filename: {app}\Stalker-COP.exe
Name: {userdesktop}\S.T.A.L.K.E.R. - Зов Припяти; Filename: {app}\Stalker-COP.exe; WorkingDir: {app}\; IconFilename: {app}\Stalker-COP.exe

[Run]
Filename: {src}\pack; Parameters: -x -y -s2 -d.; WorkingDir: {app}\; StatusMsg: Идет распаковка файлов игры...; Flags: shellexec waituntilterminated; Afterinstall: animateprogress
Filename: {app}\Stalker-COP.exe; Description: {cm:LaunchProgram,S.T.A.L.K.E.R. - Зов Припяти}; Flags: nowait postinstall skipifsilent

[UninstallDelete]
Name: {app}\*.*; Type: filesandordirs

[Registry]
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallCDKEY; ValueData:
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallLang; ValueData: ru
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallPath; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallSource; ValueData: {app}; Flags: uninsdeletekey
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallUserName; ValueData:
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: string; ValueName: InstallVers; ValueData: 1.6.00
Root: HKLM; SubKey: SOFTWARE\GSC Game World\STALKER-COP; ValueType: dword; ValueName: InstallPatchID; ValueData: $00002eda

user_123
05-10-2009, 00:30
Подскажите, как сделать, чтобы выводился запрос на удаление подкаталога {app}\log (по умолчанию не должен удаляться)при деинсталляции приложения?

function <...>(): Boolean;
begin
if MsgBox(''+ ExpandConstant('{cm:removelogs}') +'', mbInformation, mb_YesNo) = idYes then
begin
<...>
end;
end; »Отвечаю сам на свой вопрос.
Кое-что написал сам (по образцу (скачивал с вашего форума) некоторых скриптов):

procedure InitializeUninstallProgressForm();
begin
if MsgBox(CustomMessage('MyCustomMessage'), mbConfirmation, MB_YESNO) = IDYES then
DelTree(ExpandConstant('{app}\subdir'),True,True,True)
end;Вроде бы работает... Но есть некоторые трудности... Перед тем как удалить программу, надо завершить её процесс... У меня не получается реализовать это в деинсталляторе через секцию code по Вашим образцам, istask.dll распаковывается в папку деинсталлятора... компилятор сообщает о синтаксических ошибках (я с образца всё верно переписал и оптимизировал под свою прогрмму)... В инсталляторе я сделал, работает нормально... Пробовал для деинсталлятора прописать по образцу инсталлятора - скомпилировалось без проблем, но при запуске деинсталятора появилась ошибка...

Закрытие программы я реализовал так:[UninstallRun]
Filename: {sys}\taskkill.exe; Parameters: /f /im MyProg.exe /t; Flags: runhidden
Всё было бы замечательно, если бы это выполнялось ДО удаления {app}\subdir... Но после стандартного запроса об удалении программы.

Может, достаточно написать другую процедуру... подскажите, пожалуйста, какую...

GrizzlyMK
05-10-2009, 17:42
Помогите сделать (Поиском пытался не чего не нашол или я просто нетак смотрел )
1. Как изменить размер окна инстолятора
2. Как селать чтобы фоновое изоброжение было на всех диологах

Serega
05-10-2009, 19:40
Объедините пожалуйста эти скрипты »
Попробуйте сначала использовать утилиту InnoSetup Script Joiner, ссылка в шапке темы.

по Вашим образцам, istask.dll распаковывается в папку деинсталлятора... компилятор сообщает о синтаксических ошибках »

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

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

[Files]
; измените на своё место расположение dll'ки, у меня она расположена
; C:\Program Files\Inno Setup 5\Libraries\ISTask.dll
Source: compiler:Libraries\ISTask.dll; DestDir: {app}; Flags: ignoreversion
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
Filename: {app}\MyProg.exe; Description: Запустить программу My Program?; Flags: postinstall nowait skipifsilent

[Code]
// функции используемые при деинсталляции
// RunTask@{app}\ISTask.dll - название функции (в данном случае, если программа работает)
// и путь dll'ки где она расположена...
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
if RunTask('MyProg.exe', False) then
begin
// прячем форму
UninstallProgressForm.Visible:= False;
if MsgBox('Обнаружена запущенная программа My Program. Завершить?', mbConfirmation, MB_YESNO) = IDYES then
begin
KillTask('MyProg.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
// показываем форму
UninstallProgressForm.Visible:= True;
end
else
begin
MsgBox('Завершите работу программы My Program, затем снова запустите программу удаления.', mbInformation, MB_OK);
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
Abort;
end;
end
else
begin
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
end;
end;


Как изменить размер окна инстолятора »
WizardForm.ClientHeight - высота;
WizardForm.ClientWidth - ширина.
Как селать чтобы фоновое изоброжение было на всех диологах »
Посмотрите в архиве темы, этот вопрос уже поднимался.

Krekerpro
05-10-2009, 21:04
Доброго времени суток,хотелось бы узнать,как реализовать вот это http://clip2net.com/clip/m0/1254762384-clip-77kb.jpg ???

Painkiller
06-10-2009, 00:27
Доброго времени суток,хотелось бы узнать,как реализовать вот это »
Возможно я ошибаюсь , но скорее всего Inno Setup Form Designer-ом

ZooM1k
06-10-2009, 01:51
А как сделать так что бы вываливалось окно перед самой распаковкой файлов и просило ввести логин и пароль а эти данные заносились в реестр памоготи пожалуйста оч оч надо реолизовать

GrizzlyMK
06-10-2009, 08:57
Посмотрите в архиве темы, этот вопрос уже поднимался. »
Просмотрел весь архив.
Кто-то уже задавал этот вопрос но не получил ответа.
Либо я я плохо всё просмотрел.

414895494
07-10-2009, 12:31
А подскажите как можно сделать так:

http://i059.radikal.ru/0910/18/5d261d8c50b0.jpg

Пожалуйста скажите как.

Raf-9600
08-10-2009, 10:11
Сделал, не совсем как вы хотели, т.е. сделал отдельную страницу с выбором Steam или NoSteam.
[Setup]
AppID={{9C9D1016-916D-40D5-B034-A0071759F1B7}
AppName=Half-Life 2
AppVerName=My Half-Life 2
DefaultDirName={pf}\Half-Life 2
DefaultGroupName=Half-Life 2
OutputDir=.
UninstallFilesDir={app}\UninstallDir

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

[CustomMessages]
INST_MODE=Режим установки
INST_MODE_CPT=Пожалуйста, выберите в каком режиме будет устанавливаться программа
INST_EXPR=Steam
INST_EXPR_STR=Установка программы с параметрами Steam.
INST_CUST=NoSteam
INST_CUST_STR=Установка программы с параметрами NoSteam.
NEXT=Нажмите «Далее», чтобы продолжить.

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

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe; WorkingDir: {app}; Check: MyFuncIcons

[Code]
function GetModuleHandle(lpModuleName: LongInt): LongInt;
external 'GetModuleHandleA@kernel32.dll stdcall';

function ExtractIcon(hInst: LongInt; lpszExeFileName: PChar; nIconIndex: LongInt): LongInt;
external 'ExtractIconA@shell32.dll stdcall';

function DrawIconEx(hdc: LongInt; xLeft, yTop: Integer; hIcon: LongInt; cxWidth, cyWidth: Integer; istepIfAniCur, hbrFlickerFreeDraw, diFlags: LongInt): LongInt;
external 'DrawIconEx@user32.dll stdcall';

var
SupportPage: TWizardPage;
Steam, NoSteam: TNewRadiobutton;

function MyFuncIcons: Boolean;
begin
if Steam.Checked = True then
Result:= False
else Result:= True;
end;

procedure InitializeWizard();
var
Str1, Str2, Str3: TNewStaticText;
Rect: TRect;
hIcon: LongInt;
begin
SupportPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:INST_MODE}'), ExpandConstant('{cm:INST_MODE_CPT}'));

Steam:= TNewRadiobutton.Create(SupportPage);
with Steam do
begin
SetBounds(ScaleX(20), ScaleY(40), ScaleX(200), ScaleY(16));
Font.Style:= [fsBold];
Caption:= ExpandConstant('{cm:INST_EXPR}');
Checked:= True;
Parent:= SupportPage.Surface;
end;

hIcon:= ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 118);
with TBitmapImage.Create(SupportPage) do
begin
SetBounds(ScaleX(36), Steam.Top + ScaleY(20), ScaleX(32), ScaleY(32));
with Bitmap do
begin
Width:= ScaleX(32);
Height:= ScaleY(32);
Rect.Right:= ScaleX(32);
Rect.Bottom:= ScaleY(32);
Rect.Left:= ScaleX(0);
Rect.Top:= ScaleY(0);
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
Parent:= SupportPage.Surface;
end;

Str1:= TNewStaticText.Create(SupportPage);
with Str1 do
begin
SetBounds(ScaleX(78), Steam.Top + ScaleY(20), ScaleX(349), ScaleY(32));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:INST_EXPR_STR}');
Parent:= SupportPage.Surface;
end;

NoSteam:= TNewRadiobutton.Create(SupportPage);
with NoSteam do
begin
SetBounds(ScaleX(20), Str1.Top + ScaleY(52), ScaleX(200), ScaleY(16));
Font.Style:= [fsBold];
Caption:= ExpandConstant('{cm:INST_CUST}');
Parent:= SupportPage.Surface;
end;

hIcon:= ExtractIcon(GetModuleHandle(0), ExpandConstant('{sys}\shell32.dll'), 119);
with TBitmapImage.Create(SupportPage) do
begin
SetBounds(ScaleX(36), NoSteam.Top + ScaleY(20), ScaleX(32), ScaleY(32));
with Bitmap do
begin
Width:= ScaleX(32);
Height:= ScaleY(32);
Rect.Right:= ScaleX(32);
Rect.Bottom:= ScaleY(32);
Rect.Left:= ScaleX(0);
Rect.Top:= ScaleY(0);
Canvas.Brush.Color:= clBtnFace;
Canvas.FillRect(Rect);
DrawIconEx(Canvas.Handle, 0, 0, HIcon, 32, 32, 0, 0, 3);
end;
Parent:= SupportPage.Surface;
end;

Str2:= TNewStaticText.Create(SupportPage);
with Str2 do
begin
SetBounds(ScaleX(78), NoSteam.Top + ScaleY(20), ScaleX(349), ScaleY(50));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:INST_CUST_STR}');
Parent:= SupportPage.Surface;
end;

Str3:= TNewStaticText.Create(SupportPage);
with Str3 do
begin
SetBounds(ScaleX(36), ScaleY(221), ScaleX(381), ScaleY(16));
Autosize:= False;
WordWrap:= True;
Caption:= ExpandConstant('{cm:NEXT}');
Parent:= SupportPage.Surface;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
begin
if Steam.Checked = True then
WizardForm.DirEdit.Text:= ExpandConstant('{reg:HKLM\SOFTWARE\Valve\Steam,InstallPath|{pf}\ARPS}')
else WizardForm.DirEdit.Text:= ExpandConstant('{pf}\Half-Life 2');
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if PageID = wpSelectProgramGroup then
begin
if Steam.Checked = True then
Result:= True;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
if Steam.Checked = True then
begin
DelTree(ExpandConstant('{app}\UninstallDir'), True, True, True);
RegDeleteKeyIncludingSubkeys(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9C9D1016-916D-40D5-B034-A0071759F1B7}_is1');
end;
end;
end;

function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo,
MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
S := S + ExpandConstant('{cm:INST_MODE}') + NewLine;
if Steam.Checked = True then
S := S + Space + ExpandConstant('{cm:INST_EXPR}') + NewLine + NewLine
else
S := S + Space + ExpandConstant('{cm:INST_CUST}') + NewLine + NewLine;
S := S + MemoDirInfo + NewLine + Newline;
S := S + MemoGroupInfo + NewLine + Newline;
S := S + MemoTasksInfo + NewLine + NewLine;
Result := S;
end;

{
HINT: В режиме "Экспресс Режим" (Steam) может возникнуть ситуация, когда к примеру не хватает места
на жестком диске, а страница выбора папки установки в "Экспресс Режиме" будет пропущена,
в результате чего получится так, что установка сообщит о нехватке места уже в процессе
копирования файлов.

А вы немогли бы ещё сделать так, чтобы у вариантов установки "Steam" и "NoSteam", можно было указать разные наборы компонентов, и разные параметры [Tasks]?

Raf-9600
08-10-2009, 11:36
Можно, нужна сама библиотека "GameuxInstallHelper.dll".
Сам скрипт (Пример для юникод версии Inno): »
А как в нем указывать рейтинг (E, T, M, и т.д.) с комментариями нему, рекомендуемые/минимальные системные требования, и картинку которая там будет отображаться?

http://uaimage.com/t/577544_196ca50f.jpg (http://uaimage.com/image/196ca50f) http://uaimage.com/t/577545_14af09b.jpg (http://uaimage.com/image/14af09b)

A1EXXX
08-10-2009, 15:38
Inno Setup Compiler (build 091007) (http://restools.hanzify.org/inno/InnoCompiler091007_English(7zip).zip) by ResTools

serg aka lain
08-10-2009, 19:51
А как в нем указывать рейтинг (E, T, M, и т.д.) с комментариями нему, рекомендуемые/минимальные системные требования, и картинку которая там будет отображаться? »
Зта информация уже встроена в GDF.dll, или в экзешник игры, включая рейтинг и картинку.
Конкретно в Crysis'е, эту информацию содержит VistaEssentials.dll, а GameuxInstallHelper.dll только регистрирует игру в Game Explorer, ну и ещё в ней есть пара функций, для регистрации в Медиацентре и ещё какая-то мелочь.

Krekerpro
09-10-2009, 15:13
Хотелось бы узнать как сделать выделенную область прозрачной
http://clip2net.com/clip/m0/1255086731-clip-106kb.jpg

Raf-9600
10-10-2009, 10:54
А вы немогли бы ещё сделать так, чтобы у вариантов установки "Steam" и "NoSteam", можно было указать разные наборы компонентов, и разные параметры [Tasks]? »
Если это сложно реализовать, то есть второй вариант, сделать чтоб после выбора типа установки "Steam" и "NoSteam", закрывался текущий инсталлятор, и запускался другой инсталлятор, HL2-Steam.exe, или HL2-NoSteam.exe (для типов Steam и NoSteam соответственно). Только при условии что когда их запускает "главный" инсталлятор, отсутствовала первая страница, а если их вручную запустить, то она была.




© OSzone.net 2001-2012