|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z |
|
|
Отправлено: 16:09, 04-04-2018 |
|
Пользователь Сообщения: 98
|
Профиль | Отправить PM | Цитировать Здравствуйте! Воспользовался скинами (ISSkinU.dll и *.cjstyle), и заметил, что на странице Лицензионного соглашения, полоса прокрутки не отображается в Win 10 (виртуалка), в Win 7 отображается - как я понял это не лечится?
|
|
Отправлено: 20:44, 07-11-2018 | #141 |
|
Пользователь Сообщения: 98
|
Профиль | Отправить PM | Цитировать Здравствуйте! Потихоньку (очень потихоньку) пытаюсь вникнуть в Inno Setup, больше методом научного тыка на примерах, из одного примера взял КОД, в меру своих сил подредактировал его.
Скрытый текст
[Files]
Source: "{app}\Win_7.txt"; DestDir: "{app}"; Check:
Source: "{app}\Win_10.txt"; DestDir: "{app}"; Check:
Source: "{app}\Win_10_2.txt"; DestDir: "{app}"; Check:
Source: "{app}\Dop_Win_7.txt"; DestDir: "{app}"; Check:
[Code_]
var
Check: array [0..3] of TCheckBox;
procedure Check0(Sender: TObject);
begin
if Check[0].Checked then
begin
Check[1].Checked := False;
Check[2].Checked := False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[0].Checked := True;
end;
procedure Check1(Sender: TObject);
begin
if Check[1].Checked then
begin
Check[0].Checked := False;
Check[2].Checked := False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[1].Checked := True;
end;
procedure Check2(Sender: TObject);
begin
if Check[2].Checked then
begin
Check[0].Checked := False;
Check[1].Checked := False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[2].Checked := True;
end;
procedure Check3(Sender: TObject);
begin
if Check[3].Checked then
end;
procedure InitializeWizard();
begin
Check[0] := TCheckBox.Create(WizardForm);
with Check[0] do
begin
Parent := WizardForm.SelectTasksPage;
Checked := True;
Left:=ScaleX(4);
Top := ScaleY(90);
Width:=ScaleX(280);
OnClick := @Check0;
// Будет Win_7.txt
Caption := ' Стандартные иконки в стиле Win 7';
end;
Check[1] := TCheckBox.Create(WizardForm);
with Check[1] do
begin
Parent := WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top := ScaleY(115);
Width:=ScaleX(280);
OnClick := @Check1;
// Будет Win_10.txt
Caption := ' Стандартные иконки в стиле Win 10';
end;
Check[2] := TCheckBox.Create(WizardForm);
with Check[2] do
begin
Parent := WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top := ScaleY(140);
Width:=ScaleX(350);
OnClick := @Check2;
// Будет Win_10_2.txt
Caption := ' Станадартные иконки в стиле Win 7 + Win 10';
end;
Check[3] := TCheckBox.Create(WizardForm);
with Check[3] do
begin
Parent := WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top := ScaleY(165);
Width:=ScaleX(280);
OnClick := @Check3;
// Будет Dop_Win_7.txt
Caption := ' Дополнительные иконки в стиле Win 7';
end;
end;
А вот как "привязать" чекбоксы к файлам, ума не приложу, что-то мне подсказывает, что через "function" нужно, но вот как, тяму не хватает, картина как разобранная мозаика, там что-то понимаю, здесь о чём-то догадываюсь. Господа, направьте на путь истинный. |
|
Отправлено: 20:51, 18-11-2018 | #142 |
|
Старожил Сообщения: 440
|
Профиль | Сайт | Отправить PM | Цитировать Chudmin,
|
|
------- Отправлено: 21:25, 19-11-2018 | #143 |
|
Пользователь Сообщения: 98
|
Профиль | Отправить PM | Цитировать nik1967, большое Вам спасибо! Теперь более менее понятно как оно организовано.
Через секцию Components я это уже организовал по Справке, но мне захотелось понять, как это организовать через чекбоксы. Правда я забыл сказать, что из первых трёх чекбоксов должен быть выбран обязательно только какой-то один, а четвёртый по желанию, без привязки к первым трём. Надеюсь я правильно сделал? Скрытый текст
[Code_]
var
Check: array [0..3] of TCheckBox;
function Check_0(): Boolean;
begin
Result:= Check[0].Checked;
end;
function Check_1(): Boolean;
begin
Result:= Check[1].Checked;
end;
function Check_2(): Boolean;
begin
Result:= Check[2].Checked;
end;
function Check_3(): Boolean;
begin
Result:= Check[3].Checked;
end;
procedure Check0(Sender: TObject);
begin
if Check[0].Checked then begin
Check[1].Checked:= False;
Check[2].Checked:= False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) then Check[0].Checked:= True;
end;
procedure Check1(Sender: TObject);
begin
if Check[1].Checked then begin
Check[0].Checked:= False;
Check[2].Checked:= False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) then Check[1].Checked := True;
end;
procedure Check2(Sender: TObject);
begin
if Check[2].Checked then begin
Check[0].Checked:= False;
Check[1].Checked:= False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) then Check[2].Checked:= True;
end;
procedure Check3(Sender: TObject);
begin
if Check[3].Checked then
end;
procedure InitializeWizard();
begin
Check[0]:= TCheckBox.Create(WizardForm);
with Check[0] do begin
Parent:= WizardForm.SelectTasksPage;
Checked:= True;
Left:=ScaleX(4);
Top:= ScaleY(90);
Width:=ScaleX(280);
OnClick:= @Check0;
// Будет Win_7.txt
Caption:= ' Стандартные иконки в стиле Win 7';
end;
Check[1]:= TCheckBox.Create(WizardForm);
with Check[1] do begin
Parent:= WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top:= ScaleY(115);
Width:=ScaleX(280);
OnClick:= @Check1;
// Будет Win_10.txt
Caption:= ' Стандартные иконки в стиле Win 10';
end;
Check[2]:= TCheckBox.Create(WizardForm);
with Check[2] do begin
Parent:= WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top:= ScaleY(140);
Width:=ScaleX(350);
OnClick:= @Check2;
// Будет Win_10_2.txt
Caption:= ' Станадартные иконки в стиле Win 7 + Win 10';
end;
Check[3]:= TCheckBox.Create(WizardForm);
with Check[3] do begin
Parent:= WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top:= ScaleY(165);
Width:=ScaleX(280);
OnClick:= @Check3;
// Будет Dop_Win_7.txt
Caption:= ' Дополнительные иконки в стиле Win 7';
end;
end;
|
|
Отправлено: 22:45, 19-11-2018 | #144 |
|
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 23:12, 19-11-2018 | #145 |
|
Ветеран Сообщения: 863
|
Профиль | Отправить PM | Цитировать Вставлю свои пять копеек
![]() Цитата Chudmin:
Цитата Chudmin:
Example
[Setup]
AppName=app
AppVersion=app 1.0
DefaultDirName={pf}\app
[Files]
Source: "{app}\Win_7.txt"; DestDir: "{app}"; Check: Check0();
Source: "{app}\Win_10.txt"; DestDir: "{app}"; Check: Check1();
Source: "{app}\Win_10_2.txt"; DestDir: "{app}"; Check: Check2();
Source: "{app}\Dop_Win_7.txt"; DestDir: "{app}"; Check: Check3();
[Code]
var
Check: array [0..3] of TCheckBox;
function Check0(): boolean;
begin
Result := Check[0].Checked;
end;
function Check1(): boolean;
begin
Result := Check[1].Checked;
end;
function Check2(): boolean;
begin
Result := Check[2].Checked;
end;
function Check3(): boolean;
begin
Result := Check[3].Checked;
end;
procedure GetCheck(Sender: TObject);
begin
case sender of
Check[0]: begin if Check[0].Checked then begin Check[1].Checked := False; Check[2].Checked := False; end; end;
Check[1]: begin if Check[1].Checked then begin Check[2].Checked := False; Check[0].Checked := False; end; end;
Check[2]: begin if Check[2].Checked then begin Check[1].Checked := False; Check[0].Checked := False; end; end;
end;
end;
procedure InitializeWizard();
begin
Check[0] := TCheckBox.Create(WizardForm);
with Check[0] do
begin
Parent := WizardForm.SelectDirPage;
Checked := True;
Left:=ScaleX(4);
Top := ScaleY(100);
Width:=ScaleX(280);
OnClick := @GetCheck;
// Будет Win_7.txt
Caption := ' Стандартные иконки в стиле Win 7';
end;
Check[1] := TCheckBox.Create(WizardForm);
with Check[1] do
begin
Parent := WizardForm.SelectDirPage;
Left:=ScaleX(4);
Top := ScaleY(125);
Width:=ScaleX(280);
OnClick := @GetCheck;
// Будет Win_10.txt
Caption := ' Стандартные иконки в стиле Win 10';
end;
Check[2] := TCheckBox.Create(WizardForm);
with Check[2] do
begin
Parent := WizardForm.SelectDirPage;
Left:=ScaleX(4);
Top := ScaleY(150);
Width:=ScaleX(350);
OnClick := @GetCheck;
// Будет Win_10_2.txt
Caption := ' Станадартные иконки в стиле Win 7 + Win 10';
end;
Check[3] := TCheckBox.Create(WizardForm);
with Check[3] do
begin
Parent := WizardForm.SelectDirPage;
Left:=ScaleX(4);
Top := ScaleY(175);
Width:=ScaleX(280);
// Будет Dop_Win_7.txt
Caption := ' Дополнительные иконки в стиле Win 7';
end;
end;
Цитата ErikPshat:
|
|||
|
------- Отправлено: 23:29, 19-11-2018 | #146 |
|
Старожил Сообщения: 440
|
Профиль | Сайт | Отправить PM | Цитировать Dodakaedr,
ну если уж сокращать, то
procedure GetCheck(Sender: TObject);
begin
case sender of
Check[0]: if Check[0].Checked then begin Check[1].Checked := False; Check[2].Checked := False; end;
Check[1]: if Check[1].Checked then begin Check[2].Checked := False; Check[0].Checked := False; end;
Check[2]: if Check[2].Checked then begin Check[1].Checked := False; Check[0].Checked := False; end;
end;
end;
![]() Цитата ErikPshat:
Цитата Dodakaedr:
|
||
|
------- Последний раз редактировалось nik1967, 20-11-2018 в 11:14. Отправлено: 11:04, 20-11-2018 | #147 |
|
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Цитата nik1967:
А ещё лучше и нагляднее сократить без правок начало кода:
[ Code ] var Check: array [0..3] of TCheckBox; function Check0(): boolean; begin Result := Check[0].Checked; end; function Check1(): boolean; begin Result := Check[1].Checked; end; function Check2(): boolean; begin Result := Check[2].Checked; end; function Check3(): boolean; begin Result := Check[3].Checked; end; Цитата nik1967:
if MsgBox(ExpandConstant('Выбрана следующая папка :')+#10#10+FolderName+#10#10+ExpandConstant('Вы хотите упаковать папку в PKG менее 4 ГБ?'), mbInformation, MB_YESNO) = IDYES then
Скрин, где вместо 4 ГБ хочу поставить 3 чекбокса:
Есть какой-то готовый вариант для подобного MessageBox? А то у меня уже голова не шарит. |
||
|
Последний раз редактировалось ErikPshat, 20-11-2018 в 13:59. Отправлено: 13:40, 20-11-2018 | #148 |
|
Старожил Сообщения: 440
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ErikPshat:
Набросал на скорую руку пример
[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.
[Code]
var
NewButton1: TNewButton;
NewForm: TSetupForm;
YesButton: TNewButton;
NoButton: TNewButton;
Check: array [0..3] of TCheckBox;
procedure NewFormButtonClick(Sender: TObject);
begin
case TNewButton(Sender) of
YesButton: MsgBox('Запустилась упаковка.', mbInformation, MB_OK); // Сюда вешаешь выполнение, если да
NoButton: MsgBox('Ничего не произошло.', mbInformation, MB_OK); // Сюда, если нет
end;
NewForm.Close;
end;
procedure GetCheck(Sender: TObject);
begin
case sender of
Check[0]: if Check[0].Checked then begin Check[1].Checked:= False; Check[2].Checked:= False; end;
Check[1]: if Check[1].Checked then begin Check[2].Checked:= False; Check[0].Checked:= False; end;
Check[2]: if Check[2].Checked then begin Check[1].Checked:= False; Check[0].Checked:= False; end;
end;
end;
procedure TestOnClick(Sender: TObject);
begin
NewForm:= CreateCustomForm();
with NewForm do begin
ClientWidth:= ScaleX(473);
ClientHeight:= ScaleY(233);
BorderIcons:= [];
Caption:= 'Тест';
Color:= clWindow;
CenterInsideControl(WizardForm, False);
end;
with TLabel.Create(NewForm) do begin
Parent:= NewForm;
SetBounds(ScaleX(-1), ScaleY(187), ScaleX(475), ScaleY(47));
Transparent:= false;
Color:= clBtnFace;
end;
with TLabel.Create(NewForm) do begin
Parent:= NewForm;
SetBounds(ScaleX(60), ScaleY(10), ScaleX(400), ScaleY(80));
AutoSize:= False;
Caption:= 'Вы хотите упаковать папку в PKG?';
end;
Check[0]:= TCheckBox.Create(NewForm);
with Check[0] do begin
Parent:= NewForm;
Checked:= True;
Left:=ScaleX(60);
Top:= ScaleY(90);
Width:=ScaleX(280);
OnClick:= @GetCheck;
Caption:= ' Тест 1';
end;
Check[1]:= TCheckBox.Create(NewForm);
with Check[1] do begin
Parent:= NewForm;
Left:=ScaleX(60);
Top:= ScaleY(115);
Width:=ScaleX(280);
OnClick:= @GetCheck;
Caption:= ' Тест 2';
end;
Check[2]:= TCheckBox.Create(NewForm);
with Check[2] do begin
Parent:= NewForm;
Left:=ScaleX(60);
Top:= ScaleY(140);
Width:=ScaleX(280);
OnClick:= @GetCheck;
Caption:= ' Тест 3';
end;
YesButton:= TNewButton.Create(NewForm);
with YesButton do begin
Parent:= NewForm;
SetBounds(ScaleX(304), ScaleY(200), ScaleX(75), ScaleY(23));
OnClick:= @NewFormButtonClick;
Caption:= SetupMessage(msgButtonYes);
end;
NoButton := TNewButton.Create(NewForm);
with NoButton do begin
Parent:= NewForm;
SetBounds(ScaleX(389), ScaleY(200), ScaleX(75), ScaleY(23));
OnClick:= @NewFormButtonClick;
Caption:= SetupMessage(msgButtonNo);
end;
NewForm.ShowModal;
NewForm.Free;
end;
procedure InitializeWizard();
begin
NewButton1:= TNewButton.Create(WizardForm);
with NewButton1 do
begin
Parent:= WizardForm;
SetBounds(ScaleX(10),ScaleY(327),ScaleX(75),ScaleY(23));
Caption:= 'Тест';
OnClick:= @TestOnClick;
end;
end;
И да, зачем ты в MsgBox пихаешь ExpandConstant? Совершенно лишнее. |
|
|
------- Последний раз редактировалось nik1967, 20-11-2018 в 16:04. Отправлено: 15:10, 20-11-2018 | #149 |
|
Пользователь Сообщения: 54
|
Профиль | Отправить PM | Цитировать Цитата nik1967:
Правда я хотел, чтобы это было именно так, как я указал на скриншоте. Я думал, если не получается вставить чекбоксы напрямую в MsgBox, тогда создать новую форму именно такого же MsgBox под замену с чекбоксами и подменить стандартный. Либо наверное лучше было бы вместо чекбоксов сделать там раскрывающийся список. У вас же выходит кнопкой, опять же на том окне выбора папки. И мне кажется, тогда открывающееся окно по кнопке будет лишним. Я решил тогда уж сразу использовать ранее предложенное решение на окне выбора папки с чекбоксами, так будет более разумнее с меньшим количеством телодвижений. То есть, в своей проге я откачусь назад на один шаг, где идёт выбор папки и там сразу буду отмечать размеры делений по ГБ. А в MsgBox, как на скрине, буду автоматом отображать выбранный ранее размер. Только мне нужно заменить, в окне выбора папки, кнопки "Далее >" и "Отмена" на кнопки "Да" и "Нет", потому что у меня не инсталлятор, а как бы авторан. Может вы мне подскажете, как это нужно организовать? Я просто сам только пару месяцев, как заинтересовался Inno Setup. |
|
|
Отправлено: 16:23, 20-11-2018 | #150 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Скрипты Inno Setup. Помощь и советы [часть 7] | El Sanchez | Автоматическая установка приложений | 2499 | 02-02-2015 08:59 | |
| Скрипты Inno Setup. Помощь и советы [часть 6] | El Sanchez | Автоматическая установка приложений | 2494 | 10-03-2014 11:51 | |
| Скрипты Inno Setup. Помощь и советы [часть 5] | El Sanchez | Автоматическая установка приложений | 1999 | 28-03-2013 19:09 | |
| Скрипты Inno Setup. Помощь и советы [часть 4] | El Sanchez | Автоматическая установка приложений | 2099 | 22-05-2012 23:16 | |
| Скрипты Inno Setup. Помощь и советы [часть 3] | Serega | Автоматическая установка приложений | 3755 | 26-10-2011 17:58 | |
|