PDA

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


Страниц : 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

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;

nik1967
09-04-2015, 23:33
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;

NewMix
12-04-2015, 16:42
Здравствуйте. Делаю модпак для танков и столкнулся с такой проблемой. В общем прописываю путь из реестра в скрипт мол чтобы определить установлена ли игра или нет, проверить версию патча и т.д но он не может найти игру. В чем проблема? Вот часть скрипта и скрин. Сразу говорю что использовал исходник от какого то мода для сталкера где была вбита проверка на игру и версию патча.

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
12-04-2015, 19:08
NewMix, а что, пользователю не предоставляется возможность вручную выбрать папку с игрой? - Это неправильно. Бывают ситуации, когда в реестре нет следов от игры, а она есть.
Цитата NewMix:
HKEY_LOCAL_MACHINE »
Текущий установщик заносит ветку игры в HKEY_CURRENT_USER. Поэтому лучше скомбинировать. »

а если не трудно можешь кинуть исправленный код ибо я уже не догоняю что и как делать. Но запасная проверка на исполнительный файл есть позже при выборе места установки.

NewMix
13-04-2015, 13:15
Сделал все как в этом уроке (http://forum.oszone.net/post-2169372-662.html#) и вылетает такая ошибка, в чем проблема?

http://s018.radikal.ru/i521/1504/31/5424772124fd.jpg

kotyarko@fb
13-04-2015, 13:23
в чем проблема? »
Нужна расширенная версия компилятора.

NewMix
13-04-2015, 13:37
Нужна расширенная версия компилятора. »

так у меня и так стоит 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 и ссылку выше временно изменил.

NewMix
14-04-2015, 15:45
А такой еще вопрос, как изменить размер инсталятора?




© OSzone.net 2001-2012