Войти

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


Страниц : 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

Gnom_aka_Lexander
26-09-2012, 14:10
Вот FAQ, Knowledge Base и референс от автора. »
А, ну да. там настолько мало полезного, что я и забыл совсем про них. А база знаний создавалась настолько давно, что половина примеров уже просто неактуальна. Родная встроенная справка - наше все. хотя, да, на примерах работать проще. именно для этого с инно идет немаленькая пачка примеров в папке Examples

Ivan_009
26-09-2012, 14:49
Возможно ли сделать так чтобы при запуске инсталлятора появлялось сообщение о выборе оформления одного или второго вида.... PS У меня инсталл в двух разных оформлениях нужно сделать так чтобы пользователь сам выбрал какое оформление ему использовать...Подскажите если кто знает как это реализовать...Заранее спасибо за любую помощь... :dont-know

R.i.m.s.k.y.
26-09-2012, 14:52
Ivan_009, складывается ощущение будто инсталл важнее инсталлириуемой проги
Что есть глюпость.

Вот напишу по вашим примерам - выложу »
а) Все примеры в шапке.
б) Скрипт ты пишешь для себя сам.

Tco 03
26-09-2012, 15:21
в обработчике чекбокса пишешь:
Код:
case твой Чекбокс.Checked of
true : WizardForm.ComponentsList.CheckItem(0, cocheck);
false: WizardForm.ComponentsList.CheckItem(0, coUncheck);
end;
там, где нолик - порядковый номер твоего компонента. и учитывай, что нумерация начинается с нуля. »

Что-то не работает такая функция. Или Чекбокс обязательно должен находиться на SelectComponentsPage?

Gnom_aka_Lexander
26-09-2012, 15:31
Или Чекбокс обязательно должен находиться на SelectComponentsPage? »
Не обязательно. после нее тоже можно. а вот раньше - не факт - если был найден АппИД в реестре, то при входе на страницу выбора компонентов, все компоненты восстанавливаются по предидущей установке. но это только в первый раз. а потом уже должен сохраняться выбор

Ivan_009, очень просто. создаешь булевую функцию, которая отрабатывает на запуске, и исходя из ее результата используешь то, или иное оформление. если вариантов больше двух, то можно не булевую, а целочисленную. по моему это логично, само в голову просится сразу.

Ivan_009
26-09-2012, 15:48
Gnom_aka_Lexander, Примерчик не даш пожалуйста... :)

Mailchik
26-09-2012, 21:20
Ivan_009, [Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
Test : boolean;

function InitializeSetup : boolean;
begin
Test := MsgBox('Использовать стандартное оформление?', mbInformation, MB_YESNO) = idYes;
Result := True;
end;

procedure InitializeWizard;
begin
case Test of
True: begin
with WizardForm do begin
ClientWidth := ScaleX(400);
ClientHeight := ScaleX(400);
Color := clRed;
end;
end;
False: begin
with WizardForm do begin
ClientWidth := ScaleX(500);
ClientHeight := ScaleX(200);
Color := clLime;
end;
end;
end;
end;

Johny777
27-09-2012, 11:33
Нужно сделать чтобы перед появлением WizardForm появлялась, например Forma1, и только после ее закрытия появлялась WizardForm »
пример 1:

[Setup]
AppName=Reg_Path_Demo
AppVerName=Reg_Path_Demo
DefaultDirName={pf}\Reg_Path_Demo



[ code]
function CreateFormAtFirst: boolean;
var
fForm: TForm;
begin
fForm := TForm.Create(nil);
with fForm do
begin
ClientWidth := ScaleX(360);
ClientHeight := ScaleY(487);
Position := poScreenCenter;
BorderStyle := bsDialog;
Caption := 'Лучший зпголовок'


with TButton.Create(nil) do
begin
Parent := fForm;
SetBounds(fForm.ClientWidth - ScaleX(75),fForm.ClientHeight - ScaleY(30),Scalex(70),ScaleY(25));
Caption := SetupMessage(msgButtonCancel);
ModalResult := mrCancel;
Cursor := crHand;
end;

with TButton.Create(nil) do
begin
Parent := fForm;
SetBounds(fForm.ClientWidth - ScaleX(155),fForm.ClientHeight - ScaleY(30),Scalex(70),ScaleY(25));
Caption := SetupMessage(msgButtonOK);
ModalResult := mrOk;
Cursor := crHand;
end;

Result := ShowModal = mrOk;
Free;
end;
end;


function InitializeSetup(): Boolean;
begin
Result := CreateFormAtFirst;
end;


пример 2:

[Setup]
AppName=Reg_Path_Demo
AppVerName=Reg_Path_Demo
DefaultDirName={pf}\Reg_Path_Demo



[ code]
procedure InitializeWizard();
var
fForm: TForm;
begin
fForm := TForm.Create(nil);
with fForm do
begin
ClientWidth := ScaleX(360);
ClientHeight := ScaleY(487);
Position := poScreenCenter;
BorderStyle := bsDialog;
Caption := 'Лучший зпголовок'


with TButton.Create(nil) do
begin
Parent := fForm;
SetBounds(fForm.ClientWidth - ScaleX(75),fForm.ClientHeight - ScaleY(30),Scalex(70),ScaleY(25));
Caption := SetupMessage(msgButtonCancel);
ModalResult := mrCancel;
Cursor := crHand;
end;

with TButton.Create(nil) do
begin
Parent := fForm;
SetBounds(fForm.ClientWidth - ScaleX(155),fForm.ClientHeight - ScaleY(30),Scalex(70),ScaleY(25));
Caption := SetupMessage(msgButtonOK);
ModalResult := mrOk;
Cursor := crHand;
end;

ShowModal;
Free;
end;

/// остальной код

end;


в этом примере продолжению выполнения процедуры не даёт команда форме ShowModal;


Ваня!
для тебя родимого как вариант :)
если б делал выбор стилей сделал бы так:


[Setup]
AppName=Reg_Path_Demo
AppVerName=Reg_Path_Demo
DefaultDirName={pf}\Reg_Path_Demo



[ code]
var
wAnswer: Byte;
OK_Button: TButton;

procedure sComboBoxOnChange(Sedner: TObject);
begin
OK_Button.SetFocus;
end;

function AskForStyle(DefStyle:Byte;sQuestion,sStyle1,sStyle2:String):Byte;
var
sComboBox: TComboBox;
sForm: TForm;
begin
sForm := TForm.Create(nil);
with sForm do
begin
ClientWidth := ScaleX(200);
ClientHeight := ScaleY(70);
Position := poScreenCenter;
BorderStyle := bsDialog;
Caption := sQuestion;

sComboBox := TComboBox.Create(nil)
with sComboBox do
begin
Parent := sForm;
SetBounds(ScaleX(5),ScaleY(10),ScaleX(130),ScaleY(21));
Items.add(sStyle1);
Items.add(sStyle2);
Style := csDropDownList;
Cursor := crHand;
ItemIndex := DefStyle;
OnChange := @sComboBoxOnChange;
end;

with TButton.Create(nil) do
begin
Parent := sForm;
SetBounds(sForm.ClientWidth - ScaleX(75),sForm.ClientHeight - ScaleY(30),Scalex(70),ScaleY(25));
Caption := SetupMessage(msgButtonCancel);
ModalResult := mrCancel;
Cursor := crHand;
end;

OK_Button := TButton.Create(nil)
with OK_Button do
begin
Parent := sForm;
SetBounds(sForm.ClientWidth - ScaleX(155),sForm.ClientHeight - ScaleY(30),Scalex(70),ScaleY(25));
Caption := SetupMessage(msgButtonOK);
ModalResult := mrOk;
Cursor := crHand;
end;

sForm.ActiveControl := OK_Button;

if ShowModal = mrOk then Result := mrOk + sComboBox.ItemIndex else Result := 0;

Free;

end;
end;


function InitializeSetup(): Boolean;
begin
///////////////////(стиль по умолчаниб - 0 или 1//// название заголовка окна//// название первого стиля /// название второго стиля)
/// Функция вернёт число равное 0 - нажали на отмену, 1 - 1 + индекс выбранного айтема(0+1), 2 - индекс выбранного айтема
wAnswer := AskForStyle(1,'какой стиль юзать?','Стиль 1','Стить 2');
Result := wAnswer <> 0;
end;


procedure InitializeWizard();
begin
/// здесь общий код для двух стилей

if wAnswer = 1 then
begin
/// код для первого слитя

MsgBox('будет использован стиль 1', mbInformation, MB_OK);
end else
begin
/// код для вторго слитя

MsgBox('будет использован стиль 2', mbInformation, MB_OK);
end;

end;

ispolin
27-09-2012, 12:59
подскажите плиз что куда прописать

http://img837.imageshack.us/img837/259/87614951.jpg

нужно скрыть что куда распаковывается и оставить лишь надпись "Распаковка файлов..."

и ещё

http://img337.imageshack.us/img337/7807/86402742.jpg

как надпись сделать другим цветом, уж больно блёклая

R.i.m.s.k.y.
27-09-2012, 13:09
нужно скрыть что куда распаковывается и оставить лишь надпись "Распаковка файлов..."
как надпись сделать другим цветом, уж больно блёклая»

procedure InitializeWizard();
begin
//прячем имена файлов
WizardForm.FileNameLabel.Visible:= False;
//голубой цвет текста вместо блеклого
with WizardForm do begin
with BeveledLabel do begin
Font.Color:=clBlue;
Enabled:=True;
end;
end;
end;

Ivan_009
28-09-2012, 11:41
Как текструировать прогрессбар на деинсталляторе через ботву если можно пример... :) Заранее спасибо за помощь...

SatHan
28-09-2012, 12:16
привет. есть у меня дополнение Update_1.6.2 к программе. которое выполняется через секцию [run].
[Run]
Filename: {src}\Update_x.x.x.exe; Description: Update но вместо 1.6.2 может быть 1.7.0. что нужно сделать для того чтоб она выполнялась не зависимо от написанной версии в имени дополнения?

Johny777
28-09-2012, 12:36
SatHan,
я б так сделал:

[Setup]
AppName=Reg_Path_Demo
AppVerName=Reg_Path_Demo
DefaultDirName={pf}\Reg_Path_Demo

[Run]
Filename: {code:update}; Description: Update

[ code]
function update(uFile:String):String;
var
File:String;
begin
GetOpenFileName('укажите файл обновления', File, ExpandConstant('{src}'), 'файл обновления (*.exe)', '*.exe');
Result := File;
end;


Ivan_009, Посмотри. Я тебе на предыдущей странице код намутячил

Ivan_009
28-09-2012, 14:55
Johny777, А для этого примера как сделать?

Dima2009
28-09-2012, 17:41
Всем доброго времени!

Люди знающии как файл "TC.xxx" в папке "{app}\Other" ассоциировать с иконкой "Icon.ico" в папке "{app}\Icons" после завершения установки!

[Setup]
AppName=My Program
AppVersion=0.0
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=lzma2
SolidCompression=yes
OutputDir=.

[Files]
Source: {app}\Icon.ico; DestDir: {app}\Icons; Flags: ignoreversion
Source: {app}\TC.xxx; DestDir: {app}\Other; Flags: ignoreversion

[Tasks]
Name: fileassoc; Description: Ассоциировать файл (TC.xxx) с иконкой

R.i.m.s.k.y.
28-09-2012, 17:44
Dima2009, что ты понимаешь под набором словей "файл ассоциировать с иконкой"?

Dima2009
28-09-2012, 17:49
Чтобы значки у файлов с расширением ".xxx" стали как у иконки в папке "{app}\Icons"

R.i.m.s.k.y.
28-09-2012, 17:52
Dima2009,

[Setup]
AppName=My Program
AppVersion=0.0
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=lzma2
SolidCompression=yes
OutputDir=.
// говорим шеллу чтобы он переобновил ассоциации после установки
ChangesAssociations=true
ChangesEnvironment=true

[Files]
Source: {app}\Icon.ico; DestDir: {app}\Icons; Flags: ignoreversion
Source: {app}\TC.xxx; DestDir: {app}\Other; Flags: ignoreversion

[Tasks]
Name: fileassoc; Description: Ассоциировать файл (TC.xxx) с иконкой

[Registry]
// при выборе задачи "Ассоциировать файл" в реестре будет прописано
// xxxname - виндовая переменная, file xxx - название (для человеков)
Tasks: fileassoc; Root: HKCR; SubKey: .xxx; ValueType: string; ValueData: xxxname; Flags: uninsdeletekey
Tasks: fileassoc; Root: HKCR; SubKey: xxxname; ValueType: string; ValueData: file xxx; Flags: uninsdeletekey
Tasks: fileassoc; Root: HKCR; Subkey: xxxname\DefaultIcon; ValueType: string; ValueData: {app}\Icons\Icon.ico,0; Flags: uninsdeletevalue

Dima2009
28-09-2012, 18:20
Ещё вопрос, встречал интсталлятор который без файла "ярлык интернета" в одной папке пишет.
Отсутствуют некоторые файлы инсталлятора!
Установка отменена.

Как самому так сделать?

R.i.m.s.k.y.
28-09-2012, 18:33
Dima2009,

[*Code]
Function InitializeSetup: Boolean;
begin
Result := True;
If FileExists(ExpandConstant('{src}\file.log')) THEN begin
MsgBox('Отсутсвуют файлы установки!' + #13#10 + 'Установка прекращена', mbError, mb_Ok);
Result := False;
end
else Result := True;
// функция InitializeSetup - начальная, выполняется самой первой после запуска инсталлера, если она вернет false - инсталлер закроется и не пискнет
end;


______________

Что-то я подзабыл какие слова:
а) прекращают итерацию цикла и переходят на следующую итерацию
б) завершают цикл совсем досрочно
в) завершают функцию/процедуру




© OSzone.net 2001-2012