Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Люди помогите с проблемой, делаю новую страницу, все что в ней надо сделать, сделал, а как на ней разместить все "галочки" не пойму, они появляются на предыдущей странице...это вырезка из кода:
[Tasks]
Name: "desktopicon"; Description: "Create &desktop icons"; GroupDescription: "Additional icons:"; MinVersion: 4,4
Name: Toolbar; Description: "Instal Toolbar"; GroupDescription: "WWW";
[Co&de]
var
Page: TWizardPage;
procedure InitializeWizard();
begin
Page:= CreateCustomPage(wpInstalling, 'Realore Toolbar Installation', 'Thank you for choosing to install GAMENAME. After installation of the application, you can also get the official Realore toolbar. The toolbar gives you instant access to cool tools like radio, weather, e-mail notifier and more.');
end;
помогите с проблемой, делаю новую страницу »
Вам нужно использовать функцию CreateInputOptionPage
Описание:
Создание страницы мастера, содержащей флажки (check box) и переключатели (radio button).
Если Exclusive=True, вместо флажков будут отображены переключатели, и в этом случае может быть выбран только один пункт из списка. Если ListBox=True, флажки или переключатели будут помещены в прокручиваемый список.
Замечания:
Для создания на странице флажков/переключателей используется метод Add. Для добавления/считывания состояния флажка/переключателя используется свойство Values. Страницы, для которых Exclusive=True, можно добавить/считать состояние выбранного пункта в SelectedValueIndex.
Например:
var
Page: TInputOptionWizardPage;
IsRegisteredUser: Boolean;
...
// Создание страницы
Page := CreateInputOptionPage(wpWelcome,
'Лицензионное соглашение', 'Вы зарегистрированный пользователь?',
'Если вы зарегистрированы, поставьте флажок ниже и нажмите Далее.',False, False);
// Добавление значений
Page.Add('Я зарегистрированный пользователь');
// Задание первоначальных значений (не обязательно)
Page.Values[0] := False;
...
// Передача значений переменным
IsRegisteredUser := Page.Values[0];
Serega, не знаете, как цвет прогресс-бара поменять? Хотелось бы где-то такой... http://s05.radikal.ru/i178/0911/a4/56a187682cf0.png
как цвет прогресс-бара поменять? »
Посмотрите здесь (http://forum.ru-board.com:9000/topic.cgi?forum=5&topic=30413&start=766#5) в сообщении SotM сделал скриншот, а через три сообщения сам скрипт.
Serega, спасибо. Не знаете, как здесь (http://s51.radikal.ru/i134/0911/7f/5da8acad9aee.jpg) (и на следующих страницах) сделать прозрачность? Пробовал что-то вымутить из вашего скрипта (http://www.forum.oszone.ru/post-1242285-250.html), но ничего не получилось :( [Setup]
AppName=Status Panel
AppVerName=Status Panel
DefaultDirName={pf}\Test
DefaultGroupName=Status Panel
WizardImageFile=compiler:WizModernImage.bmp
OutputDir=.
OutputBaseFilename=status_panel
DisableReadyPage=True
[Languages]
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
; Test
Source: "{sys}\*.dll"; DestDir: "{app}"; Flags: ignoreversion external deleteafterinstall;
[Icons]
Name: "{group}\Удалить StatusPanel"; Filename: "{uninstallexe}";
[Code]
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
var
Welcome, Edit1, Edit2, Ready1, Ready2,
Setup1, Setup2, Finish1, Finish2: TLabel;
procedure InitializeWizard();
begin
WizardForm.Font.Color:= clWhite;
WizardForm.ClientWidth := ScaleX(680);
WizardForm.ClientHeight := ScaleY(480);
WizardForm.Bevel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.WizardBitmapImage.Left := ScaleX(0);
WizardForm.WizardBitmapImage.Top := ScaleY(0);
WizardForm.WizardBitmapImage.Width := WizardForm.Width;
WizardForm.WizardBitmapImage.Height := WizardForm.Height;
WizardForm.WizardBitmapImage.Parent := WizardForm;
WizardForm.WizardBitmapImage2.Hide;
Welcome := TLabel.Create(WizardForm);
Welcome.Top := ScaleY(45);
Welcome.Caption := 'Приветствие';
Welcome.Transparent := True;
Welcome.Parent := WizardForm;
Edit1 := TLabel.Create(WizardForm);
Edit1.Left := WizardForm.ClientWidth / 5;
Edit1.Top := ScaleY(45);
Edit1.Width := WizardForm.ClientWidth / 5;
Edit1.AutoSize := False;
Edit1.Caption := '|';
Edit1.Transparent := True;
Edit1.Parent := WizardForm;
Edit2 := TLabel.Create(WizardForm);
Edit2.Top := ScaleY(45);
Edit2.Caption:= 'Параметры';
Edit2.Transparent := True;
Edit2.Parent := WizardForm;
Ready1 := TLabel.Create(WizardForm);
Ready1.Left := Edit1.Left + Edit1.Width;
Ready1.Top := ScaleY(45);
Ready1.Width := WizardForm.ClientWidth / 5;
Ready1.AutoSize := False;
Ready1.Caption := '|';
Ready1.Transparent := True;
Ready1.Parent := WizardForm;
Ready2 := TLabel.Create(WizardForm);
Ready2.Top := ScaleY(45);
Ready2.Caption := 'Меню "Пуск"';
Ready2.Transparent := True;
Ready2.Parent := WizardForm;
Setup1 := TLabel.Create(WizardForm);
Setup1.Left := Ready1.Left + Ready1.Width;
Setup1.Top := ScaleY(45);
Setup1.Width := WizardForm.ClientWidth / 5;
Setup1.AutoSize := False;
Setup1.Caption := '|';
Setup1.Transparent := True;
Setup1.Parent := WizardForm;
Setup2 := TLabel.Create(WizardForm);
Setup2.Top := ScaleY(45);
Setup2.Caption := 'Установка';
Setup2.Transparent := True;
Setup2.Parent := WizardForm;
Finish1 := TLabel.Create(WizardForm);
Finish1.Left := Setup1.Left + Setup1.Width;
Finish1.Top := ScaleY(45);
Finish1.Width := WizardForm.ClientWidth / 5;
Finish1.AutoSize := False;
Finish1.Caption := '|';
Finish1.Transparent := True;
Finish1.Parent := WizardForm;
Finish2 := TLabel.Create(WizardForm);
Finish2.Top := ScaleY(45);
Finish2.Caption := 'Готово';
Finish2.Transparent := True;
Finish2.Parent := WizardForm;
WizardForm.BackButton.Top := WizardForm.BackButton.Top + ScaleY(110);
WizardForm.NextButton.Top := WizardForm.NextButton.Top + ScaleY(110);
WizardForm.CancelButton.Top := WizardForm.CancelButton.Top + ScaleY(110);
WizardForm.OuterNotebook.Left := WizardForm.Width / 2 - WizardForm.OuterNotebook.Width / 2;
WizardForm.OuterNotebook.Top := ScaleY(105);
WizardForm.InnerNotebook.Top := ScaleY(10);
WizardForm.Left := GetSystemMetrics(0) / 2 - WizardForm.Width / 2;
WizardForm.Top := GetSystemMetrics(1) / 2 - WizardForm.Height / 2;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
Welcome.Font.Color := clSilver;
Edit1.Font.Color := clSilver;
Edit2.Font.Color := clSilver;
Ready1.Font.Color := clSilver;
Ready2.Font.Color := clSilver;
Setup1.Font.Color := clSilver;
Setup2.Font.Color := clSilver;
Finish1.Font.Color := clSilver;
Finish2.Font.Color := clSilver;
Welcome.Left := WizardForm.ClientWidth / 5 / 2 - Welcome.Width / 2;
Edit2.Left := Edit1.Left + Edit1.Width / 2 - Edit2.Width / 2;
Ready2.Left := Ready1.Left + Ready1.Width / 2 - Ready2.Width / 2;
Setup2.Left := Setup1.Left + Setup1.Width / 2 - Setup2.Width / 2;
Finish2.Left := Finish1.Left + Finish1.Width / 2 - Finish2.Width / 2;
if CurPageID = wpWelcome then
begin
Welcome.Font.Color := clWhite;
Edit1.Font.Color := clWhite;
end;
if CurPageID = wpSelectDir then
begin
Edit1.Font.Color := clWhite;
Edit2.Font.Color := clWhite;
Ready1.Font.Color := clWhite;
end;
if CurPageID = wpSelectProgramGroup then
begin
Ready1.Font.Color := clWhite;
Ready2.Font.Color := clWhite;
Setup1.Font.Color := clWhite;
WizardForm.NextButton.Caption := 'Установить';
end;
if CurPageID = wpInstalling then
begin
Setup1.Font.Color := clWhite;
Setup2.Font.Color := clWhite;
Finish1.Font.Color := clWhite;
end;
if CurPageID = wpFinished then
begin
Finish1.Font.Color := clWhite;
Finish2.Font.Color := clWhite;
end;
end;
как здесь (и на следующих страницах) сделать прозрачность? »
Придётся создавать панель, и на неё накладывать все контролы, присмотритесь внимательней к процедуре CurPageChanged в моём скрипте, там сначала создаётся панель.
Serega, ого... :( Спасибо за наводку....
Подскажите ребята как добавил данный тут скрипт чтобы повесить картинку на ссылку дак теперь очень долго инстал запускается вот видео Скачать (http://depositfiles.com/files/lvc0f32ht)
CrOsP, все мелкие файлы (картинки, dll'ки и т.д.) записывай в начало секции [Files], а папки с файлами с самый конец! Пример: [Files]
Source: C:\1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\1.mp3; DestDir: {tmp}; Flags: dontcopy
Source: C:\Program Files\Inno Setup 5\InnoCallback.dll; Flags: dontcopy noencryption solidbreak;;
Source: C:\2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: "D:\Games\Call Of Duty 4\iw3sp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\Games\Call Of Duty 4\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Serega, создавать панель я не умею, но на примере, в принципе, понял... Вот только я не знаю, как нанести контролы из моего скрипта на ваш... Пробовал просто соединить, получилось с прозрачностью, но без рюшек, создаваемых через Welcome, Edit1 и т.д. (другого не ожидал, но попробовать стоило :)) В общем, без напутствий (или подсказки, примерчика) мне снова никак :(
А пока буду ещё пробовать что-нибудь написать...
[hr]
Inno Setup Compiler v5.3.6 build 091128 (English) (http://restools.hanzify.org/inno/InnoCompiler091128_English(7zip).zip) by Restools (http://restools.hanzify.org/)
кто нибудь смог допетрить как прикрутить запрос второго диска к скрипту Виктора Доброва (FreeArc_Example-Ext.iss (http://freearc.org/download/InnoSetup/FreeArc4InnoSetup3_4.zip))??, Попробовал прикрутить из этого примера #define MyAppName "Test"
#define MyAppVerName "Test"
#define MyAppExeName "Test.exe"
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DirExistsWarning=no
;DisableReadyPage=true
ShowLanguageDialog=auto
OutputBaseFilename=setup
OutputDir=.
UninstallDisplayIcon={app}\{#MyAppExeName}
DefaultGroupName={#MyAppName}
InternalCompressLevel=none
Compression=none
[UninstallDelete]
Type: filesandordirs; Name: {app}
[Languages]
Name: eng; MessagesFile: compiler:Default.isl
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: C:\Program Files\FreeArc\bin\Arc.exe; DestDir: {tmp}; Flags: dontcopy
[CustomMessages]
ExtrError=Произошла ошибка во время извлечения данных. Установка будет прервана.
[Code]
var
SecondProgressBar: TNewProgressBar;
procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Top:=ScaleY(81);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.StatusLabel.Width:=ScaleX(400);
WizardForm.ProgressGauge.Top:=ScaleY(100);
WizardForm.ProgressGauge.Left:=ScaleX(155);
WizardForm.ProgressGauge.Width:=ScaleX(262);
SecondProgressBar := TNewProgressBar.Create(WizardForm);
with SecondProgressBar do
begin
Parent := WizardForm.InstallingPage;
Left := ScaleX(0);
Top := ScaleY(100);
Width := ScaleX(150);
Height := ScaleY(21);
Min := 0;
Max := 13; //задается как (кол-во распаковываемых архивов * 3) + 1
end;
end;
procedure PlsInsertNextDisk(num: integer; CheckedFile: string);
var Capt:string;
begin
CheckedFile:=ExpandConstant(CheckedFile);
if not FileExists(CheckedFile) then begin
Capt:='Пожалуйста, вставьте диск %n, содержащий файл %f и нажмите ОК для продолжения установки.';
StringChange(Capt, '%n', inttostr(num));
StringChange(Capt, '%f', ExtractFileName(CheckedFile));
MsgBox(Capt, mbInformation, MB_OK);
PlsInsertNextDisk(num, CheckedFile);
end;
end;
procedure ExtractArc(arcArchName,arcDestDir:string);
var ResCode:integer;
begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
Exec(ExpandConstant('{tmp}\arc.exe'), 'x '+AddQuotes(ExpandConstant(arcArchName))+' -y -dp'+AddQuotes(ExpandConstant(arcDestDir)), '', SW_HIDE, ewWaitUntilTerminated, ResCode);
if (ResCode <> 0) then begin
MsgBox(ExpandConstant('{cm:ExtrError}'), mbCriticalError, MB_OK);
SecondProgressBar.Hide;
DelTree(ExpandConstant('{app}'), True, True, True);
Abort;
end else
SecondProgressBar.Position:= SecondProgressBar.Position+3
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then begin
WizardForm.StatusLabel.Caption:=SetupMessage(msgStatusExtractFiles);
ExtractTemporaryFile('arc.exe');
SecondProgressBar.Position:=SecondProgressBar.Position+1;
ExtractArc('{src}\data-1.arc','{app}');
ExtractArc('{src}\data-2.arc','{app}');
PlsInsertNextDisk(2, '{src}\data-3.arc'); //если data4.arc не найден в корне диска, просим второй диск
ExtractArc('{src}\data-3.arc','{app}');
ExtractArc('{src}\data-4.arc','{app}');
PlsInsertNextDisk(1, '{src}\data-1.arc'); //снова просим первый диск
end;
end; Но ничего не вышло, сразу как только должен распаковывать запрашивает 2ой диск с отсутствующим файлом не распаковав первый архив =\
Помогите пожалуйста исску доработать. Вот что есть:
var
CheckPage: TInputOptionWizardPage;
procedure InitializeWizard;
begin
CheckPage := CreateInputOptionPage(wpInstalling, 'Realore Toolbar Installation', 'Thank you for choosing to install GAMENAME.', 'After installation of the application, you can also get the official Realore toolbar. The toolbar gives you instant access to cool tools like radio, weather, e-mail notifier and more.', False, False);
CheckPage.Add('Instal Toolbar');
end;
function NextButtonClick(CurPageID: Integer): Boolean;
var
I: Integer;
begin
if CurPageID = CheckPage.ID then
if CheckPage.Values[0] then begin
Exec(ExpandConstant('{src}\RealoreStudios.exe'),
'/silent /param2',
ExpandConstant('{src}'),
SW_HIDE,
ewWaitUntilIdle,
i);
end;
Result := True;
end;
на этом же экране надо (красный цвет):
http://i043.radikal.ru/0911/76/d6b3d54ec1bet.jpg (http://radikal.ru/F/i043.radikal.ru/0911/76/d6b3d54ec1be.jpg.html)
Как сделать, чтобы можно было установить не только в папку или подпапку, но и прямо на диск, то есть в окне выбора места установки можно было указать корень диска C:\ или D:\ ?
Если выбираю установку на диск, то выскакивает окошко:
Вы должны указать полный путь с буквой диска, например:
С:\APP
или в формате UNC:
\\имя_сервера\имя_ресурса
Нужно, чтобы была возможность распаковать файлы в корень диска.
Странно, почему инсталлятор ставит перепоны в этом отношении. Вроде вполне стандартное желание - куда хочу, туда и распаковываю. Ан нет, приходится измываться.
UPD.
Все, нашел такую опцию:
AllowRootDirectory=yes
Народ как добавить Title для MsgBox?
Например для этого
MsgBox('Not Enough Disk Space', mbError, MB_OK);
414895494
01-12-2009, 20:17
Добрый день...
Пожалуйста помогите мне реализовать вот это:
http://s41.radikal.ru/i092/0912/4b/bbfa20d6152b.jpg
Люди добрые, не подскажите?, нужно в окне инсталятора поле для ввода "ведите ник для сетевой игры. Послее ввода ника жмем далее и информация должна записаться в файл {app}\autoexec.cfg, вот так:
name "Ник который ввели"
serg aka lain
01-12-2009, 23:49
DemonAk, Думаю можно и так:
[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=userdocs:My Program.
[UninstallDelete]
Type: files; Name: "{app}\autoexec.cfg";
[Code]
var
Page: TInputQueryWizardPage;
procedure InitializeWizard();
begin
Page := CreateInputQueryPage(wpWelcome, 'Текст_1', 'Текст_2', 'Введите ник для сетевой игры');
Page.Add('', False);
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
SaveStringToFile(ExpandConstant('{app}\autoexec.cfg'), 'name ' + '"' + Page.Values[0] + '"' + #13#10, False);
end;
А это условие:
Послее ввода ника жмем далее и информация должна записаться в файл {app}\autoexec.cfg, вот так:
name "Ник который ввели"
возможно не раньше wpSelectDir, т.к. {app} ещё не была определена.
возможно не раньше wpSelectDir, т.к. {app} ещё не была определена. »
Да все нормально получилось, то что надо, спасибо еще раз ;)
serg aka lain
А не подскажешь по моему сообщению выше насчет запроса 2го и последующих дисков??, а то у меня знаний не хватает), может у тебя появятся какие нибудь мысли.
Такая проблема сделал инсталл с черным фоном,када нажимаю на сетап.ехе то сам инсталл появляется только через 5 мин как исправить скажите??
REXE, это не из-за чёрного инсталла, решение вот... (http://forum.oszone.net/post-1281933-549.html)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC