Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
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, складывается ощущение будто инсталл важнее инсталлириуемой проги
Что есть глюпость.
Вот напишу по вашим примерам - выложу »
а) Все примеры в шапке.
б) Скрипт ты пишешь для себя сам.
в обработчике чекбокса пишешь:
Код:
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;
подскажите плиз что куда прописать
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
Как текструировать прогрессбар на деинсталляторе через ботву если можно пример... :) Заранее спасибо за помощь...
привет. есть у меня дополнение 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.