Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
_Monster_
19-11-2009, 10:01
А что-нибудь вроде этого можно сделать
http://s56.radikal.ru/i153/0911/8f/2f112201511ft.jpg (http://radikal.ru/F/s56.radikal.ru/i153/0911/8f/2f112201511f.png.html)
_Monster_, посмотри в этой подборке (http://slil.ru/28224855), кажись видел там нечто подобное...
Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А есKи хочу добавить черний цвет или еще что-то в етом роде-пишет ошибку Duplikate identifer "INITIALEWIZARD"!Я понимаю што ето потому што в секции Code у меня 2 значения INITIALEWIZARD но не знаю как ето исправить!Help!!!
Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А есKи хочу добавить черний цвет или еще что-то в етом роде-пишет ошибку Duplikate identifer "INITIALEWIZARD"!Я понимаю што ето потому што в секции Code у меня 2 значения INITIALEWIZARD но не знаю как ето исправить!Help!!! »
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{4D20CA87-CB25-4252-9E32-48D949EA8C84}
AppName=My Program
AppVerName=My Program 1.5
AppPublisher=My Company, Inc.
AppPublisherURL=http://www.example.com/
AppSupportURL=http://www.example.com/
AppUpdatesURL=http://www.example.com/
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "C:\Program Files\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[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;
Colapse, для объединения скриптов используй ISS Joiner (в шапке есть), и предварительно почитай справки и FAQ по объединению процедур INITIALEWIZARD и других...
не помагает! »
Уважаемый пример скрипта работоспособный, я только что сам еще раз проверил!
A1EXXX и malyta спасибо!
malyta я верю што способний но мне выдает всю туже ошибку!не подскажите ссылочку на FAQ по объединению процедур INITIALEWIZARD?
A1EXXX и malyta спасибо!
malyta я верю што способний но мне выдает всю туже ошибку!не подскажите ссылочку на FAQ по объединению процедур INITIALEWIZARD? »
В секции кода могут быть процедуры (procedure) или функции (function), имена у них должны быть уникальные, т.е. два одинаковых имени не допускаются.
Если в какой-нибудь процедуре или функции (назовём её вызывающая функция) есть ссылка на другую процедуру или функцию (назовём её - вызываемая функция), то эта вызываемая функция должна быть расположена выше чем вызывающая функция.
Так же не надо забывать про структуру процедур и функций, т.е.:
Код:
procedure MyProc; // имя процедуры
begin // начало процедуры
// тело процедуры, какой-то код
end; // конец процедуры
Одним словом, сколько begin в процедуре, столько должно быть и end;
Пример объединения двух процедур InitializeWizard:
Код:
procedure InitializeWizard;
var // так обозначают, что будут заданны переменные
s: string; // задана переменная, только для этой процедуры
begin
// код 1
end;
и вторая:
Код:
procedure InitializeWizard;
var
i: Integer; // задана переменная, только для этой процедуры
begin
// код 2
end;
Результат:
Код:
procedure InitializeWizard;
var
s: string;
i: Integer;
begin
// код 1
// код 2
end;
Если коротко, то вот так...
P.S.
Удобней всего объединять скрипты в редакторе от Restools, т.к. у него слева есть окно в котором отображаются имена всех процедур в скрипте и что самое важное, эти имена сортируются не по расположению в скрипте, а по имени, т.е. все дубликаты процедур или функций видны сразу.
Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А есKи хочу добавить черний цвет или еще что-то в етом роде-пишет ошибку Duplikate identifer "INITIALEWIZARD"!Я понимаю што ето потому што в секции Code у меня 2 значения INITIALEWIZARD но не знаю как ето исправить!Help!!! »
Маленький FAQ
Для объединения процедур INITIALEWIZARD и других нужно сделать следующее. Вы можете иметь в скрипте хоть десять одинаковых процедур, а объединять нужно так. Например у вас в скрипте три процедуры InitializeWizard. Каждую из них нужно пронумеровать:
procedure InitializeWizard1();
begin
\\Текст
end;
procedure InitializeWizard2();
begin
\\снова ваш текст
end;
\\не обязательно, чтобы процедуры были одна за другой, между ними могут быть другие процедуры
procedure InitializeWizard3();
begin
\\бла-бла-бла
end;
А в конце скрипта:
procedure InitializeWizard();
begin
procedure InitializeWizard1();
procedure InitializeWizard2();
procedure InitializeWizard3();
end;
Помагите научитса пользоватса Inno Script Joiner!рускоэ FAQ по нему читал на когда пробую через командною строку то не срабативает! а как соедининить скрипти в IE я совсем не понял!
МИШАНЧИК
20-11-2009, 15:14
Colapse, нужно просто выделить необходимые скрипты, нажать правую кнопку и в контекстном меню выбрать Join Scripts. И получите объединённый скрипт joined.
VLADIS LOVE
20-11-2009, 17:43
Здравствуйте.
Подскажите пожалуйста, как можно сделать превью в виде картинки для каждого компонента? Если можно, по пунктам.
Заранее благодарен :)
Подскажите пожалуйста, как можно сделать превью в виде картинки для каждого компонента? »
Можно [Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Files]
; Файлы с описанием
Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy
; Картинки к описаниям
Source: Image1.bmp; Flags: dontcopy
Source: Image2.bmp; Flags: dontcopy
Source: Image3.bmp; Flags: dontcopy
; Устанавливаемые файлы
; Будут установлены только если отмечен соответсвующий чекбокс
; Нумерация с нуля - CheckedBox(0) - первый; CheckedBox(1) - второй и т.д.
Source: compiler:MyProg.exe; DestDir: {app}; Flags: ignoreversion; Check: CheckedBox(0)
Source: compiler:MyProg.chm; DestDir: {app}; Flags: ignoreversion; Check: CheckedBox(1)
Source: Files\*; DestDir: {app}\add; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(2)
[_Code]
var
Page: TWizardPage;
ListBox: TNewCheckListBox;
Memo: TRichEditViewer;
CheckLabel: TLabel;
MouseY: integer;
BitmapImage: TBitmapImage;
InfoBmp: array of TBitmap;
function CheckedBox(ItemNumber: integer): Boolean;
begin // проверка,
Result:= ListBox.Checked[ItemNumber]; // отмечен ли соответствующий чекбокс
end;
// ВНИМАНИЕ! Данная реализация процедур CheckOnClick и CheckMouseMove применима только если ListBox отображается без скролбара,
// т.е. все чекбоксы видны без промотки.
procedure CheckOnClick (Sender: TObject); // событие на клик
begin
if MouseY < ListBox.Items.Count then
begin // выполняется, если кликнули на чекбокс с номером MouseY
ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
// если надо при клике выполнить еще что-то, дописываем сюда
end;
end;
procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin // событие на движение мыши
MouseY:= Y/ScaleY(16);
if MouseY < ListBox.Items.Count then
begin // выполняется, если курсор пересекает чекбокс с номером MouseY
Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
BitmapImage.Bitmap:= InfoBmp[MouseY];
// если надо при движении курсора выполнить еще что-то, дописываем сюда
end;
end;
procedure InitializeWizard();
var
i: integer;
begin
ExtractTemporaryFile('ReadMe1.rtf'); // распаковка фалов описания
ExtractTemporaryFile('ReadMe2.rtf');
ExtractTemporaryFile('ReadMe3.rtf');
ExtractTemporaryFile('Image1.bmp'); // распаковка картинок к описаниям
ExtractTemporaryFile('Image2.bmp');
ExtractTemporaryFile('Image3.bmp');
// Создание страницы, которая будет отображена после wpWelcome
// Надо в другом месте, меняем wpWelcome на wpSelectDir или другую
Page:=CreateCustomPage(wpWelcome, 'Интерфейс', 'Выберите компоненты, которые вы хотите установить.')
ListBox:= TNewCheckListBox.Create(Page); // создание списка чекбоксов
with ListBox do
begin
Left := 15
Top := 0
Width := 200
Height := 149
Parent := Page.Surface
// Добавляем нужное кол-во чекбоксов
AddCheckBox('Моя программа', '', 0, True, True, True, True, TStringList.Create);
AddCheckBox('Хелп', '', 1, True, True, False, True, TStringList.Create);
AddCheckBox('Дополнительные файлы', '', 1, True, True, False, True, TStringList.Create);
// Загружаем файлы описания (каждому чекбоксу - свой файл)
TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
end;
Memo:= TRichEditViewer.Create(Page); // создаем Memo для отображения описаний
with Memo do
begin
Left := ListBox.Left + ListBox.Width + 8;
Top := ListBox.Top;
Width := ListBox.Width;
Height := ListBox.Height;
Color := clBtnFace;
Enabled := False;
BorderStyle := bsNone;
Parent := Page.Surface;
end;
CheckLabel:= TLabel.Create(Page); // создаем TLabel (для событий мыши)
with CheckLabel do
begin
Width :=ListBox.Width;
Height :=ListBox.Height;
Autosize :=False;
Transparent :=True;
OnMouseMove :=@CheckMouseMove;
OnClick :=@CheckOnClick;
Parent :=ListBox;
Cursor := 1;
end;
BitmapImage := TBitmapImage.Create(Page); // создаем TBitmapImage для
with BitmapImage do // отображения картинок
begin // к описаниям
AutoSize := True;
Left := ListBox.Left;
Top := ListBox.Top + ListBox.Height + 8;
Width := ListBox.Width;
Height := 32;
Parent := Page.Surface;
end;
for i:=0 to ListBox.Items.Count - 1 do // по кол-ву чекбоксов
begin // создаем TBitmap-ы
SetArrayLength(InfoBmp, i+1);
InfoBmp[i]:= TBitmap.Create;
end;
// для каждого чекбокса грузим свою картинку к описанию
InfoBmp[0].LoadFromFile(ExpandConstant('{tmp}\Image1.bmp'));
InfoBmp[1].LoadFromFile(ExpandConstant('{tmp}\Image2.bmp'));
InfoBmp[2].LoadFromFile(ExpandConstant('{tmp}\Image3.bmp'));
end;
или [Setup]
AppName=AppName
AppVerName=AppVerName
CreateAppDir=false
[Files]
Source: compiler:WizModernSmallImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: compiler:WizModernSmallImage-IS.bmp; DestDir: {tmp}; Flags: dontcopy
[_Code]
Var
Page: TWizardPage;
Text1,Text2,Text3,Text4: TNewStaticText;
Panel: TPanel;
ListBox: TListBox;
Check1,Check2: TCheckBox;
NoChecks,Label1,Label2: TLabel;
Image: TBitmapImage;
Function Checked1: Boolean;
begin
Result:=Check1.Checked
end;
Function Checked2: Boolean;
begin
Result:=Check2.Checked
end;
Procedure Check1OnClick (Sender: TObject);
begin
Check1.Checked:=Not(Check1.Checked)
end;
Procedure Check2OnClick (Sender: TObject);
begin
Check2.Checked:=Not(Check2.Checked)
end;
procedure Check1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание первого компонента'
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'))
Image.Visible:=True
end;
procedure Check2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=True
Text4.Caption:='Описание второго компонента'
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage-IS.bmp'))
Image.Visible:=True
end;
procedure NoChecksMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Text4.Enabled:=False
Text4.Caption:='Наведите курсор мыши на название компонента, чтобы прочесть его описание.'
Image.Visible:=False
end;
Procedure InitializeWizard();
begin
ExtractTemporaryFile('WizModernSmallImage.bmp')
ExtractTemporaryFile('WizModernSmallImage-IS.bmp')
Page:=CreateCustomPage(2, 'Компоненты устанавливаемой программы', 'Выберите компоненты, которые вы хотите установить.')
Text1:=TNewStaticText.Create(Page)
Text1.Left:=0
Text1.Top:=0
Text1.Width:=417
Text1.Height:=28
Text1.AutoSize:=False
Text1.WordWrap:=True
Text1.Caption:='Выберите компоненты программы, которые вы хотите установить. Нажмите на кнопку "Далее" для продолжения.'
Text1.Parent:=Page.Surface
Text2:=TNewStaticText.Create(Page)
Text2.Left:=0
Text2.Top:=63
Text2.Width:=130
Text2.Height:=42
Text2.AutoSize:=False
Text2.WordWrap:=True
Text2.Caption:='Выберите компоненты программы для установки:'
Text2.Parent:=Page.Surface
Image:=TBitmapImage.Create(WizardForm)
Image.Left:=0
Image.Top:=Text2.Top + Text2.Height + 10;
Image.Width:=55
Image.Height:=55
Image.Parent:=Page.Surface
Panel:=TPanel.Create(Page)
Panel.Left:=287
Panel.Top:=60
Panel.Width:=130
Panel.Height:=160
Panel.BevelInner:=bvLowered
Panel.Parent:=Page.Surface
Text3:=TNewStaticText.Create(Page)
Text3.Left:=293
Text3.Top:=54
Text3.Font.Color:=clBlue
Text3.Caption:='Описание'
Text3.Parent:=Page.Surface
Text4:=TNewStaticText.Create(Page)
Text4.Left:=4
Text4.Top:=10
Text4.Width:=122
Text4.Height:=140
Text4.AutoSize:=False
Text4.WordWrap:=True
Text4.Parent:=Panel
NoChecks:=TLabel.Create(Page)
NoChecks.Width:=WizardForm.Width
NoChecks.Height:=WizardForm.Height
NoChecks.Autosize:=False
NoChecks.Transparent:=True
NoChecks.OnMouseMove:=@NoChecksMouseMove
NoChecks.Parent:=Page.Surface
ListBox:=TListBox.Create(Page)
ListBox.Left:=135
ListBox.Top:=60
ListBox.Width:=140
ListBox.Height:=160
ListBox.Parent:=Page.Surface
Check1:=TCheckBox.Create(Page)
Check1.Left:=2
Check1.Top:=0
Check1.Checked:=True
Check1.Parent:=ListBox
Check2:=TCheckBox.Create(Page)
Check2.Left:=2
Check2.Top:=16
Check2.Checked:=True
Check2.Parent:=ListBox
Label1:=TLabel.Create(Page)
Label1.Left:=16
Label1.Top:=2
Label1.Caption:='Компонент 1'
Label1.OnClick:=@Check1OnClick
Label1.OnMouseMove:=@Check1MouseMove
Label1.Parent:=Check1
Label2:=TLabel.Create(Page)
Label2.Left:=16
Label2.Top:=2
Label2.Caption:='Компонент 2'
Label2.OnClick:=@Check2OnClick
Label2.OnMouseMove:=@Check2MouseMove
Label2.Parent:=Check2
end;
100pudov
21-11-2009, 15:49
Вопрос простой и наверняка уже задавался. Но 200 страниц я не осилю.
Что прописать в скрипте, для возможности выбора вот к примеру этих установок. И вообще появления этого окна во время установки.
http://pic.ipicture.ru/uploads/091121/BbHz6p0OvW.jpg (http://ipicture.ru/)
С созданием ярлыков все понятно, а вот с установкой дополнительных программ ничего не получается.
Какой нибудь скрипт для примера с флагом для доп программ. А дальше я сам разберусь.
Спасибо.
Habetdin
21-11-2009, 15:53
100pudov, http://www.jrsoftware.org/ishelp/topic_taskssection.htm
100pudov
21-11-2009, 16:12
Habetdin Спасибо конечно. Это из справки, я прочитал. Опять же там только про создание ярлыков.
Мне нужна всего одна строчка из [Tasks], которая добавит в установку, к примеру пункт (с флагом) для установки DirectX 9.0c.
На примере все понятнее.
Habetdin
21-11-2009, 16:18
100pudov, пример:
[Tasks]
Name: dxinstall; Description: "Обновить DirectX"; GroupDescription: "Дополнительно:"
[Run]
Filename: "{src}\DirectX\dxsetup.exe"; Parameters: "/silent"; Tasks: dxinstall
100pudov
21-11-2009, 16:32
Habetdin Спасибо. То, что надо. Все сработало, все легко.
На примере, всегда легче все воспринимается.
можно скрипт на черный цвет инстала,белиэ буквы в нем?плис!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.