Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MB60UG

.pdf
Скачиваний:
12
Добавлен:
13.02.2015
Размер:
1.47 Mб
Скачать

Глава 12: Интегрированная Картография

CommandInfo(7) + ”,” + CommandInfo(8)

Предположим, что Ваше приложение добавляет команду меню к локальному меню MapInfo. Каждый раз, когда пользователь выбирает команду меню, MapInfo посылает OLE-методу строку. Если команда меню имеет номер 101, строка будут выглядеть следующим образом:

”MI:,,,,,,,101”

В этом случае большинство элементов строки пусто, потому что функция CommandInfo( )

может возвращать только эту одну часть информации.

Теперь предположим, что Вы создаете кнопку панели MapInfo, которая позволяет пользователю линии на Карте. Строка теперь будет выглядеть следующим образом:

”MI:-73.5548,42.122,F,F,-72.867702,43.025,202,”

Теперь строка включает несколько элементов. Первые два элемента содержат x– и y– координаты точки, на которую пользователь указал мышкой; следующие два элемента сообщают, была ли нажата клавиша SHIFT или CTRL; следующие два элемента содержат координаты точки, где пользователь отпустил кнопку мышки; и последний элемент указывает номер идентификатора кнопки.

Совет: Если Вы приписываете уникальный идентификатор каждой из Ваших кнопок, Вы можете сделать так, что все кнопки будут вызывать один и тот же метод. Ваш метод может определять, какая из кнопка вызвала его, используя седьмой аргумент в переданной строке.

Разбор содержания строки возлагается на Ваше приложение.

Синтаксис C/C++ для функций уведомления

В предыдущем разделе были описаны обратные вызовы в контексте Visual Basic. Здесь мы рассмотрим синтаксис языка C.

Если Вы используете метод MapInfo SetCallback, MapInfo может автоматически генерировать обратные вызовы для Вашего объекта IDispatch. Обратные вызовы стандарта MapInfo имеют следующий синтаксис:

SCODE SetStatusText(LPCTSTR lpszMessage)

MapInfo вызывает метод SetStatusText всякий раз, когда изменяется содержание строки сообщений в MapInfo. Единственный аргумент – текст сообщения в строке состояний.

SCODE WindowContentsChanged(Unsigned Long windowID)

MapInfo вызывает метод WindowContentsChanged всякий раз, когда изменяется содержание окна Карты. Единственный аргумент представляет собой идентификатор этого окна. Этот повторный вызов аналогичен процедуре MapBasic WinChangedHandler.

225

Глава 12: Интегрированная Картография

Другие способы использования уведомлений

Как говорилось ранее, MapInfo может использовать обратные вызовы OLE, чтобы послать информацию Вашей клиентской программе. В некоторых случаях, однако, Вы должны применять повторные вызовы, которые не используют OLE. Например, если Вы пишете программы в Visual Basic 3.0, Вы не можете использовать OLE, потому что Visual Basic 3.0 не позволяет создавать Ваши собственные серверы Автоматизации OLE.

MapInfo поддерживает два типа уведомлений, которые не используют механизм OLE: использующие DDE, и использующие приложения MapBasic (файлы MBX).

Обратные вызовы DDE

Когда Вы создаете кнопки на инструментальной панели или команды меню, Вы указываете предложение Calling. Чтобы пользоваться обратным вызовом посредством DDE, используйте синтаксис вызова DDE-сервера. Всякий раз, когда пользователь использует кнопку или команду меню, MapInfo открывает DDE-связь с DDE-сервером, и затем посылает строку Вашему объекту. Строка использует формат, обсужденный в предыдущей секции (например, " MI:,,,,,, 101 ").

Пример смотрите в программе FindZip. Процедура Form Load посылает MapInfo оператор

Alter ButtonPad ... Add с предложением

Calling DDE ”FindZip”, ”MainForm”

Всякий раз, когда пользователь применяет инструмент, MapInfo открывает DDEсвязь с программой FindZip и посылает строку "MainForm" объекту. ("MainForm" – значение свойства формы LinkTopic). Подробнее смотрите в Главе 11.

Обратные вызовы MBX

Если Вы создаете приложение MapBasic (файл MBX), Вы можете сконструировать Ваши кнопки и команды меню так, чтобы они вызвали MapBasic п-роцедуры в MBX. В предложении вызова используйте синтаксис вызова процедуры MapBasic-программы.

После того, как Ваше приложение на языке Visual Basic запустит MapInfo, запустите MBX, послав MapInfo строку вида:

mapinfo.do ”Run Application ””C:\MB\MYAPP.MBX”” ”

Подробности о создании кнопок и команд меню смотрите в главе 6.

Справочная система

Приложение с Интегрированной Картой может активировать окна диалога MapInfo посредством OLE-метода RunMenuCommand. Если Ваше приложение, таким образом, активизирует окно диалога MapInfo, Вы можете контролировать доступность Справочной системы для этого окна.

226

Глава 12: Интегрированная Картография

Вызов стандартного Справочного файла MapInfo

Вы можете разрешить Вашим пользователям вызов стандартного Справочного файла MapInfo из диалогового окна. Такая конфигурация принимается по умолчанию. Если пользователь нажимает клавишу F1 в активном окне диалога MapInfo, Справочная система выводит на дисплей соответствующий раздел стандартного Справочного файла MapInfo MAPINFOW.HLP.

Замечание: После вывода на дисплей окна Справки MapInfo пользователь может щелкать по различным навигационным кнопкам для просмотра Справочного файла. Пользователи могут посчитать такую конфигурацию неудобной, так как в Справочном файле MapInfo описан пользовательский интерфейс MapInfo, а не пользовательский интерфейс Вашего приложения с Интегрированной Картой.

Запрещение вызова Справочной системы

Вы можете полностью запретить вызов Справочной системы для диалоговых окон MapInfo выдачей следующего оператора языка MapBasic:

Set Window Help Off

После исполнения оператора Set Window Help Off нажатие клавиши F1 в активном окне

диалога MapInfo игнорируется.

Вызов специализированного Справочного файла

Вы можете сконфигурировать MapInfo для вызова Справочной системой специализированного Справочного файла. Например, следующий MapBasic-оператор указывает MapInfo на необходимость использования Справочного файла CUSTOM.HLP вместо MAPINFOW.HLP:

Set Window Help File ”CUSTOM.HLP” Permanent

После исполнения оператора Set Window Help File...Permanent нажатие клавиши F1 приводит к вызову приложением MapInfo Справочной системы Windows, но при этом на дисплей выводится специфицированный Вами Справочный файл вместо Справочного файла MAPINFOW.HLP. Используйте такую конфигурацию, если Вы хотите обеспечить Справку для одного или нескольких окон диалога MapInfo, но при этом не желаете предоставлять пользователю доступ ко всему содержимому стандартного Справочного файла MapInfo.

Если Вы хотите предоставить специализированную Справку для окон диалога MapInfo, Вы должны обеспечить соответствие контекстных ID-номеров (Context ID) в Вашем Справоч- ном файле ID-номерам диалоговых окон MapInfo. Для определения ID-номера диалогового окна MapInfo:

1.Запустите MapInfo с аргументом -helpdiag в командной строке.

2.Активируйте диалог MapInfo, для которого Вы хотите создать Справку.

3.Нажмите клавишу F1. Вследствие использования аргумента -helpdiag вместо отображения Справочного файла MapInfo покажет ID-номер диалога, который Вам следует записать.

227

Глава 12: Интегрированная Картография

4.Используя программное обеспечение создания Справочных файлов, отредактируйте Ваш Справочный файл таким образом, чтобы ID-номер темы в Вашем файле совпадал с ID-номером соответствующего окна диалога MapInfo.

Например, диалоговое окно MapInfo “Поиск” имеет ID-номер 2202. Если Вы хотите обеспе- чить вывод Вашей собственной Справки для этого окна, присвойте значение 2202 контекстному ID-номеру (Context ID) соответствующей темы Вашего Справочного файла.

Учтите следующие факторы:

В комплект поставки языка MapBasic не включен компилятор Справочных файлов в формате Windows (.HLP).

ID-номера диалоговых окон MapInfo могут быть изменены в будущих версиях программы.

Полезные операторы и функции языка MapBasic

В этом разделе перечислены некоторые операторы и функции языка MapBasic, применение которых особенно полезно в приложениях с Интегрированной Картой. Детальное обсуждение этих операторов и функций смотрите в Справочнике MapBasic или Справочной системе.

Имя оператора или функции

Описание

 

Create Legend

Создает новое окно Легенды; позволяет

 

Вам создать окно Легенды как подчиненное

 

окно Вашей программы.

 

Map

Создает новое окно Карты.

 

MenuitemInfoByHandler( ),

 

 

MenuitemInfoByID( )

Возвращает статус команды меню в

 

MapInfo (отмечена галочкой или нет).

Open Table

Открывает таблицы MapInfo.

RemoteQueryHandler( )

Позволяет MapBasic-программам

 

обрабатывать запросы на чтение от DDE-

 

клиентов.

 

Run Menu Command

Имитирует выбор пользователем команды

 

меню MapInfo или кнопки на

 

инструментальной панели (ButtonPad).

SearchInfo( )

Возвращает информацию о результатах

 

исполнения функций SearchPoint( ) è

 

SearchRect( ).

SearchPoint( ), SearchRect( )

Осуществляют поиск в выбранных слоях

 

окна Карта объектов в точке с заданными

 

 

координатами (x,y) или в заданной

 

прямоугольной области соответственно.

 

Эти функции позволяют Вам эмулировать

228

 

Глава 12: Интегрированная Картография

 

инструменты MapInfo Информация и

 

Подпись.

Set Application Window

Обеспечивает переподчинение окон диалога

 

и сообщений об ошибках MapInfo.

 

Выдайте этот оператор в Вашей

 

клиентской программе после запуска

 

MapInfo или подключения к работающему

 

экземпляру MapInfo.

Set Map

Управляет различными режимами

 

представления окон типа Карты.

Set Next Document

Переподчиняет окно MapInfo-документа

 

(например, окно Карты или Легенды) так,

 

что оно становится порожденным окном

 

Вашей программы-клиента.

Set Window

Управляет различными режимами

 

представления окон MapInfo.

Shade, Set Shade

Создает или изменяет тематические слои

 

Карты.

SystemInfo( )

Некоторые значения, возвращаемые этой

 

функцией, предназначены специально для

 

Интегрированной Картографии.

 

Пример: задайте в качестве аргумента

 

SYS_INFO_APPLICATIONWND, чтобы

 

получить HWND-номер приложения.

WindowID( ), WindowInfo( )

Возвращают информацию об окнах

 

MapInfo, в том числе переподчиненных.

Объектная модель механизма управления объектами OLE

На следующей диаграмме приведена схема объектной модели MapInfo. Методы и Свойства

(Properties) детально описываются на следующих страницах.

229

Глава 12: Интегрированная Картография

Объект Application (Приложение) представляет работающий экземпляр MapInfo.

Семейство MBApplications (MapBasic-Приложения) представляет список MapBasic-прило- жений, работающих в данный момент.

Семейство MBGlobals (Глобальные переменные в среде MapBasic) представляет список глобальных переменных, объявленных одним из работающих MapBasic-приложений.

Свойства объекта Application

В следующей таблице перечислены свойства, применимые к объекту Application. Все свойства в этой таблице разрешены только для чтения, за исключением свойств Visible и LastErrorCode.

230

 

 

Глава 12: Интегрированная Картография

 

 

 

 

 

 

Имя свойства

Функциональность

 

 

 

 

 

 

Name

Возвращает имя приложения (например,

 

“MapInfo”). Стандартное свойство OLE.

 

 

 

 

Свойство по умолчанию для объекта Application.

 

FullName

Возвращает полный маршрут к исполняемому

 

 

файлу приложения. Стандартное свойство OLE.

 

Application

Возвращает значение IDispatch объекта Application.

 

 

Стандартное свойство OLE.

 

Parent

Возвращает значение IDispatch порождающего

 

 

объекта; для объекта Application возвращает себя

 

 

самого. Стандартное свойство OLE.

 

Version

Возвращает текстовое представление номера

 

 

 

 

текущей версии, умноженного на 100 (например,

 

 

 

 

MapInfo 6.0.0 возвращает “600”).

 

ProductLevel

Возвращает целое значение, обозначающее

 

 

“уровень” программы MapInfo. Для MapInfo

 

 

Professinal возвращает 400.

 

Visible

Разрешена для записи. Логическое значение,

 

 

контролирующее видимость окна приложения.

 

 

Считывание позволяет определить видимость окна;

 

 

присваивание свойству значения устанавливает

 

 

видимость или невидимость окна.

 

LastErrorCode

Разрешено для записи. Целое значение,

 

 

указывающее кодовый номер последней MapBasic-

 

 

ошибки, случившейся в процессе вызова метода Do,

 

 

Eval или RunCommand. Коды ошибок,

 

 

возвращаемые этим свойством, превышают на 1000

 

 

соответствующие коды ошибок в среде MapBasic.

 

 

Эти коды ошибок автоматически заменяются кодом

 

 

следующей ошибки, но никогда автоматически не

 

 

сбрасываются в 0.

 

LastErrorMessage

Возвращает строку, представляющую текст

 

 

сообщения об ошибке, соответствующей значению

 

 

LastErrorCode.

 

 

 

 

Методы объекта Application

 

Имя метода

Функциональность

 

Do(string)

Eval(string)

Интерпретирует строку string как оператор языка MapBasic, затем выполняет этот оператор.

Интерпретирует строку string как MapBasic-выражение, вычисляет выражение и возвращает его значение. Если

231

Глава 12: Интегрированная Картография

 

выражение логическое, то возвращает “T” или “F”.

RunCommand(string)

Интерпретирует строку string как оператор языка

 

MapBasic; является синонимом “Do”.

RunMenuCommand

Исполняет команду меню, указанную аргументом

(menuid)

menuid типа Integer. Пример смотрите ниже.

DataObject(windowID)

По целочисленному ID-номеру окна windowID

возвращает интерфейс IUnknown, представляющий это

 

 

окно. Для получения графического представления окна

 

в виде метафайла используйте QueryInterface для

 

интерфейса IDataObject. Только значения Idata и

 

ObjectIUnknown разрешены для этого объекта.

 

Замечание: Это “продвинутая” возможность для

 

программистов, использующих язык

 

программирования C. Смотрите далее в этой главе

 

“Уведомления вызывающего приложения“.

SetCallBack(IDispatch)

Регистрирует объект механизма управления объектами

OLE (OLE Automation) как получатель уведомлений,

 

 

генерируемых программой MapInfo. Только одна

 

функция уведомления может быть зарегистрирована в

 

каждый данный момент.

 

Замечание: Это “продвинутая” возможность для

 

программистов, использующих язык

 

программирования C. Смотрите далее в этой главе

 

“Уведомления вызывающего приложения".

 

 

Например, следующая VB-инструкция использует метод Do для передачи программе MapInfo оператора Map, открывающего окно Карта:

mapinfo.Do ”Map From World”

Следующая инструкция использует метод RunMenuCommand для выполнения команды меню MapInfo, имеющей значение кода 1702, которая выбирает MapInfo-инструмент Ладошка. (Для определения конкретного значения кода интересующей Вас команды меню смотрите файл MENU.DEF; 1702 является значением кода M_TOOLS_RECENTER.)

mapinfo.RunMenuCommand 1702

Свойства семейства MBApplications

Семейство MBApplications включает в себя все MapBasic-приложения, работающие в среде MapInfo в данный момент. Все свойства, перечисленные в следующей таблице, разрешены только для чтения.

Имя свойства

Функциональность

Item

Возвращает значение IDispatch конкретного объекта

 

programobject. Аргумент имеет тип VARIANT, который

 

может приводиться к целочисленному индексу в диапазоне

232

 

Глава 12: Интегрированная Картография

 

(1..Count) или строковому значению (имя программы).

 

Является стандартным свойством для семейства

 

MBApplications.

Count

Возвращает длинное целое число объектов в семействе (т.е.

 

число работающих приложений).

Application

Возвращает значение IDispatch приложения MapInfo.

 

 

Стандартное свойство OLE.

Parent

Возвращает значение IDispatch порождающего объекта;

для семейства MBApplications это приложение MapInfo.

 

 

Стандартное свойство OLE.

 

 

Свойства объекта в семействе MBApplications

Каждый объект в семействе MBApplications является работающим MapBasic-приложением. Для все свойств, перечисленных в следующей таблице, разрешено только чтение.

Имя свойства

Функциональность

Name

Возвращает имя приложения (например, “FOO.MBX”).

 

Стандартное свойство OLE для объекта MBApplication.

FullName

Возвращает полный DOS-маршрут к исполняемому .MBX

 

файлу MapBasic-приложения.

 

Стандартное свойство OLE.

Application

Возвращает значение IDispatch MapBasic-приложения.

 

Стандартное свойство OLE.

Parent

Возвращает значение IDispatch порождающего объекта;

 

äëÿ programobject это приложение MapInfo.

 

Стандартное свойство OLE.

Например, следующий оператор определяет имя работающей MapBasic-программы:

Dim appsList As Object

Dim firstname As String

Set appsList = mapinfo.MBApplications If appsList.Count > 0 Then

firstname = appsList(1).Name End If

Методы объекта в семействе MBApplications

Имя метода

Функциональность

Do(string)

Строка string пересылается в процедуру

 

RemoteMsgHandler MapBasic-приложения.

Eval(string)

Строка string передается как аргумент в функцию

 

RemoteQueryHandler( ) MapBasic-приложения;

 

возвращается значение этой функции. Замечание:

233

Глава 12: Интегрированная Картография

Если выражение имеет значение типа Logical, MapInfo возвращает односимвольную строку, “T” или “F”.

Свойства семейства MBGlobals

Семейство MBGlobals включает в себя все глобальные переменные в среде MapBasic, объявленные конкретным работающим MapBasic-приложением. Все свойства, перечисленные в следующей таблице, разрешены только для чтения.

Имя свойства

Функциональность

Item

Возвращает значение IDispatch конкретного

 

объекта mbglobal. Аргумент имеет тип VARIANT,

 

который может приводиться к целочисленному

 

индексу в диапазоне (1...Count) или строковому

 

значению (имя глобальной переменной). Является

 

стандартным свойством для семейства MBGlobals.

Count

Возвращает длинное целое число объектов в

 

семействе (т.е. число глобальных переменных).

Application

Возвращает значение IDispatch приложения

 

MapInfo. Стандартное свойство OLE.

Parent

Возвращает значение IDispatch порождающего

 

объекта; для семейства MBGlobals это объект

 

programobject. Стандартное свойство OLE.

 

 

Свойства объекта в семействе MBGlobals

Каждый объект семейства MBGlobals является глобальной переменной в среде MapBasic. Все свойства, перечисленные в следующей таблице, разрешены только для чтения, за исключением свойства Value.

Имя свойства

Функциональность

Value

Разрешена для записи. Считывание свойства

возвращает строку, представляющую значение

 

 

глобальной переменной; присваивание значения

 

свойству изменяет значение глобальной

 

переменной.

 

Свойство по умолчанию для объекта MBGlobal.

Name

Возвращает имя переменной.

Стандартное свойство OLE.

 

Type

Возвращает текстовую строку, представляющую

 

тип переменной как один из стандартных типов

 

MapInfo (“Integer”, “Date” è ò.ä.).

234

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]