Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
Здравствуйте!
Подскажите плиз, как можно реализовать вывод кастомной формочки в зависимости от выбранного типа установки. Пробовала функцию WizardSelectedComponents, но она как-то странно работает - выдает или все компоненты или вообще пустой список вне зависимости от того, установка каких компонентов выбрана.
Shkutu, чем стандартные Types и Components не устраивают:
[Types]
Name: "full"; Description: "Full installation"
Name: "compact"; Description: "Compact installation"
Name: "custom"; Description: "Custom installation"; Flags: iscustom
[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "Dutch"; Types: full
Или я не верно понял суть вопроса?
R.i.m.s.k.y.
20-08-2013, 08:11
подскажите можно ли добавить скролл с стандартному WizardForm.ComponentsList? нигде не могу найти информацию как вернуть его обратно после изменения стандартного размера. »
тоже с таким столкнулся, пришлось увеличивать окно установщика
saurn, смысл в том, что в зависимости от выбранного типа установки/набора компонентов нужно или выводить дополнительную страницу или не выводить. Я не совсем поняла, как это можно сделать с помощью стандартных Types и Components.
R.i.m.s.k.y.
20-08-2013, 16:40
saurn, смысл в том, что в зависимости от выбранного типа установки/набора компонентов нужно или выводить дополнительную страницу или не выводить. Я не совсем поняла, как это можно сделать с помощью стандартных Types и Components. »
я бы tasks приплел
[Tasks]
Components: main; Name: desktopicon\user; Description: "For the current user only"; GroupDescription: "Additional icons:"; Components: main; Flags: exclusive unchecked
Components: help\dutch; Name: quicklaunchicon; Description: "Create a &Quick Launch icon"; GroupDescription: "Additional icons:"; Components: main; Flags: unchecked
Components: help\english; Name: associate; Description: "&Associate files"; GroupDescription: "Other tasks:"; Flags: unchecked
[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "Dutch"; Types: full
если три компонента в Tasks не будут выбраны то страница будет пропущена
Я не совсем поняла, как это можно сделать с помощью стандартных Types и Components. »
Например, так:
[Components]
Name: MyComps; Description: Files; Types: full;
[Code]
var
My_Page: TWizardPage;
procedure InitializeWizard();
begin
My_Page := CreateCustomPage(wpSelectComponents, 'Caption', 'Description');
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageFromID(PageID) of
My_Page: Result := not IsComponentSelected('MyComps');
end;
end;
Здесь через код создается кастомная страница. В функции ShouldSkipPage описано условие, при котором эта страница будет пропущена, или показана, если условие не выполнено. В данном случае условие это - если не отмечен компонент MyComps
я бы tasks приплел »
Извините, новичок с inno, не совсем понимаю, как это будет работать. Если можно, подробнее? Или где про "подробнее" почитать?
На всякий случай обрисую ситуацию более детально. В моем скрипте в зависимости от типа установки может запускаться установка дополнительного стороннего ПО. Выбор типа установки и, соответственно, компонентов, реализован с помощью Types и Components. Так вот в случае, если выбран тип с установкой дополнительного ПО, то нужно показать от этого ПО информацию о лицензии. И не показывать, если это ПО не устанавливается.
Пыталась использовать WizardSelectedComponents, чтобы отследить выбранные компоненты, но она как-то странно работает - вне зависимости от выбранного типа установки выдает или полный набор компонентов или вообще пустой список.
Ну вот как-то так:)
rezvorck
20-08-2013, 18:12
Здравствуйте!
Не получается обработать параметр командной строки ни через ParamStr ни через GetCmdTail... В чем ошибка?!
procedure InitializeWizard();
begin
if ParamStr(1)='/message' then MsgBox('bla bla bla', mbInformation, mb_Ok);
end;
cmd -> setup.exe /message
rezvorck,
function ParamCmd(): Boolean;
begin
Result := Pos(' -mycmdparam', GetCmdTail) <> 0;
end;
procedure InitializeWizard();
begin
if ParamCmd() then MsgBox('bla bla bla', mbInformation, mb_Ok);
end;
Nightwishh
20-08-2013, 19:30
:yahoo: А можно как- нибудь защитить графику в папке темп, без Ботвы?
saurn, огромное спасибо, помогло! :)
Приветствую!
Еще вопрос образовался. А можно ли как-то у стандартной формы "Ready to Install" как-то изменить значение выводимой папки установки? Или для этого придется переопределить форму целиком, ну т е заменить стандартную на свою?
как-то изменить значение выводимой папки установки? »
Поконкретней, что подразумевается под "изменить значение"?
P.S.
Немножко для справки: Ready to Install в данном случае не форма, а страница. Инсталятор в Inno строится таким образом, что имеет всего одну форму, на котрой в зависимости от ID страниц показываются или скрываются те или иные элементы. Управлять этими элементами можно в секции Code, через встроенные или самописные процедуры и функции. Но форма у мастера установки, как таковая, одна.
saurn, спасиб за справку.
подразумевается под "изменить значение"? »
При установке когда пользователь выбирает папку для установки приложения - это не сама папка приложения, а некий родительский каталог, в котором потом создаются другие папки в зависимости от выбранных настроек и тд и приложение устанавливается уже в них. На стандартной странице Ready to Install выводится информация о установке, в частности сообщение "ReadyMemoDir=Папка установки:", а далее, собственно, папка установки. Но туда попадает только выбранный пользователем родительский каталог, а хотелось бы выводить путь именно до папки приложения.
Надеюсь, объяснила понятно:)
Shkutu, как-то так:
function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String;
var
S: String;
begin
if IsComponentSelected('имя нужного компонента') then
S := S + 'Целевой каталог:' + NewLine + AddBackslash(Wizarddirvalue()) + 'имя нужной папки';
S := S + NewLine + NewLine + MemoTypeInfo + NewLine + NewLine + MemoComponentsInfo + NewLine + NewLine + MemoGroupInfo;
Result := S;
end;
saurn, благодарю. UpdateReadyMemo - то, что нужно :)
Всем доброго времени суток!
Возник вопрос, может кто в сталкивался или просто знает, как. Когда при установке программа помещается в "Программы и компоненты" панели управления, то обычно (как я понимаю) отображаемое там имя берется из AppName. Можно ли поменять это отображаемое там имя на какое-то, заранее неизвестное? Ну т е формировать это имя в зависимости от каких-то введенных пользователем данных. Использование Scripted Constants не помогло - судя по всему AppName инициализируется до того, как пользователь что-либо ввел.
Shkutu, [Setup]: UninstallDisplayName
Описание:
Определяет название программы на странице Установка и удаление программ Панели управления. Значение может содержать константы. Если директива не указана или пустая, инсталлятор использует значение директивы AppVerName секции [Setup].
Из-за ограничений Windows 9x/Me, значение не может превышать 63 символа.
Например:
UninstallDisplayName=My Program
Shkutu, так пойдет?
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}\MyProg.exe
UninstallDisplayName={code:DisplayName}
OutputDir=.
[Code]
var
InputPage: TInputQueryWizardPage;
function DisplayName(Name: String): String;
begin
Result := InputPage.Values[0];
end;
procedure InitializeWizard;
begin
InputPage := CreateInputQueryPage(wpSelectDir, 'Caption', 'Description', 'SubCaption');
InputPage.Add('Name:', False);
InputPage.Values[0] := 'DefaultName';
end;
то обычно (как я понимаю) отображаемое там имя берется из AppName »
Из UninstallDisplayName
saurn, nik1967, спасибо!
А нету (вдруг) ссылки на русскоязычную справку? А то продираюсь через англоязычную, видимо не слишком эффективно. А на кучу моих вопросов ответы можно найти, судя по всему, просто внимательнее читая документацию)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.