Программы
Программные
модули
Наборы
программных модулей
Доступ
к объектам Ингео из программных модулей
Обработка событий
Интеграция
с интерфейсом пользователя Ингео
Использование
ActiveX-объектов
Основным элементом программирования в среде ГИС ИнГео является программа - текст на каком-либо языке программирования, содержащий набор инструкций. В ГИС ИнГео используется технология Microsoft Active Scripting, позволяющая использовать язык программирования по усмотрению пользователя. Наиболее распространенными языками программирования, поддерживаемыми данной технологией, являются VBScript и JavaScript, исполняющие подсистемы которых входят в комплект программы Internet Explorer, которая практически стала частью операционной системы Microsoft Windows.
Инструкции, содержащиеся в теле программы принято объединять в специальные именованные группы, называемые процедурами или функциями.
При реализации сложных задач часто возникает необходимость разбить одну большую программу на несколько более мелких с целю локализации отдельных подзадач в самостоятельных программах. Для этого в ГИС ИнГео предусмотрена возможность формировать программные модули - наборы программ, предназначенных для решения одной задачи.
Для удобства организации программ в пределах модуля можно создавать папки - группы программ и вложенных папок. Используя папки и вложенные папки, программы можно хранить не линейным списком, а в виде гармонично организованной иерархии.
Помимо программ, модуль может содержать различные ресурсы - различные вспомогательные элементы которые, могут использоваться программами во время их выполнения для облегчения программирования некоторых задач. В качестве примера ресурса можно привести ресурс описания меню. Более подробно об этом будет сказано в последующих разделах.
Программный модуль может находится в одном из двух состояний: загружен или активен. При активизации программного модуля выполняются следующие действия:
После компиляции каждая программа становится объектом. При этом все определенные в программе процедуры и функции становятся методами объекта, а глобальные переменные - свойствами.
Верхней ступенью организации программной среды Ингео являются иерархически организованные наборы программных модулей.
Каждый набор связан с одним из объектов Ингео и загружается при активизации объекта. Наборы модулей могут быть связаны со следующими объектами Ингео:
При создании программ естественным образом возникает потребность получать доступ к различным объектам и элементам ГИС Ингео, таким как списки слоев, карт, территорий, пространственные объекты. Такой доступ предоставляется со стороны Ингео в виде иерархически организованной объектной модели посредством глобальной переменной с именем Application. Переменная Application является корневым объектом всей иерархии объектов, доступной из программ. Полная иерархия объектов представлена на диаграмме объектов Ингео.
На протяжении всей работы пользователя с ГИС Ингео, в системе происходят различные события (например: был удален объект, изменился набор выделенных объектов, и т.д.). Возникает естественная потребность каким-то образом обрабатывать такие события в программах, добавляя дополнительное поведение для штатных операций ГИС.
В ГИС Ингео предусмотрена возможность программной обработки некоторых событий, периодически возникающих в системе (набор событий предопределен).
Для этого в программах необходимо определять процедуры со специальными зарезервированными именами (такие процедуры принято называть обработчиками событий). При запуске программного модуля система автоматически распознает имена процедур-обработчиков событий и присоединяет эти процедуры к источникам событий. Затем, при возникновении события в системе, автоматически выполняется процедура обработки события.
ГИС Ингео позволяет программам, созданным пользователем, встраиваться в интерфейс пользователя системы - добавлять "свои" пункты в главное меню программы и кнопки на панелях инструментов.
Подсистема интерфейса пользователя главного окна ГИС Ингео содержит три основных элемента:
Как следует из выше сказанного, пункты меню и кнопки панелей инструментов не связаны напрямую с процедурами обработки. Вместо этого они связываются с командами, которые, в свою очередь, связываются с процедурами обработки. Кроме того, ряд свойств пунктов меню и кнопок панелей инструментов жестко связаны с соответствующими свойствами команд. При изменении таких свойств у команд, автоматически изменяются свойства связанных с командой элементов интерфейса пользователя. Например, при изменении свойства Enabled (доступна) у команды, автоматически изменятся состояния всех пунктов меню и кнопок панелей инструментов, связанных с данной командой.
Для облегчения создания пользовательских элементов интерфейса пользователя, программный модуль может содержать специальные элементы - ресурсы с описанием списка команд и меню. Внутренняя среда программирования Ингео позволяет интерактивно создавать и изменять такие ресурсы. Затем программа с помощью всего одной команды может создать и добавить в общий список команд и в общее меню программы, новые элементы, созданные на основе информации из ресурса описания команд и меню. При этом автоматически устанавливаются связи с процедурами обработки команд, реализация которых описана в программах модуля.
Типичный сценарий встраивания пользовательских команд выглядит следующим образом:
При создании сложных программных модулей часто встает вопрос создания сложных экранных форм для взаимодействия программы с пользователем. Но возможности встроенных языков ограничены, и не позволяют организовать взаимодействие с пользователем более сложное нежели простой вывод текстового сообщения или ввод одной строки.
Кроме того, часто возможностей встроенных языков программирования недостаточны для эффективной реализации некоторых сложных алгоритмов.
Как быть в таких ситуациях?
Встроенные языки программирования позволяют создавать экземпляры внешних объектов, реализованных с учетом стандарта ActiveX. Разрабатывать ActiveX-объекты позволяют практически все современные средства разработки, такие как Delphi, C++ Builder, Visual Basic, Visual C++ и т.д.
Типичный сценарий разработки программных модулей с "участием" ActiveX-объектов выглядит следующим образом.