|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1269 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме 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 |
![]() Ветеран Сообщения: 858
|
Профиль | Отправить 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 |
|