Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
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. Как селать чтобы фоновое изоброжение было на всех диологах
Объедините пожалуйста эти скрипты »
Попробуйте сначала использовать утилиту 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-ом
А как сделать так что бы вываливалось окно перед самой распаковкой файлов и просило ввести логин и пароль а эти данные заносились в реестр памоготи пожалуйста оч оч надо реолизовать
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)
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.