====== Приложение без главного окна Блэкбокса ====== Иногда возникает необходимость сделать приложение, состоящее из одной диалоговой формы. Главное окно [[:blackbox|Блэкбокса]] при этом необходимо каким-то образом спрятать. С одной стороны для этого предусмотрен специальный ключ ''/NOAPPWIN'', однако его возможно прописать только в ярлыке, что не подходит для распространения приложения в виде простого архива или непосредственно исполняемого файла ''exe''. В этой заметке рассмотрен способ разработки приложений без главного окна путем модификации модуля ''HostMenus''. ===== 1. Подготовка Config ===== Первым делом необходимо подготовить ваш файл ''Config'', который определяет, что будет происходить сразу после запуска Блэкбокса. Этот модуль вызывается из модуля ''Init'', который загружает ''StdLoader'' сразу после загрузки ядра Блэкбокса. - Создайте новый документ, и добавьте в него код: MODULE Config; IMPORT StdCmds; PROCEDURE Setup*; BEGIN StdCmds.OpenToolDialog('Obx/Rsrc/Dialog.odc', 'ObxDialog Demo') END Setup; END Config. Вместо 'Obx/Rsrc/Dialog.odc' укажите путь к форме своего модуля, а вместо 'ObxDialog Demo' заголовок формы. - В корневом каталоге Блэкбокса создайте папку ''My'' (а в ней ''My/Mod'' и ''My/Code''). - Сохраните файл ''Config.odс'' в папке ''My/Mod''. - Скомпилируйте модуль. - Полученный файл ''Code/Config.ocf'' переместите (не скопируйте) в свою папку ''My/Code/Config.ocf''. //Предполагается, что резервная копия базового модуля ''Config'', находится у вас в ''System/Code/Config.odc'', поэтому никаких действий больше на этом шаге делать не надо. Если это не так, то обязательно скомпилируйте базовый модуль ''System/Mod/Config.odc'' до того, как закроете Блэкбокс. Иначе при запуске Блэкбокса будет открываться ваша форма, не будут установлены конвертеры и не будет открываться журнал.// ===== 2. Подготовка HostMenus ===== Эта операция должна быть сделана за один раз, не закрывая Блэкбокс. - Откройте файл ''Host/Mod/Menus.odc''. - Добавьте в конец процедуры ''ReadCommandLine'' следующую строку: ''IF ~open THEN state := noAppWin; HostWindows.noAppWin := TRUE END'' эта модификация устанавливает значения переменных как при ключе ''/NOAPPWIN''. - Скомпилируйте модуль ''HostMenus''. - Переместите файл ''Host/Code/Menus.ocf'' в папку ''My/Code/Menus.ocf''. - Удалите или закомментируйте новую строку в модуле ''HostMenus''. - Вновь скомпилируйте модуль ''HostMenus''. ===== 3. Сборка вашего приложения ===== Для подготовки списка модулей для упаковки в монолитное приложение воспользуемся методом, который описан в документации ''DevPacker''. - Перезапустите Блэкбокс. - Запустите модуль вашего приложения (откройте диалоговую форму); в нашем случае это команда:\\ ''%%"StdCmds.OpenToolDialog('Obx/Rsrc/Dialog.odc', 'ObxDialog Demo')"%%'' \\ обратите внимание, что команда в двойных кавычках. - Проверьте все функции вашего приложения, чтобы загрузились все возможные модули, необходимые для его работы. - Теперь вызовите команду: ''DevPacker.ListLoadedModules'' - В открывшемся окне замените ''Host/Code/Menus.ocf'' на: \\ ''%%My/Code/Menus.ocf => Host/Code/Menus.ocf%%''\\ целиком так и вставлять строку с этим символом замены. - Также замените ''System/Code/Config.ocf'' (или ''Code/Config.ocf'') на:\\ ''%%My/Code/Config.ocf => Code/Config.ocf%%'' - Добавьте в этот список ваши ресурсные файлы (в нашем примере это ''Obx/Rsrc/Dialog.odc''). - Добавьте в список также файл меню ''System/Rsrc/Menus.odc'' или замените системное меню на свое:\\ ''%%My/Rsrc/Menus.odc => System/Rsrc/Menus.odc%%''\\ хотя мы предполагаем, что пользователь не увидит меню, тем не менее это может произойти при аварийной остановке приложения, когда появится окно TRAP. - Соберите основу приложения командой:\\ ''%%DevLinker.Link exefilename.exe := Kernel$+ Files HostFiles HostPackedFiles StdLoader 1 Applogo.ico%%'' - Теперь запустите упаковку командой, которая создана на шагах 4–8 (нажмите на коммандер перед командой ''DevPacker.PackThis''). Приложение готово! Не забудьте вместе с ним распространять лицензию Блэкбокса (например в формате txt). Чтобы приложение отображало кнопки в красивом стиле, скопируйте файл manifest из папки Блэкбокса и измените его название под ваше приложение. {{ :blackbox:noappwin.png?nolink |}} Перед проверкой, переместите полученный файл из папки Блэкбокса куда-нибудь, например, на рабочий стол. Если вы не переместите приложение, то приоритет получит файл ''Host/Code/Menus.ocf'', а не наш упакованный файл, что приведет к тому, что откроется главное окно. Команды сборки и упаковки удобно сохранить в один файл, чтобы каждый раз не готовить список вновь. Однако стоит помнить, что при добавлении новых модулей в ваше приложение, их не надо забывать добавлять в этот список. ---- Авторы заметки: Иван Денисов, Сергей Волков.