PDA

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


Страниц : 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 127 128 129 130 131 132 133

_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)

A1EXXX
19-11-2009, 14:13
_Monster_, посмотри в этой подборке (http://slil.ru/28224855), кажись видел там нечто подобное...

Colapse
20-11-2009, 00:42
Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А есKи хочу добавить черний цвет или еще что-то в етом роде-пишет ошибку Duplikate identifer "INITIALEWIZARD"!Я понимаю што ето потому што в секции Code у меня 2 значения INITIALEWIZARD но не знаю как ето исправить!Help!!!

malyta
20-11-2009, 00:59
Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А ес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
20-11-2009, 01:21
не помагает!

A1EXXX
20-11-2009, 01:28
Colapse, для объединения скриптов используй ISS Joiner (в шапке есть), и предварительно почитай справки и FAQ по объединению процедур INITIALEWIZARD и других...

malyta
20-11-2009, 01:30
не помагает! »
Уважаемый пример скрипта работоспособный, я только что сам еще раз проверил!

Colapse
20-11-2009, 01:35
A1EXXX и malyta спасибо!
malyta я верю што способний но мне выдает всю туже ошибку!не подскажите ссылочку на FAQ по объединению процедур INITIALEWIZARD?

malyta
20-11-2009, 01:44
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, т.к. у него слева есть окно в котором отображаются имена всех процедур в скрипте и что самое важное, эти имена сортируются не по расположению в скрипте, а по имени, т.е. все дубликаты процедур или функций видны сразу.

YURSHAT
20-11-2009, 04:00
Помагите мне пожалуйста!Стандартний скрипт создаю-все норм!А ес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;

Colapse
20-11-2009, 12:21
Помагите научитса пользоватса Inno Script Joiner!рускоэ FAQ по нему читал на когда пробую через командною строку то не срабативает! а как соедининить скрипти в IE я совсем не понял!

МИШАНЧИК
20-11-2009, 15:14
Colapse, нужно просто выделить необходимые скрипты, нажать правую кнопку и в контекстном меню выбрать Join Scripts. И получите объединённый скрипт joined.

VLADIS LOVE
20-11-2009, 17:43
Здравствуйте.
Подскажите пожалуйста, как можно сделать превью в виде картинки для каждого компонента? Если можно, по пунктам.
Заранее благодарен :)

YURSHAT
20-11-2009, 21:51
Подскажите пожалуйста, как можно сделать превью в виде картинки для каждого компонента? »

Можно [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 Спасибо. То, что надо. Все сработало, все легко.
На примере, всегда легче все воспринимается.

Colapse
21-11-2009, 23:47
можно скрипт на черный цвет инстала,белиэ буквы в нем?плис!




© OSzone.net 2001-2012