| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия |
| blackbox:noappwin [2017/04/07 06:00] – [3. Сборка вашего приложения] иван_денисов | blackbox:noappwin [2026/09/11 22:55] (текущий) – iadenisov |
|---|
| ====== Как создать приложение без главного окна Блэкбокса? ====== | ====== Приложение без главного окна Блэкбокса ====== |
| |
| Иногда возникает необходимость сделать приложение состоящее из одной диалоговой формы. Главное окно Блэкбокса при этом надо как-то спрятать. С одной стороны для этого предусмотрен специальный ключ ''/NOAPPWIN'', но его возможно прописать только в ярлыке, что не подходит для распространения приложения в виде простого архива или непосредственно исполняемого файла ''exe''. | Статья для версии Блэкбокса 1.7.2. В более новых версиях — механизм иной. |
| |
| В этой заметке рассмотрен способ комфортной разработки таких приложений путем модификации модуля ''HostMenus''. | Иногда возникает необходимость сделать приложение, состоящее из одной диалоговой формы. Главное окно [[:blackbox|Блэкбокса]] при этом необходимо каким-то образом спрятать. С одной стороны для этого предусмотрен специальный ключ ''/NOAPPWIN'', однако его возможно прописать только в ярлыке, что не подходит для распространения приложения в виде простого архива или непосредственно исполняемого файла ''exe''. |
| | |
| | В этой заметке рассмотрен способ разработки приложений без главного окна путем модификации модуля ''HostMenus''. |
| |
| ===== 1. Подготовка Config ===== | ===== 1. Подготовка Config ===== |
| Первым делом необходимо подготовить ваш файл ''Config'', который определяет, что будет происходить сразу после запуска Блэкбокса. Этот модуль вызывается из модуля ''Init'', который загружает ''StdLoader'' сразу после загрузки ядра Блэкбокса. | Первым делом необходимо подготовить ваш файл ''Config'', который определяет, что будет происходить сразу после запуска Блэкбокса. Этот модуль вызывается из модуля ''Init'', который загружает ''StdLoader'' сразу после загрузки ядра Блэкбокса. |
| |
| - В корневом каталоге Блэкбокса создайте папку ''My'' (а в ней ''My/Mode'', ''My/Code'', ''My/Rsrc''). | |
| - Создайте новый документ, и добавьте в него код: | - Создайте новый документ, и добавьте в него код: |
| |
| <code>MODULE Config; | <code=oberon2> |
| | MODULE Config; |
| IMPORT StdCmds; | IMPORT StdCmds; |
| |
| END Setup; | END Setup; |
| |
| END Config.</code> | END Config. |
| | </code> |
| |
| Вместо 'Obx/Rsrc/Dialog.odc' укажите путь к форме своего модуля, а вместо 'ObxDialog Demo' заголовок формы. | Вместо 'Obx/Rsrc/Dialog.odc' укажите путь к форме своего модуля, а вместо 'ObxDialog Demo' заголовок формы. |
| | - В корневом каталоге Блэкбокса создайте папку ''My'' (а в ней ''My/Mod'' и ''My/Code''). |
| - Сохраните файл ''Config.odс'' в папке ''My/Mod''. | - Сохраните файл ''Config.odс'' в папке ''My/Mod''. |
| - Скомпилируйте модуль. | - Скомпилируйте модуль. |
| |
| - Откройте файл ''Host/Mod/Menus.odc''. | - Откройте файл ''Host/Mod/Menus.odc''. |
| - Добавьте в конец процедуры ''ReadCommandLine'' следующую строку: <code componentpascal>IF ~open THEN state := noAppWin; HostWindows.noAppWin := TRUE END</code> эта модификация устанавливает значения переменных как при ключе ''/NOAPPWIN''. | - Добавьте в конец процедуры ''ReadCommandLine'' следующую строку: ''IF ~open THEN state := noAppWin; HostWindows.noAppWin := TRUE END'' эта модификация устанавливает значения переменных как при ключе ''/NOAPPWIN''. |
| - Скомпилируйте модуль ''HostMenus''. | - Скомпилируйте модуль ''HostMenus''. |
| - Переместите файл ''Host/Code/Menus.ocf'' в папку ''My/Code/Menus.ocf''. | - Переместите файл ''Host/Code/Menus.ocf'' в папку ''My/Code/Menus.ocf''. |