Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: SotM
Дата сообщения: 19.01.2009 18:49
Dimika
Типа этого (имитация нажатия кнопки Next):
WizardForm.NextButton.OnClick( WizardForm.NextButton );
Автор: Kondrbr
Дата сообщения: 20.01.2009 00:23
SotM

Цитата:
А зачем тебе компилятор на русском то?! Там этих слов то не очень много. Проще выучить что где находится, чем искать руссификатор.

Согласен! и без него всё понятно, но...
Чёт ненавижу я пиндосов в последнее время, и буквы их зырить не хочу.

Artem_Butenko спасибо! Нашёл его русик - подошёл!
Автор: chelobey
Дата сообщения: 20.01.2009 16:18
подскажите, как в дополнительных списках компонентов, что реализованы в [more=коде...]
Код: [Setup]
AppName=Program
AppVerName=Program
AlwaysShowComponentsList=true
DefaultDirName={pf}\My Program
UsePreviousTasks=yes
ComponentsListTVStyle=true

[Components]
Name: prog; Description: program; Types: var1; Flags: exclusive
Name: cfg1; Description: config 1; Types: var2; Flags: exclusive
Name: cfg2; Description: config 2; Types: var2; Flags: exclusive

[Types]
Name: var1; Description: program
Name: var2; Description: program+config; Flags: iscustom

[Files]
Source: file.txt; DestDir: {app}; Components: prog

Source: file_1.1.1.txt; DestDir: {app}; Components: cfg1; Check: Check1
Source: file_1.1.2.txt; DestDir: {app}; Components: cfg1; Check: Check2
Source: file_1.2.1.txt; DestDir: {app}; Components: cfg1; Check: Check3
Source: file_1.2.2.txt; DestDir: {app}; Components: cfg1; Check: Check4

Source: file_2.1.1.txt; DestDir: {app}; Components: cfg2; Check: Check5
Source: file_2.1.2.txt; DestDir: {app}; Components: cfg2; Check: Check6
Source: file_2.2.1.txt; DestDir: {app}; Components: cfg2; Check: Check7
Source: file_2.2.2.txt; DestDir: {app}; Components: cfg2; Check: Check8

[no][Code][/no]

var
Page1, Page2: TWizardPage;
CheckListBox1, CheckListBox2: TNewCheckListBox;

function Check1: Boolean;
begin
Result:=CheckListBox1.ItemEnabled[1] and CheckListBox1.Checked[1]
end;

function Check2: Boolean;
begin
Result:=CheckListBox1.ItemEnabled[2] and CheckListBox1.Checked[2]
end;

function Check3: Boolean;
begin
Result:=CheckListBox1.ItemEnabled[4] and CheckListBox1.Checked[4]
end;

function Check4: Boolean;
begin
Result:=CheckListBox1.ItemEnabled[5] and CheckListBox1.Checked[5]
end;

function Check5: Boolean;
begin
Result:=CheckListBox2.ItemEnabled[1] and CheckListBox2.Checked[1]
end;

function Check6: Boolean;
begin
Result:=CheckListBox2.ItemEnabled[2] and CheckListBox2.Checked[2]
end;

function Check7: Boolean;
begin
Result:=CheckListBox2.ItemEnabled[4] and CheckListBox2.Checked[4]
end;

function Check8: Boolean;
begin
Result:=CheckListBox2.ItemEnabled[5] and CheckListBox2.Checked[5]
end;

procedure CreateTheWizardPages;
var
Page: TWizardPage;

begin
Page1:= CreateCustomPage(wpSelectComponents, 'TNewCheckListBox', 'page2')
CheckListBox1:= TNewCheckListBox.Create(Page1);
CheckListBox1.Width := Page1.SurfaceWidth - ScaleX(115);
CheckListBox1.Height := Page1.SurfaceHeight - ScaleY(30);
CheckListBox1.Flat := True;
CheckListBox1.Parent := Page1.Surface;
CheckListBox1.AddCheckBox('CheckBox1', '', 0, True, True, True, True, nil, True);
CheckListBox1.AddRadioButton('radiobutton1_1', '', 1, True, True, nil, False);
CheckListBox1.AddRadioButton('radiobutton1_2', '', 1, True, True, nil, False);
CheckListBox1.AddGroup('group1', '', 0, nil, True);
CheckListBox1.AddRadioButton('radiobutton_1_1', '', 1, True, True, nil, False);
CheckListBox1.AddRadioButton('radiobutton_1_2', '', 1, True, True, nil, False);

Page2:= CreateCustomPage(wpSelectComponents, 'TNewCheckListBox', 'page2')
CheckListBox2:= TNewCheckListBox.Create(Page2);
CheckListBox2.Width := Page2.SurfaceWidth - ScaleX(115);
CheckListBox2.Height := Page2.SurfaceHeight - ScaleY(30);
CheckListBox2.Flat := True;
CheckListBox2.Parent := Page2.Surface;
CheckListBox2.AddCheckBox('CheckBox2', '', 0, True, True, True, True, nil, True);
CheckListBox2.AddRadioButton('radiobutton2_1', '', 1, True, True, nil, False);
CheckListBox2.AddRadioButton('radiobutton2_2', '', 1, True, True, nil, False);
CheckListBox2.AddGroup('group2', '', 0, nil, True);
CheckListBox2.AddRadioButton('radiobutton_2_1', '', 1, True, True, nil, False);
CheckListBox2.AddRadioButton('radiobutton_2_2', '', 1, True, True, nil, False);
end;

Procedure InitializeWizard();
begin
CreateTheWizardPages;

CheckListBox1.Checked[1]:=True
CheckListBox1.Checked[4]:=True

CheckListBox2.Checked[1]:=True
CheckListBox2.Checked[4]:=True
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
Case PageID of
Page1.ID,Page1.ID: Result:= not IsComponentSelected('cfg1');
Page1.ID,Page2.ID: Result:= not IsComponentSelected('cfg2');
end;
end;
Автор: Serega0675
Дата сообщения: 21.01.2009 00:05
Здравствуйте, была у меня задачка, как на форме сообщения сделать ссылки кликабельными?...
Вдруг кому пригодится, вот [more=решение] [Setup]
AppName=My Program
AppVerName=My Program version 1.5
CreateAppDir=no
DisableProgramGroupPage=yes
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output

[Code]
procedure URLLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.innosetup.com', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

procedure AboutButtonOnClick(Sender: TObject);
var
Form: TSetupForm;
OKButton: TButton;
URLLabel: TNewStaticText;

begin
Form := CreateCustomForm();
try
Form.ClientWidth := ScaleX(256);
Form.ClientHeight := ScaleY(256);
Form.Caption := 'Информация';
Form.CenterInsideControl(WizardForm, False);

OKButton := TButton.Create(Form);
OKButton.Parent := Form;
OKButton.Width := ScaleX(75);
OKButton.Height := ScaleY(23);
OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
OKButton.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton.Caption := 'OK';
OKButton.ModalResult := mrOk;

URLLabel := TNewStaticText.Create(Form);
URLLabel.Caption := 'www.innosetup.com';
URLLabel.Cursor := crHand;
URLLabel.OnClick := @URLLabelOnClick;
URLLabel.Parent := Form;
URLLabel.Font.Style := URLLabel.Font.Style + [fsUnderline];
URLLabel.Font.Color := clBlue;
URLLabel.Top := 150;
URLLabel.Left := 50;

Form.ActiveControl := OKButton;

if Form.ShowModal() = mrOk then
exit;
finally
Form.Free();
end;
end;

procedure InitializeWizard();
var
AboutButton, CancelButton: TButton;
Form: TSetupForm;

begin
CancelButton := WizardForm.CancelButton;

AboutButton := TButton.Create(WizardForm);
AboutButton.Left := WizardForm.ClientWidth - CancelButton.Left - CancelButton.Width;
AboutButton.Top := CancelButton.Top;
AboutButton.Width := CancelButton.Width;
AboutButton.Height := CancelButton.Height;
AboutButton.Caption := 'Подробнее';
AboutButton.ShowHint := True
AboutButton.Hint := 'О программе'
AboutButton.OnClick := @AboutButtonOnClick;
AboutButton.Parent := WizardForm;
AboutButton.Cursor := crHand;
end;
[/more], только использовал не сообщение, а новую форму...
Автор: stNeko
Дата сообщения: 21.01.2009 16:31
Serega0675, благодарен тебе, что выложил. Я следил за развитием событий, так как сам столкнулся с такой проблемой.
Автор: Yoldosh
Дата сообщения: 21.01.2009 17:15
Help !!!!!! Как Распаковать Архив 7z И расположен sfx архив не внутри а снаружи. Зарнее Спасибо
Автор: Serega0675
Дата сообщения: 21.01.2009 17:37
Yoldosh

Цитата:
Help !!!!!! Как Распаковать Архив 7z И расположен sfx архив не внутри а снаружи.

[more=подробнее][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[UninstallDelete]
Name: {app}; Type: filesandordirs

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
s,s1:string;
begin
If CurStep=ssPostInstall then
begin
s:=ExpandConstant('{src}')+'\Addon.exe';
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
end;
end; [/more]
Автор: AntiGuS
Дата сообщения: 22.01.2009 01:58
Как сделать такое существо?

Автор: LordVeider
Дата сообщения: 22.01.2009 05:08
Задача: подстановка для компонентов флагов, выдаваемых функцией из секции code.
Для проверки написал функцию, которая возвращает строку "fixed" и вызвал её в Flags через {reg:вызовфункции}, однако при компиляции IS ругается что мол такого флага не знает.
Вопрос: что я делаю не так и как будет "так" ?
Автор: SotM
Дата сообщения: 22.01.2009 07:34
LordVeider
Выложи пример кода.
Автор: Sid007
Дата сообщения: 22.01.2009 11:22
Господа!!! Где-то уже видел, но теперь не могу найти. Нужно было отключить страницу завершения установки и вместо него чтобы выдавалось сообщение о завершении.
Мне хватит и ссылки на страницу где это было, НО и от кода тоже не откажусь!!! Заранее благодарю!!!
Автор: Serega0675
Дата сообщения: 22.01.2009 11:43
Sid007

Цитата:
отключить страницу завершения установки и вместо него чтобы выдавалось сообщение о завершении.

[more=так][Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DisableFinishedPage=yes
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Программа ' + '{#SetupSetting("AppName")}' + ' установлена!', mbInformation, MB_OK);
end;
[/more]


Здравствуйте, такой вопрос, как произвести поиск определённого файла во всех подпапках, т.е. мне нужно найти конкретный файл, допустим в "Моих документах", место расположение неизвестно. Затем скопировать этот файл в папку {app}...
Пробовал с функцией FindFirst, но чего-то не смог разобраться...
Может кто помочь? Если не сложно накидайте пожалуйста пример для данного случая.
Автор: Sid007
Дата сообщения: 22.01.2009 12:01
Да спасибо это то что нужно!!!

Добавлено:
А еще такой вопрос, как при выборе компонента установки на фоне не было белого фона и чтобы не указывался размер компонета, а просто было бы 2 радио кнопки,
ну примерно вот так:

- Кнопка 1
- Кнопка 2

Помнится что-то похожее было в русификации игры Мафия от ZoneofGames. Может это на мысль кого нибудь наведет.
Автор: SotM
Дата сообщения: 22.01.2009 13:04
Serega0675
В "Inno Setup Scripting" есть парочка примеров с использованием FindFirst. Выдираем кусок и получаем следующий код.
Глянь [more=сюда.]
Код: [Setup]
AppName=test
AppVerName=test1
DefaultDirName={pf}\test
DefaultGroupName=test
SolidCompression=false
InternalCompressLevel=none
Compression=none

[no][code][/no]
procedure FindFile(Path: string);
var
srcFile, destFile: string;
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
begin
APath := AddBackslash(Path);
FindResult := FindFirst(APath + '*.txt', FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
srcFile:= APath + FSR.Name;
destFile:= Copy(srcFile, 0, Length(srcFile)-4);
MsgBox( 'File: ' + srcFile, mbInformation, MB_OK );
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
FindFile(APath + DSR.Name);
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;

procedure InitializeWizard;
begin
    FindFile( ExpandConstant( '{win}' ) );
end;
Автор: Serega0675
Дата сообщения: 22.01.2009 13:43
SotM
СПАСИБО!!! Да, действительно это то, что мне надо...

P.S.
Правда не до конца понимаю сам код, но буду разбираться...
Автор: LordVeider
Дата сообщения: 22.01.2009 14:24

Цитата:
Задача: подстановка для компонентов флагов, выдаваемых функцией из секции code.
Для проверки написал функцию, которая возвращает строку "fixed" и вызвал её в Flags через {reg:вызовфункции}, однако при компиляции IS ругается что мол такого флага не знает.
Вопрос: что я делаю не так и как будет "так" ?

Цитата:
LordVeider
Выложи пример кода.
Вот, пожалуйста, сделал элементарную функцию:
Код: [Components]
Name: filenotify; Description: File Notify; Types: full custom; Flags: {code:FixComponent}

[code]
function FixComponent(): String;
begin
    Result:='fixed';
end;
Автор: SotM
Дата сообщения: 22.01.2009 14:45
LordVeider
Хмм, может быть нельзя использовать любые функции во Flags, а только предопределенные слова.
Автор: Yoldosh
Дата сообщения: 22.01.2009 15:32
Как Зделать штоби Когда Заходиш Устанвке Поивляется Диалог Подготовка К установке Как у инсталл шиелд Заране Спасибо

Добавлено:
Как Зделать Так Штоби когда заходиш В установку поивляется диалог подгатофка к устоновке Как у инсталл шиелд Заране спасибо
Автор: SotM
Дата сообщения: 22.01.2009 15:47
Yoldosh
А по-русски?
Автор: Yoldosh
Дата сообщения: 22.01.2009 15:56
Как По русски

Добавлено:
Когда Заходиш В установку Поивляется Окно Подгатовка К Установке Как У Install Shield
Автор: AntiGuS
Дата сообщения: 22.01.2009 17:44
((( а на мой вопрос не ответили(((
Автор: LordVeider
Дата сообщения: 22.01.2009 18:06
SotM
Цитата:
LordVeider
Хмм, может быть нельзя использовать любые функции во Flags, а только предопределенные слова.
Похоже оно действительно так.
Задача собсно от этого меняется не сильно - нужно лочить/разлочивать (аналогично действию флага fixed) компонент с помощью функции из секции code.
Убирать компонент вообще через Check-функцию - не вариант, ибо оно там уже используется для другой цели.
Автор: Serega0675
Дата сообщения: 22.01.2009 18:26
AntiGuS
пример
Автор: AntiGuS
Дата сообщения: 22.01.2009 21:01
Serega0675
Огромное спасибо!

А незнаете что за ошибка))

не запомнил её но там что то про память было и размер "2111111111111" что то вроде того!
Что делать или это не лечится))

Добавлено:
Автор: Serega0675
Дата сообщения: 22.01.2009 23:12
AntiGuS
У вас большой размер инсталлятора, надо разбивать на диски.
Прочитайте в справке, секция [Setup] DiskSpanning.
Автор: Sid007
Дата сообщения: 23.01.2009 07:15
Здраствуйте!!! Такой вопрос, как при выборе компонента установки в окне не было белого фона и не указывался размер компонета, а просто было бы, допустим, 2 радио кнопки (Flags: exclusive), ну примерно вот так:

- Кнопка 1
- Кнопка 2

Что-то похожее было в русификации для игры Мафия от ZoneofGames.
Автор: Serega0675
Дата сообщения: 23.01.2009 08:07
Sid007

Цитата:
как при выборе компонента установки в окне не было белого фона

Если я правильно вас понял, [more=так][Setup]
AppName=My Program
AppVerName=My Program v.1.5
DefaultDirName={pf}\My Program

[Messages]
ComponentSize1=

[Types]
Name: full; Description: Full installation
Name: custom; Description: Custom installation; Flags: iscustom

[Components]
Name: program; Description: Program Files; Types: full custom
Name: help; Description: Help File; Types: full
Name: readme; Description: Readme File; Types: full
Name: readme\en; Description: English; Flags: exclusive
Name: readme\de; Description: German; Flags: exclusive

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: program
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Components: help
Source: compiler:Examples\Readme.txt; DestDir: {app}; Components: readme\en
Source: compiler:Examples\Readme-German.txt; DestDir: {app}; Components: readme\de

[Code]
const
TransparentColor = clSilver;

procedure InitializeWizard();
begin
WizardForm.TYPESCOMBO.Color := TransparentColor;
WizardForm.ComponentsList.Color := TransparentColor;
end;
[/more]
Автор: Sid007
Дата сообщения: 23.01.2009 14:14
Serega0675

Спасиба, такой вариант подойдет.
Автор: Serega0675
Дата сообщения: 23.01.2009 16:12
Здравствуйте, такой вопрос, можно ли задать кодировку при создании текстового файла?
Автор: cleverboy
Дата сообщения: 23.01.2009 17:39
В сборнике вопросов из шапки есть код
"Полноэкранный рисунок на фоновом окне и полноэкранное слайд-шоу по процентам"
Так вот во время слайдшоу между сменой картинок на мгновенье мелькает фоновый рисунок. Помогите избавится от этого. Т.е. требуется сделать так, чтобы смена изображений проходила без задержки, заметной глазу.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: в очередной раз босудим антивиры?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.