Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 8]
kotyarko@fb
09-04-2015, 20:56
То есть где предоставляется выбор Portable-версии? »
(когда\на каком этапе\на какой странице) установки пользователю предоставляется выбор версии?
AlekseyPopovv
09-04-2015, 21:00
kotyarko@fb, Понял, да эта страница после выбора портабле и инсталер. Скрипт собирается, но инсталлятор выдаёт ошибку и не запускается.
kotyarko@fb
09-04-2015, 21:05
Понял, да эта страница после выбора портабле и инсталер. »
Перечитайте внимательнее мой вопрос выше. Где находятся эти чекбоксы с версиями, при запуске или на одной из страниц установщика? - В первом случае можно использовать InitializeWizard, во втором - CurPageChanged.
AlekseyPopovv
09-04-2015, 21:10
kotyarko@fb, На одной из страниц установщика. Щас попробую через CurPageChanged. Кто мне про неё говорил, но тогда я не понял этого.
kotyarko@fb, Не могу допетрить и всё...
Dodakaedr
09-04-2015, 21:57
Я создал новую страницу "CreateCustomPage", как сделать что бы она отображалась только при выборе "Portable" версии? »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Code]
var
AkkPage: TWizardPage;
portbtn: TNewCheckbox;
procedure InitializeWizard();
begin
AkkPage := CreateCustomPage(wpWelcome, 'PortablePage_Caption', 'PortablePage_Description');
portbtn := TNewCheckBox.Create(WizardForm);
portbtn.Parent := WizardForm.WelcomePage;
portbtn.Caption := 'Portable';
portbtn.SetBounds(ScaleX(180), ScaleY(280), ScaleX(80), ScaleY(23));
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = AkkPage.id) then Result := not portbtn.Checked;
end;
AlekseyPopovv
09-04-2015, 22:13
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = AkkPage.id) then Result := not portbtn.Checked;
end;
В этом вся проблема была, этого не хватало.
Я создал TRichEditViewer. Как к нему прикрутить файл .rtf?
Dodakaedr
09-04-2015, 23:11
Я создал TRichEditViewer. Как к нему прикрутить файл .rtf? »
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Files]
Source: ReadMe.rtf; Flags: dontcopy
[Code]
var
Page: TWizardPage;
RichEditViewer: TRichEditViewer;
Readme: ansistring;
procedure InitializeWizard();
begin
Page := CreateCustomPage(wpWelcome, 'Information', 'Please read the following important information before continuing.');
RichEditViewer := TRichEditViewer.Create(Page.Surface);
with RichEditViewer do
begin
ExtractTemporaryFile('ReadMe.rtf');
LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMe.rtf', Readme);
SetBounds(ScaleX(12),ScaleY(12),ScaleX(400),ScaleY(222));
Parent := Page.Surface;
Font.Size := 8;
RTFText:= Readme;
ReadOnly := True;
ScrollBars := ssVertical;
end;
end;
AlekseyPopovv, [Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
InfoBeforeFile=ReadMeRu.rtf
[Languages]
Name: ENG; MessagesFile: "compiler:Default.isl"
Name: RUS; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: ReadMeRu.rtf; Flags: dontcopy
Source: ReadMeEn.rtf; Flags: dontcopy
[Code]
var
InfoBefore: TRichEditViewer;
ReadmeRu,ReadmeEn: AnsiString;
procedure InitializeWizard();
begin
ExtractTemporaryFile('ReadMeRu.rtf');
LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeRu.rtf', ReadmeRu);
ExtractTemporaryFile('ReadMeEn.rtf');
LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeEn.rtf', ReadmeEn);
InfoBefore:= TRichEditViewer.Create(WizardForm);
with InfoBefore do begin
SetBounds(ScaleX(0),ScaleY(24),ScaleX(417),ScaleY(205));
Parent:= WizardForm.InfoBeforePage;
ParentColor:= True;
Color:= WizardForm.Color;
BorderStyle:= bsNone;
ScrollBars:= ssVertical;
ReadOnly:= true;
if ActiveLanguage='RUS' then
RTFText:= ReadmeRu
else
if ActiveLanguage='ENG' then
RTFText:= ReadmeEn;
end;
end;
Это на стандартной инновской странице InfoBefore. И с выбором языка.
AlekseyPopovv
11-04-2015, 05:16
У меня на странице 2 "CheckBox'a". Первый - копирует файл в папку, второй - этот файл запускает. По умолчанию оба "Checked:=True;". Как сделать так, что бы если галочку снять с первого, второй был не активен?
NewDel := TNewGroupBox.Create(WizardForm);
with NewDel do
begin
Parent := NewForPortablePage.Surface;
Caption := 'Дополнительно:';
Left := ScaleX(0);
Top := ScaleY(195);
Width := ScaleX(417);
Height := ScaleY(40);
end;
StartNewDel := TNewCheckBox.Create(WizardForm);
with StartNewDel do
begin
Parent := NewForPortablePage.Surface;
Left := ScaleX(5);
Top := ScaleY(210);
Width := ScaleX(174);
Height := ScaleY(17);
Caption := 'Распаковать My Prog';
Checked:=True;
end;
PuskNewDel := TNewCheckBox.Create(WizardForm);
with PuskNewDel do
begin
Parent := NewForPortablePage.Surface;
Left := ScaleX(225);
Top := ScaleY(210);
Width := ScaleX(174);
Height := ScaleY(17);
Caption := 'Запустить My Prog';
Checked:=True;
end;
end;
end;
kotyarko@fb
11-04-2015, 13:09
Как сделать так, что бы если галочку снять с первого, второй был не активен? »
Var
NewDel: TNewGroupBox;
StartNewDel, PuskNewDel: TNewCheckBox;
Procedure EnableWhenChecked(Sender: TObject);
begin
case StartNewDel.Checked of
False:
begin
PuskNewDel.Checked := False;
PuskNewDel.Enabled := False;
end;
True:
begin
PuskNewDel.Enabled := True;
PuskNewDel.Checked := True;
end;
end;
end;
Procedure InitializeWizard();
begin
NewDel := TNewGroupBox.Create(WizardForm);
with NewDel do
begin
Parent := WizardForm;
Caption := 'Дополнительно:';
Left := ScaleX(0);
Top := ScaleY(195);
Width := ScaleX(417);
Height := ScaleY(40);
end;
StartNewDel := TNewCheckBox.Create(WizardForm);
with StartNewDel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(210);
Width := ScaleX(174);
Height := ScaleY(17);
Caption := 'Распаковать My Prog';
Checked:=True;
OnClick := @EnableWhenChecked;
end;
PuskNewDel := TNewCheckBox.Create(WizardForm);
with PuskNewDel do
begin
Parent := WizardForm;
Left := ScaleX(225);
Top := ScaleY(210);
Width := ScaleX(174);
Height := ScaleY(17);
Caption := 'Запустить My Prog';
Checked:=True;
end;
end;
Здравствуйте. Делаю модпак для танков и столкнулся с такой проблемой. В общем прописываю путь из реестра в скрипт мол чтобы определить установлена ли игра или нет, проверить версию патча и т.д но он не может найти игру. В чем проблема? Вот часть скрипта и скрин. Сразу говорю что использовал исходник от какого то мода для сталкера где была вбита проверка на игру и версию патча.
http://s017.radikal.ru/i438/1504/97/fa4a34718fa6.jpg
//Ищем в реестре место расположения игры
function GetAppDir(Path: String): String;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, 'Software\Wargaming.net\wot') then begin
RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\Wargaming.net\wot', 'InstallPath', Path);
Result := Path end else
Result := ExpandConstant('{pf}\Software\Wargaming.net\wot')
end;
//Выполняем проверку системы на соответсвтвие моду
procedure CheckRequirements(CurPageID: Integer);
var
Path, Vers: String;
begin
if CurPageID=SystemPage.ID then
begin
//Ищем папку с игрой
if RegValueExists(HKLM, 'Software\Wargaming.net\wot', 'InstallPath') then
begin
RegQueryStringValue(HKLM, 'Software\Wargaming.net\wot', 'InstallPath', Path)
GamePathFindMemo.Caption := ExpandConstant('{cm:GameDetected}');
end else
begin
GamePathFindMemo.Caption := ExpandConstant('{cm:GameNotDetected}');
GamePathFindMemo.Color := clRed;
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
end;
//Ищем и проверяем версию игры
if RegValueExists(HKLM, 'Software\Wargaming.net\wot', 'InstallVers') then
begin
RegQueryStringValue(HKLM, 'Software\Wargaming.net\wot', 'InstallVers', Vers)
if Vers = ExpandConstant('{#NeedVers}') then
GameVersFindMemo.Caption := ExpandConstant('{cm:GameVersDetected} ') + Vers
else begin
GameVersFindMemo.Caption := ExpandConstant('{cm:GameVers} ') + Vers + ExpandConstant(' {cm:GameVersNotSatisfy}');
GameVersFindMemo.Color := clRed;
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
end
end else
begin
GameVersFindMemo.Caption := ExpandConstant('{cm:GameVersNotDetected}');
GameVersFindMemo.Color := clRed;
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
end;
//Ищем наличие модов в папке с игрой
if RegValueExists(HKLM, 'Software\Wargaming.net\wot', 'InstallPath') then
begin
if DirExists(Path+'\res_mods\0.9.6') then
begin
GameModFindMemo.Caption := ExpandConstant('{cm:ModDetected}');
GameModFindMemo.Color := clRed;
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
RenameCheckBox.Show;
end else
GameModFindMemo.Caption := ExpandConstant('{cm:ModNotDetected}');
end else
begin
GameModFindMemo.Caption := ExpandConstant('{cm:GameNotDetected}');
GameModFindMemo.Color := clRed;
ReqSatisfy.Caption := ExpandConstant('{cm:NotReqSatisfy}');
end;
end;
end;
kotyarko@fb
12-04-2015, 18:13
NewMix, а что, пользователю не предоставляется возможность вручную выбрать папку с игрой? - Это неправильно. Бывают ситуации, когда в реестре нет следов от игры, а она есть.
HKEY_LOCAL_MACHINE » Текущий установщик заносит ветку игры в HKEY_CURRENT_USER. Поэтому лучше скомбинировать.
NewMix, а что, пользователю не предоставляется возможность вручную выбрать папку с игрой? - Это неправильно. Бывают ситуации, когда в реестре нет следов от игры, а она есть.
Цитата NewMix:
HKEY_LOCAL_MACHINE »
Текущий установщик заносит ветку игры в HKEY_CURRENT_USER. Поэтому лучше скомбинировать. »
а если не трудно можешь кинуть исправленный код ибо я уже не догоняю что и как делать. Но запасная проверка на исполнительный файл есть позже при выборе места установки.
Сделал все как в этом уроке (http://forum.oszone.net/post-2169372-662.html#) и вылетает такая ошибка, в чем проблема?
http://s018.radikal.ru/i521/1504/31/5424772124fd.jpg
kotyarko@fb
13-04-2015, 13:23
в чем проблема? »
Нужна расширенная версия компилятора.
Нужна расширенная версия компилятора. »
так у меня и так стоит inno setup plus
dracosha
13-04-2015, 21:07
NewMix, а что за сборка такая inno setup plus? Гугл тоже не в курсе про такую сборку :)
Рекомендую установить полную версию сборки InnoSetup Ultra (https://drive.google.com/file/d/0B7F7IxHYSQPcZEdJbDl1eTlXRUk/view?usp=sharing)
R.i.m.s.k.y.
14-04-2015, 12:23
dracosha, а автору можно отписать? а то вместо инно ультра качается какая-то заглушка
dracosha
14-04-2015, 13:59
R.i.m.s.k.y. отписал.
Залил полную версию InnoUltra на drive.google.com и ссылку выше временно изменил.
А такой еще вопрос, как изменить размер инсталятора?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.