PDA

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


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

El Sanchez
04-04-2018, 16:09
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы (http://forum.oszone.net/showthread.php?p=1201499#post1201499).



Русская справка Inno Setup к версии 5.6.1 (https://cloud.mail.ru/public/Crnh/sgc4nRjkd)|5.6.1 (https://yadi.sk/d/cUNPM8wtuWPvJ), 6.0.0-beta (https://yadi.sk/d/QuajazKsip1s6A), авторы перевода bugron (http://forum.ru-board.com/profile.cgi?action=show&member=bugron), BagIra (http://forum.ru-board.com/profile.cgi?action=show&member=BagIra);

Русская справка Inno Setup Preprocessor (ISPP) к версии 5.6.1 (https://yadi.sk/d/aIme10_Lk0z1mQ/ISPP/v5.6.1), 6.0.0 (https://yadi.sk/d/aIme10_Lk0z1mQ/ISPP/v6.0.0), 6.0.3 (https://yadi.sk/d/aIme10_Lk0z1mQ/ISPP/v6.0.3), автор перевода Leserg;

Inno Setup Extensions Knowledge Base (http://www.vincenzo.net/isxkb/index.php?title=Special:AllPages) - онлайн справочник, содержит ответы на многие вопросы | старая chm-версия (http://www.vincenzo.net/isxkb/images/5/57/Isxkbchm.zip);

Коллекция скриптов (http://victor-dobrov.narod.ru/InnoSetupScripts.7z) | Сборник вопросов (http://victor-dobrov.narod.ru/InnoSetupFAQ_ru-board.chm);

Сборник скриптов (http://narod.ru/disk/7844921001/Inno%20Faq%201.4.chm.html) в формате .chm от Krinkels (http://www.forum.oszone.ru/member.php?userid=223950);

Cборник скриптов и примеров (http://krinkels.org/showthread.php?t=7) с сайта krinkels.org (http://krinkels.org);




Компоненты основных страниц (http://forum.oszone.net/post-1096943-634.html), (ссылка на сообщение);
Бегущая строка (http://www.forum.oszone.ru/post-1071300-518.html) - бегущая строка на WizardForm, (ссылка на сообщение);
Эффект печатной машинки (http://www.forum.oszone.ru/post-1082174-553.html) - текст на WizardForm появляется по одной букве, (ссылка на сообщение);
Ultimate Test (http://www.forum.oszone.ru/post-1212059-48.html) - проверка системных требований для инсталлятора с чёрным фоном, (ссылка на сообщение);
Проверка системных требований (http://www.forum.oszone.ru/post-1230777-185.html) - пример проверки системных требований без get_hw_caps.dll, (ссылка на сообщение);
Картинка на страницах инсталлятора (http://www.forum.oszone.ru/post-1242285-250.html) - пример скрипта, показывающий как растянуть стандартную картинку на всю страницу, (ссылка на сообщение);
Наложение изображений на стандартные кнопки (http://forum.oszone.net/post-1902066-1569.html) - пример, показывающий как использовать свои изображения на кнопках, (ссылка на сообщение);
Анимированный баннер (http://forum.oszone.net/post-2808328-19.html) - анимированный баннер на форме, (ссылка на сообщение);
Свой шрифт в инсталляторе (вариант №1) (http://forum.oszone.net/post-1875376-964.html) - пример скрипта для использования своего шрифта в инсталляторе, (ссылка на сообщение);
Свой шрифт в инсталляторе (вариант №2) (http://forum.oszone.net/post-1973652-702.html) - пример скрипта для использования своего шрифта в инсталляторе, (ссылка на сообщение);
Изменение размера окна инсталлятора (http://forum.oszone.net/post-2445288-2190.html) - пример скрипта для изменения размера окна инсталлятора вместе с элементами управления, (ссылка на сообщение);
Липкая форма (http://forum.oszone.net/post-2620272-1456.html) - пример реализации прилипания формы к краям экрана, (ссылка на сообщение);
Лечим баги: TNewCheckListBox и скин (http://forum.oszone.net/post-2308009-2259.html) - исправление пропадания полос прокрутки в TNewCheckListBox при использовании ISSkin.dll, (ссылка на сообщение);
Лечим баги: TNewCheckListBox и TreeViewStyle (http://forum.oszone.net/post-2479462-253.html) - исправление бага в TNewCheckListBox с выставленным в True свойством TreeViewStyle, при котором нельзя выбрать элемент мышкой, (ссылка на сообщение);
Цвет прогресс-бара (http://forum.oszone.net/post-1693828-1893.html) - пример скрипта для замены цвета прогресс-бара на свой, (ссылка на сообщение);
Создание кастомного прогресс-бара (http://www.forum.oszone.ru/post-1281679-544.html) - имитация кастомного прогресс-бара, (ссылка на сообщение);
Создание кастомного чекбокса (http://forum.oszone.net/post-1798150-166.html) - пример скрипта для создания своего чекбокса, всего 12 состояний, (ссылка на сообщение);
Создание кастомного диалогового окна (http://forum.oszone.net/post-2043384-1383.html) - пример скрипта для создания своего диалогового окна, (ссылка на сообщение);
Смена цвета диалогового окна (http://forum.oszone.net/post-2618365-1445.html) - пример скрипта для смены цвета диалогового окна, (ссылка на сообщение);
Закрашивание фона кнопок (http://forum.oszone.net/post-2184424-770.html) - пример скрипта для закрашивания заднего фона кнопок (актуально для ANSI), (ссылка на сообщение);
Закрашивание фона страниц (http://forum.oszone.net/post-2354722-752.html) - пример скрипта для закрашивания заднего фона страниц инсталлятора, (ссылка на сообщение);
Комбинированный список с иконками (http://forum.oszone.net/post-2632484-1532.html) - пример использования комбинированного списка ComboBoxEx с иконками, (ссылка на сообщение);
Видео на фоновом окне (http://forum.oszone.net/post-1797189-152.html) - пример скрипта для воспроизведения стандартного avi-файла на фоновом окне инсталлятора, (ссылка на сообщение);
Скрипты инсталляторов для игр (http://forum.ru-board.com/topic.cgi?forum=5&topic=36421&start=0&limit=1&m=6#1) - скрипты инсталляторов для игр, (ссылка на сообщение);
Выделение всех компонентов (http://www.forum.oszone.ru/post-1276947-444.html) - пример показывает как выделить или снять отметки со всех компонентов одной кнопкой, (ссылка на сообщение);
Запрет установки в корень системного диска (http://www.forum.oszone.ru/post-1210003-46.html), (ссылка на сообщение);
Автовыбор диска установки (http://www.forum.oszone.ru/post-1217528-97.html) - определяет логические диски на компьютере и предлагает установить на первый логический диск не являющийся системным, (ссылка на сообщение);
Распаковка архивов FreeArc (http://www.forum.oszone.ru/post-1300871-729.html) - новая версия скриптов для распаковки архивов FreeArc, (ссылка на сообщение);
Работа с архивами 7z (http://forum.oszone.net/post-2012750-1182.html) - пример скрипта для работы с архивами 7z, (ссылка на сообщение);
Проверка на кирилицу в пути установки (вариант №1) (http://forum.oszone.net/post-1891325-1357.html) - пример скрипта для проверки наличия кириллицы в пути установки, (ссылка на сообщение);
Проверка на кирилицу в пути установки (вариант №2) (http://forum.oszone.net/post-1891353-1361.html) - пример скрипта для проверки наличия кириллицы в пути установки, (ссылка на сообщение);
Проверка на кирилицу в пути установки (вариант №3) (http://forum.oszone.net/post-1904620-1632.html) - пример скрипта для проверки наличия кириллицы в пути установки, (ссылка на сообщение);
Выкатывающаяся панель (вариант №1) (http://forum.oszone.net/post-1904450-1629.html) - пример создания выкатывающейся панели, (ссылка на сообщение);
Выкатывающаяся панель (вариант №2) (http://forum.oszone.net/post-1917798-2074.html) - пример создания выкатывающейся панели, (ссылка на сообщение);
Выкатывающаяся панель (вариант №3) (http://forum.oszone.net/post-2003766-1118.html) - пример создания выкатывающейся панели, (ссылка на сообщение);
Предосмотр компонентов (http://forum.oszone.net/post-2169372-662.html) - пример создания предосмотра устанавливаемых компонентов в всплывающем окне, (ссылка на сообщение);
Создание заставки SplashScreen (http://forum.oszone.net/post-2429012-1942.html) - пример создания заставки SplashScreen на основе растровых изображений, (ссылка на сообщение);
Анимированный баннер (http://forum.oszone.net/post-2808328-19.html) - пример создания баннера на основе анимированных gif-файлов, (ссылка на сообщение);
Стандартные папки Windows (http://www.forum.oszone.ru/post-1218002-103.html) - пример скрипта, позволяющий получить путь к стандартным папкам Windows, (ссылка на сообщение);
ExecAndWait.iss (http://forum.oszone.net/post-1325616-881.html) - скрипт, который позволяет запускать другие программы с ожиданием их завершения и при этом инсталлятор остаётся "живым", т.е. отвечает на действия пользователя, (ссылка на сообщение);
Проверка наличия .NET Framework (http://forum.oszone.net/post-1574554-263.html) - пример проверки и загрузки в случае отсутствия .NET Framework'a, (ссылка на сообщение);
MsiQueryProductState.iss (http://forum.oszone.net/post-1731731-2725.html) - пример скрипта для проверки установки программы, установленной с помощью Windows Installer, (ссылка на сообщение);
Определение информации о версии файла (http://forum.oszone.net/post-1643761-1146.html) - пример скрипта для определения информации о версии файла, которую можно посмотреть в свойствах файла на вкладке Версия, (ссылка на сообщение);
Поиск файла по маске (http://www.forum.oszone.ru/post-1351758-1312.html), (ссылка на сообщение);
Спрятать окно инсталлятора (http://www.forum.oszone.ru/post-1475670-2201.html) - спрятать окно инсталлятора без использования параметров командной строки /SILENT, /VERYSILENT, (ссылка на сообщение);
Окно инсталлятора поверх всех остальных (http://forum.oszone.net/post-1628287-1031.html) - окно инсталлятора поверх всех остальных, (ссылка на сообщение);
Замена меню "О программе" (http://forum.oszone.net/post-1660375-1363.html) - пример скрипта для замены текста меню "О программе", (ссылка на сообщение);
Отключить сообщение о нехватке места на HDD (http://forum.oszone.net/post-1839804-655.html) - пример скрипта для отключения сообщения о нехватке места на HDD. С небольшими изменениями может использоваться для отключения и других сообщений, вызванных внутренними обработчиками Inno, (ссылка на сообщение);
Многостраничный деинсталлятор (http://forum.oszone.net/post-2213049-1092.html) - пример скрипта для создания своих страниц в деинсталляторе, (ссылка на сообщение);
Отображение размера устанавливаемого файла (http://forum.oszone.net/post-1882481-1175.html) - пример скрипта для приведения размера устанавливаемого файла из байтовой формы в удобочитаемую (вариант №1) и отображения на втором прогрессбаре, (ссылка на сообщение);
Перевод размера файла в удобочитаемую форму (http://forum.oszone.net/post-1882594-1184.html) - пример скрипта для приведения размера файла из байтовой формы в удобочитаемую (вариант №2), (ссылка на сообщение);
Использование объекта FileSystemObject (http://forum.oszone.net/post-1998107-1061.html) - примеры использования методов и свойств объекта FileSystemObject, (ссылка на сообщение);
Копирование файлов с прогрессом (http://forum.oszone.net/post-2032676-1327.html) - пример скрипта для копирования файлов и директорий с отображением прогресса операции, маски поддерживаются, (ссылка на сообщение);
Отображение процентов при (де)инсталляции (http://forum.oszone.net/post-2124681-69.html) - пример скрипта для отображения процентов прогресса удаления/копирования файлов при (де)инсталляции, (ссылка на сообщение);
ConvertString.iss (http://forum.oszone.net/post-1643707-1144.html) - пример скрипта для конвертирование строк в различные кодировки, (ссылка на сообщение);
Работа с XML (http://forum.oszone.net/post-1798658-175.html) - архив с скриптами для работы с xml-документами, (ссылка на сообщение);
SetRestorePoint.iss (http://forum.oszone.net/post-1648495-1205.html) - пример скрипта для создания контрольной точки перед установкой, (ссылка на сообщение);
Определение локального IP-адреса (WMI) (http://forum.oszone.net/post-1669020-1496.html) - пример скрипта для определения локальных IPv4, IPv6-адресов машины (используется WMI), (ссылка на сообщение);
Определение внешнего IP-адреса (http://forum.oszone.net/post-1648368-1204.html) - пример скрипта для определения внешнего IP-адреса машины, на которой запущен инсталлятор (необходимо соединение с интернетом), (ссылка на сообщение);
IsInternetActive.iss (http://forum.oszone.net/post-1860073-827.html) - пример скрипта для определения подключения машины к Интернет, (ссылка на сообщение);
Загрузка файла из Интернет (http://forum.oszone.net/post-2267694-1626.html) - пример скрипта для загрузки файла из Интернет, один поток без докачки, (ссылка на сообщение);
Запущен ли процесс (WMI) (http://forum.oszone.net/post-1685154-1693.html) - пример скрипта для определения запущен ли определенный процесс в системе, используя WMI, (ссылка на сообщение);
Запущен ли процесс (http://forum.oszone.net/post-1800689-218.html) - пример скрипта для определения запущен ли определенный процесс в системе, (ссылка на сообщение);
Закрытие процесса (http://forum.oszone.net/post-2401734-1524.html) - пример скрипта для закрытия запущенного процесса, (ссылка на сообщение);
Закрепить ярлык на панели задач/стартовом меню в Windows 7 и выше (http://forum.oszone.net/post-2908907-559.html) - пример закрепления ярлыка приложения на панели задач или стартовом меню в Windows 7 и выше, (ссылка на сообщение);
Установка гаджета в Windows 7 (http://forum.oszone.net/post-1861100-834.html) - пример установки гаджета в Windows 7 (требуется юникодная версия Inno), (ссылка на сообщение);
Установка драйвера устройства (http://forum.oszone.net/post-1674976-1599.html) - пример скрипта для установки legacy- и WDM- (требуется утилита devcon.exe) драйверов устройств, (ссылка на сообщение);




ISTool (http://sourceforge.net/projects/istool/) - неплохой редактор скриптов Inno Setup.
Последняя версия: 5.3.0.1 [29.09.2009] - Скачать (http://sourceforge.net/projects/istool/files/istool-5.3.0.1.exe/download) | зеркало (http://sourceforge.net/settings/mirror_choices?projectname=istool&filename=istool-5.3.0.1.exe);


Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
Последняя версия: 1.0.3.1 [23.03.2008] - Скачать (http://www.freedownloadsplace.com/Inno-Script-Generator-Download-31392.htm) | зеркало на русифицированную программу (http://ifolder.ru/21111525);
Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.


Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
Последняя версия: 2.0.8 [12.11.2006] - Скачать (http://www.mediafire.com/?2m65h5urdcmxrjg);
Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.


Inno Setup GameScript Generator (http://forum.csmania.ru/viewtopic.php?f=38&t=4688) - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;


ISSkin (http://isskin.codejock.com/) - Программа для создания и добавления в инсталлятор скинов. Инструкция (http://isskin.codejock.com/gettingstarted.asp).
Последняя версия: 3.0.0.0 [19.01.2010] - Скачать (http://isskin.codejock.com/downloads/ISSkinExample.zip);


ISSJoiner (http://issjoiner.codeplex.com/) - Программа для объединения нескольких скриптов InnoSetup в один.
Последняя версия: 3.0 [23.07.2009]


Converter (http://forum.oszone.net/post-1216149-86.html) - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
Последняя версия: 0.1.4 [13.03.2010] - Скачать (http://forum.oszone.net/attachment.php?attachmentid=41380&d=1268419710);


RegExporter (http://mitrichsoftware.wordpress.com/inno-setup-tools/regexporter/) - Бесплатная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
Последняя версия: 1.3.0 [17.01.2015] - Скачать (https://yadi.sk/d/BY-eOghje3XmN);


[hr]
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Inno Setup [все вопросы] часть 1 (http://forum.oszone.net/thread-60604.html)
Скрипты Inno Setup. Помощь и советы [часть 2] (http://forum.oszone.net/thread-148703.html)
Скрипты Inno Setup. Помощь и советы [часть 3] (http://forum.oszone.net/thread-190621.html)
Скрипты Inno Setup. Помощь и советы [часть 4] (http://forum.oszone.net/thread-218969.html)
Скрипты Inno Setup. Помощь и советы [часть 5] (http://forum.oszone.net/thread-235078.html) | 152034

Скрипты Inno Setup. Помощь и советы [часть 6] (http://forum.oszone.net/thread-257328.html) | 152035
Скрипты Inno Setup. Помощь и советы [часть 7] (http://forum.oszone.net/thread-278998.html) | 152036
Скрипты Inno Setup. Помощь и советы [часть 8] (http://forum.oszone.net/thread-294838.html) | 152037

ABBAT
04-04-2018, 21:00
Привет всем. Как можно определить системный диск ({sd}) ssd или hdd.
Что-то вроде этого:
if ssd then
....
else
....
end
El Sanchez,
прилипание мастер формы к краям экранаОтличный скрипт. Спасибо.

Хмм... нашёл пока на AutoIt3 (в.3.3.14.2) подогнал под себя, вроде работает. Может кому пригодится для установки Windows.

#NoTrayIcon
$Gui = @SW_HIDE

; Some constants
Const $DT_DRIVETYPE = 1
Const $DT_SSDSTATUS = 2
Const $DT_BUSTYPE = 3

; Drive letter to check
Const $DriveLetter = @homedrive;

$ssd = DriveGetType($DriveLetter, $DT_SSDSTATUS)
If $ssd <> "" Then
Run(@ComSpec & ' /C ssd.bat', '', @SW_HIDE) ;@SW_SHOW
Else
Exit
EndIf

Хотелось бы на Inno но... на безрыбье .... )

TheLeon
05-04-2018, 20:38
habib2302,
Из кода удалите строку WizardForm.TypesCombo.Visible := False;. В строке WizardForm.ComponentsList.Top := ScaleX(15); замените на 26 и добавьте эту строку в InitializeWizard WizardForm.TypesCombo.Top := ScaleY(0); Спасибо, выбор типа установки работает, правда, возникла другая проблема: половину вкладки выбора закрывает задний фон, хотя сделал всё, как вы сказали. Это придётся мне уменьшать размер списка компонентов и превью компонента?
152052

habib2302
05-04-2018, 20:51
Это придётся мне уменьшать размер списка компонентов и превью компонента? »
да.

TheLeon
06-04-2018, 16:10
habib2302, ещё раз здравствуй, возникла проблема с надписью "Сделано кем-то..." и т.д., с каждым переходом на следующую страницу накладывается слой этого же текста..
пусто

А также второй вопрос: сделал, как вы сказали, сместил список компонентов и их превью, но все равно половину вкладки выбора типа установки перекрывает. Скорее всего это место было для инструкции, пример: "выберите из списка нужный компонент....", если это так, то можно ли это убрать? Заранее спасибо.

habib2302
06-04-2018, 16:49
А также второй вопрос: сделал, как вы сказали, сместил список компонентов и их превью, но все равно половину вкладки выбора типа установки перекрывает. Скорее всего это место было для инструкции, пример: "выберите из списка нужный компонент....", если это так, то можно ли это убрать? Заранее спасибо. »
добавьте в InitializeWizard эту строку WizardForm.SelectComponentsLabel.Hide
возникла проблема с надписью "Сделано кем-то..." и т.д., с каждым переходом на следующую страницу накладывается слой этого же текста.. »
у вас же в примере все понятно расписано.
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Parent := WizardForm;
Caption := 'Сделано в фирме TheLeon';
SetBounds(ScaleX(16),ScaleY(330),ScaleX(132),ScaleY(13));
end;
должен быть в процедуре InitializeWizard, а у вас он каким то образом оказался в функции NextButtonClick и
Image1 := TBitmapImage.Create(WizardForm);
with Image1 do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(0),ScaleY(110),ScaleX(417),ScaleY(140));
ExtractTemporaryFile('BMP.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\BMP.bmp'));
end;
и
WizardForm.SelectDirBitmapImage.Hide;
WizardForm.DiskSpaceLabel.Hide;
WizardForm.SelectDirLabel.SetBounds(ScaleX(0),ScaleY(9),ScaleX(417),ScaleY(14));
тоже должен быть в процедуре InitializeWizard

TheLeon
06-04-2018, 18:43
habib2302, обращаюсь ещё раз, всё сделал, но текст не передвинулся, опять накосячил где-то? (см.скрин 1)

P.S: за остальное же спасибо, слепой, что с меня взять...
пусто

habib2302
06-04-2018, 19:16
всё сделал, но текст не передвинулся, опять накосячил где-то? »
по поводу текста вы у меня не спрашивали.
вот добавьте это в InitializeWizard
WizardForm.DirBrowseButton.SetBounds(ScaleX(342),ScaleY(36),ScaleX(75),ScaleY(23));
WizardForm.DirEdit.SetBounds(ScaleX(0),ScaleY(37),ScaleX(332),ScaleY(21));
WizardForm.SelectDirBrowseLabel.SetBounds(ScaleX(0),ScaleY(0),ScaleX(417),ScaleY(27));

TheLeon
07-04-2018, 12:39
Ребят, нужна помощь! Пытался-пытался, не соображаю, как добавить, чтобы при наведении показывалось превью, именно в мой код.

P.S: смотрел статью (http://forum.oszone.net/post-2169372-662.html), опять же пытался - ничего не получилось.

Пусто

habib2302
07-04-2018, 19:35
TheLeon, вот другой вариант. потому что скрипт из этой статьи (http://www.oszone.net/go.php?url=http://forum.oszone.net/post-2169372-662.html) в виде всплывающего уведомления
[Setup]
AppName=Моя программа
AppVersion=1.5
AppPublisher=YURSHAT
AppPublisherURL=http://krinkels.org/
DefaultDirName={pf}\Моя программа

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy

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

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[Code]

type
TComponentDesc = record
Description: String;
ImageName: String;
Index: Integer;
end;

var
CompDescs: array of TComponentDesc;
CompDescPanel, CompDescImgPanel: TPanel;
CompIndex, LastIndex: Integer;
CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
i: Integer;
begin
if Index = LastIndex then Exit;
CompIndex := -1;
for i := 0 to GetArrayLength(CompDescs) -1 do
begin
if (CompDescs[i].Index = Index) then
begin
CompIndex := i;
Break;
end;
end;
if (CompIndex >= 0) and (Area = iaItem) then
begin
if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
CompDescImg.Show;
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
CompDescImg.Hide;
LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
i: Integer;
begin
i := GetArrayLength(CompDescs);
SetArrayLength(CompDescs, i + 1);
CompDescs[i].Description := ADescription;
CompDescs[i].ImageName := AImageName;
CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
WizardForm.SelectComponentsLabel.Hide;
WizardForm.TypesCombo.Hide;
WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205));
WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

CompDescImgPanel := TPanel.Create(WizardForm);
with CompDescImgPanel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(205));
BevelInner := bvLowered;
end;

CompDescImg := TBitmapImage.Create(WizardForm);
with CompDescImg do
begin
Parent := CompDescImgPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
Stretch := True;
Hide;
end;

AddCompDescription(1, (''), 'CompDescImg1.bmp');
AddCompDescription(2, (''), 'CompDescImg2.bmp');
end;

TheLeon
07-04-2018, 21:26
habib2302, да, возник вопрос, а можно ли отключить на первом пункте меню изображение, чтобы писалось "Наведите курсор.."?(см.скрин)

пусто

habib2302
07-04-2018, 21:54
TheLeon, дайте мне полный скрипт вместе с картинками

habib2302
08-04-2018, 00:08
да, возник вопрос, а можно ли отключить на первом пункте меню изображение, чтобы писалось "Наведите курсор.."?(см.скрин) »
нет. т.к. в TBitmapImage нельзя добавлять текст. для текста специально предназначена TLabel. Вот полный вариант скрипта
[Setup]
AppName=Моя программа
AppVersion=1.5
AppPublisher=YURSHAT
AppPublisherURL=http://krinkels.org/
DefaultDirName={pf}\Моя программа

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2
RU.ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.
RU.ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.
RU.CompDesc1=Описание первого компонента
RU.CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy

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

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[Code]
type
TComponentDesc = record
Description: String;
ImageName: String;
Index: Integer;
end;

var
CompDescs: array of TComponentDesc;
CompDescPanel, CompDescImgPanel: TPanel;
CompDescText: array[1..2] of TLabel;
CompIndex, LastIndex: Integer;
CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
i: Integer;
begin
if Index = LastIndex then Exit;
CompIndex := -1;
for i := 0 to GetArrayLength(CompDescs) -1 do
begin
if (CompDescs[i].Index = Index) then
begin
CompIndex := i;
Break;
end;
end;
if (CompIndex >= 0) and (Area = iaItem) then
begin
if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
CompDescImg.Show;

CompDescText[2].Caption := CompDescs[CompIndex].Description;
CompDescText[2].Enabled := True;
end else
begin
CompDescText[2].Caption := CustomMessage('ComponentsInfo');
CompDescText[2].Enabled := False;
CompDescImg.Hide;
end;
LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
CompDescImg.Hide;
CompDescText[2].Caption := CustomMessage('ComponentsInfo');
CompDescText[2].Enabled := False;
LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
i: Integer;
begin
i := GetArrayLength(CompDescs);
SetArrayLength(CompDescs, i + 1);
CompDescs[i].Description := ADescription;
CompDescs[i].ImageName := AImageName;
CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
WizardForm.SelectComponentsLabel.Hide;
WizardForm.TypesCombo.Hide;
WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205));
WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

CompDescImgPanel := TPanel.Create(WizardForm);
with CompDescImgPanel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
BevelInner := bvLowered;
end;

CompDescText[1] := TLabel.Create(WizardForm);
with CompDescText[1] do
begin
Parent := CompDescImgPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
AutoSize := False;
WordWrap := True;
Enabled := False;
Caption := CustomMessage('ComponentsImgInfo');
end;

CompDescImg := TBitmapImage.Create(WizardForm);
with CompDescImg do
begin
Parent := CompDescImgPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
Stretch := True;
Hide;
end;

CompDescPanel := TPanel.Create(WizardForm);
with CompDescPanel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(192), ScaleY(125), ScaleX(225), ScaleY(80));
BevelInner := bvLowered;
end;

CompDescText[2] := TLabel.Create(WizardForm);
with CompDescText[2] do
begin
Parent := CompDescPanel;
SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
AutoSize := False;
WordWrap := True;
Enabled := False;
Caption := CustomMessage('ComponentsInfo');
end;

AddCompDescription(1, CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
AddCompDescription(2, CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
end;

TheLeon
08-04-2018, 12:04
habib2302, тут с описанием компонента, то, что мне не нужно. Да, хотел спросить, можно ли сделать кликабельный баннер и кликабельный текст "сделано в фирме..." (при клике открывался браузер), коды которых вы мне давали?

пусто

habib2302
08-04-2018, 14:17
кликабельный текст "сделано в фирме..." (при клике открывался браузер) »

var
Label1: TLabel;

procedure Label1Click(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://www.innosetup.com','', '', SW_SHOW, ewNoWait, ErrorCode)
end;

procedure InitializeWizard();
begin
Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Parent := WizardForm;
Caption := 'Developed by Leon and OSzone.net';
SetBounds(ScaleX(15),ScaleY(338),ScaleX(132),ScaleY(130));
Font.Size := 7;
OnClick:=@Label1Click;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
end;
end;

кликабельный баннер »


var
Image1: TBitmapImage;

procedure Image1Click(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://www.innosetup.com','', '', SW_SHOW, ewNoWait, ErrorCode)
end;

procedure InitializeWizard();
begin
Image1 := TBitmapImage.Create(WizardForm);
with Image1 do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(ScaleX(0),ScaleY(70),ScaleX(416),ScaleY(170));
ExtractTemporaryFile('BMP.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\BMP.bmp'));
OnClick:=@Image1Click;
Enabled:=True;
Cursor:=crHand;
end;
end;

El Sanchez
08-04-2018, 15:28
Как можно определить системный диск ({sd}) ssd или hdd. »
ABBAT, пробуйте.

[Setup]
AppName=test
AppVerName=test
CreateAppDir=no
DefaultDirName={tmp}
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
GENERIC_READ = $80000000;
GENERIC_WRITE = $40000000;
FILE_SHARE_READ = $1;
FILE_SHARE_WRITE = $2;
OPEN_EXISTING = 3;
INVALID_HANDLE_VALUE = -1;
IOCTL_ATA_PASS_THROUGH = $0004D02C;
ATA_FLAGS_DRDY_REQUIRED = $0001;
ATA_FLAGS_DATA_IN = $0002;
ID_CMD = $EC;

type
TATAPassThroughEx = record
Length: WORD;
AtaFlags: WORD;
PathId: Byte;
TargetId: Byte;
Lun: Byte;
ReservedAsUchar: Byte;
DataTransferLength: DWORD;
TimeOutValue: DWORD;
ReservedAsUlong: DWORD;
DataBufferOffset: DWORD;
PreviousTaskFile: array [0..7] of Byte;
CurrentTaskFile: array [0..7] of Byte;
end;

TATAIdentifyDeviceQuery = record
Header: TATAPassThroughEx;
Data: array [0..255] of WORD;
end;

// Device Management Functions
function DeviceIoControlATAIdentifyDeviceQuery(hDevice: THandle; dwIoControlCode: DWORD; var lpInBuffer: TATAIdentifyDeviceQuery; nInBufferSize: DWORD; out lpOutBuffer: TATAIdentifyDeviceQuery; nOutBufferSize: DWORD; out lpBytesReturned: DWORD; lpOverlapped: DWORD): BOOL; external 'DeviceIoControl@kernel32.dll stdcall';

// File Management Functions
function CreateFile(lpFileName: string; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: Longint; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; external 'CreateFile{#A}@kernel32.dll stdcall';

// Handle and Object Functions
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';

/////////////////////////////////////////////////////////
function IsDriveSSD(const ADriveLetter: string): Boolean;
var
BytesReturned: DWORD;
DeviceHandle: THandle;
ATAIdentifyDeviceQuery: TATAIdentifyDeviceQuery;
begin
Result := False;
try
DeviceHandle := CreateFile(Format('\\.\%s', [ADriveLetter]), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if DeviceHandle = INVALID_HANDLE_VALUE then
RaiseException(SysErrorMessage(DLLGetLastError));

ATAIdentifyDeviceQuery.Header.Length := SizeOf(ATAIdentifyDeviceQuery.Header);
ATAIdentifyDeviceQuery.Header.AtaFlags := ATA_FLAGS_DATA_IN or ATA_FLAGS_DRDY_REQUIRED;
ATAIdentifyDeviceQuery.Header.DataTransferLength := SizeOf(ATAIdentifyDeviceQuery.Data);
ATAIdentifyDeviceQuery.Header.TimeOutValue := 3;
ATAIdentifyDeviceQuery.Header.DataBufferOffset := SizeOf(ATAIdentifyDeviceQuery.Header);
ATAIdentifyDeviceQuery.Header.CurrentTaskFile[6{ = Command/Status register }] := ID_CMD; // ATA IDENTIFY DEVICE command

if not DeviceIoControlATAIdentifyDeviceQuery(DeviceHandle, IOCTL_ATA_PASS_THROUGH, ATAIdentifyDeviceQuery, SizeOf(ATAIdentifyDeviceQuery), ATAIdentifyDeviceQuery, SizeOf(ATAIdentifyDeviceQuery), BytesReturned, 0) then
begin
Log(Format('DeviceIoControl failed: %s', [SysErrorMessage(DLLGetLastError)]));
Exit;
end;
Result := ATAIdentifyDeviceQuery.Data[{ Word }217{: Nominal media rotation rate }] = 1;
finally
if DeviceHandle > 0 then
CloseHandle(DeviceHandle);
end;
end;

///////////////////////////
procedure InitializeWizard;
begin
if IsDriveSSD(ExpandConstant('{sd}')) then
MsgBox('SSD', mbInformation, MB_OK)
else
MsgBox('No SSD', mbInformation, MB_OK);
end;

ABBAT
08-04-2018, 21:58
El Sanchez,
пробуйте
Спасибо большое. Отлично работает.

TheLeon
10-04-2018, 19:09
El Sanchez, здравствуйте, сможете ли помочь с задуманным?

1.Можно ли сделать шапку, похожую на данную, также текст, слева иконка(любого формата), а справа иконка "Вопроса", при наведении на которую, вылезает подсказка? (см.скрин 1)
2.Можно ли сделать анимированный баннер(или слайд-шоу)? (см.скрин 2)
3.Можно ли при наведении, именно на первый пункт, показывало в превью изображения "Наведите курсор..."? (см.скрин 3)
4.Можно ли сделать подобный стиль для кнопок(не меня размеры, просто стиль)? (см.скрин 4)

Скрин 1: https://a.radikal.ru/a05/1804/e9/0e14377bc14b.jpg
Скрин 2: https://d.radikal.ru/d28/1804/c9/5c42c37af7fe.png
Скрин 3: https://d.radikal.ru/d43/1804/92/c9c776c58eaa.png
Скрин 4: https://d.radikal.ru/d26/1804/fa/eaa9c86a90f9.jpg

пусто

El Sanchez
11-04-2018, 18:12
1.Можно ли сделать шапку, похожую на данную, также текст, слева иконка(любого формата), а справа иконка "Вопроса", при наведении на которую, вылезает подсказка? (см.скрин 1) »
TheLeon, пример

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
Uninstallable=no
CreateUninstallRegKey=no
LicenseFile=compiler:license.txt

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Messages]
ru.WizardLicense=Сканирование...

[Code]
//////////////////////////
procedure ChangeMainPanel;
var
HelpBitmap: TBitmapImage;
begin
WizardForm.PageDescriptionLabel.Hide;

with WizardForm.WizardSmallBitmapImage do
begin
Left := ScaleX(10);
Top := (Parent.Height - Height) div 2;
end;

HelpBitmap := TBitmapImage.Create(WizardForm.MainPanel);
with HelpBitmap do
begin
Parent := WizardForm.MainPanel;
Bitmap.LoadFromFile('{#CompilerPath }\WizModernSmallImage-IS.bmp');
AutoSize := True;
Left := Parent.Width - Width - ScaleX(10);
Top := (Parent.Height - Height) div 2;
ShowHint := True;
Hint := 'Sample text';
end;

with WizardForm.PageNameLabel do
begin
Font.Color := clGray;
Font.Size := 14;
Font.Style := [];
AdjustHeight;
Left := WizardForm.WizardSmallBitmapImage.Left + WizardForm.WizardSmallBitmapImage.Width + ScaleX(10);
Top := (Parent.Height - Height) div 2;
Width := HelpBitmap.Left - Left - ScaleX(10);
end;
end;

///////////////////////////
procedure InitializeWizard;
begin
ChangeMainPanel;
end;


2.Можно ли сделать анимированный баннер(или слайд-шоу)? (см.скрин 2) »
TheLeon, пример

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
WS_CHILD = $40000000;
WS_VISIBLE = $10000000;
WS_DISABLED = $08000000;

// ATL Functions
function AtlAxWinInit: BOOL; external 'AtlAxWinInit@atl.dll stdcall';
function AtlAxCreateControl(lpszName: string; hWnd: HWND; pStream, ppUnkContainer: Longint): HResult; external 'AtlAxCreateControl@atl.dll stdcall';

// Window Functions
function GetSysColor(nIndex: Integer): DWORD; external 'GetSysColor@user32.dll stdcall';
function CreateWindowEx(dwExStyle: DWORD; lpClassName, lpWindowName: string; dwStyle: DWORD; x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance, lpParam: Longint): HWND; external 'CreateWindowEx{#A}@user32.dll stdcall';
function DestroyWindow(hWnd: HWND): BOOL; external 'DestroyWindow@user32.dll stdcall';

var
GIFWndHandle: HWND;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function ShowAnimatedGIF(AWndParent: HWND; ALeft, ATop, AWidth, AHeight: Integer; AUrl: string; AColor: TColor): HWND;
(*
Parameters:
AWndParent...: A handle to the parent window
ALeft........: The initial horizontal position of the window
ATop.........: The initial vertical position of the window
AWidth.......: The width of the window
AHeight......: The height of the window
AUrl.........: The URL or full path of the GIF file
AColor.......: Color background
Return value:
A handle to ActiveX control host window
*)
var
HTMLStr: string;
ResultCode: HResult;
begin
if not AtlAxWinInit then Exit;
Result := CreateWindowEx(0, 'AtlAxWin', '', WS_CHILD or WS_VISIBLE or WS_DISABLED, ALeft, ATop, AWidth, AHeight, AWndParent, 0, 0, 0);
if Result = 0 then
RaiseException(SysErrorMessage(DLLGetLastError));

if AColor < 0 then
AColor := GetSysColor(AColor and $0000FF);
HTMLStr := Format('about:<html><body leftmargin="0" topmargin="0" scroll="no" bgcolor="#%.2x%.2x%.2x"><p align="center"><img src="%s" height="100%%"></img></p></body></html>', [AColor and $0000FF, AColor and $00FF00 shr 8, AColor and $FF0000 shr 16, AUrl]);

ResultCode := AtlAxCreateControl(HTMLStr, Result, 0, 0);
if ResultCode <> 0 then
RaiseException(SysErrorMessage(ResultCode));
end;

///////////////////////////
procedure InitializeWizard;
begin
GIFWndHandle := ShowAnimatedGIF(WizardForm.SelectDirPage.Handle,
0, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(5), WizardForm.SelectDirPage.Width, WizardForm.DiskSpaceLabel.Top - WizardForm.DirEdit.Top - WizardForm.DirEdit.Height - ScaleY(5),
'https://media.giphy.com/media/9y0qXExCElAgU/giphy.gif', WizardForm.SelectDirPage.Color);
end;

////////////////////////////
procedure DeinitializeSetup;
begin
if GIFWndHandle <> 0 then
DestroyWindow(GIFWndHandle);
end;


3.Можно ли при наведении, именно на первый пункт, показывало в превью изображения "Наведите курсор..."? (см.скрин 3) »
TheLeon, в ShowCompDescription после CompDescImg.Show; дописываете:

if Index = 0 then
CompDescText.Caption := 'Наведите курсор...'
else
CompDescText.Caption := '';


4.Можно ли сделать подобный стиль для кнопок(не меня размеры, просто стиль)? (см.скрин 4) »
TheLeon, ISSkin (http://isskin.codejock.com/), ISSkinEx (http://restools.hanzify.org/article.asp?id=110), vcl-styles-plugins (https://github.com/RRUZ/vcl-styles-plugins/wiki/Inno-Setup), SkinSharp (http://lmgtfy.com/?q=SkinSharp).

ROMKA-1977
24-04-2018, 21:14
Здраствуйте, ув. форумчане. Подскажите пож. Возникла следующая проблема:
1. Создана кастомная страница

var
Page: TWizardPage;

procedure InitializeWizard();
begin
Page := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
end;

2. Необходимо создать панель расположенную на WizardForm но так чтобы она отображалась только при отображении кастомной страницы.

var
Test_pnl: TPanel;

procedure InitializeWizard();
begin
Test_pnl:= TPanel.Create(WizardForm);
with Test_pnl do
begin
Top:= ScaleY(60);
Width:= ScaleX(497);
Height:= ScaleY(253);
BevelOuter:= bvNone;
Color := clLime;
Parent:= WizardForm;
end;
end;


Со стандартными страницами всё ясно на как быть в таком случае ?




© OSzone.net 2001-2012