Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MB6REFRU.pdf
Скачиваний:
10
Добавлен:
13.02.2015
Размер:
3.83 Mб
Скачать

Оператор Reload Symbols

Оператор Reload Symbols

Назначение:

Открывает и перезагружает файл символов MapInfo и тем самым меняет набор символов, используемый MapInfo и показываемый в диалоге НАСТРОЙКИ > СТИЛЬ СИМВОЛА.

Синтаксис (версия для символов MapInfo 3.0):

Reload Symbols

Синтаксис (только для растровых символов):

Reload Custom Symbols From directory

где

directory – строка с маршрутом.

Описание:

Оператор используется в утилите SYMBOL.MBX, которая дает пользователю возможность создавать свои символы.

398

Справочник MapBasic

Процедура RemoteMapGenHandler

Процедура RemoteMapGenHandler

Назначение:

Имя специальной процедуры, вызываемой тогда, когда клиент OLE Automation вызывает метод MapL GenHandler Automation.

Синтаксис:

Declare Sub RemoteMapGenHandler Sub RemoteMapGenHandler statement_list

End Sub

statement_list – список операторов MapBasic, выполняемых когда клиент OLE Automation вызывает метод MapGenHandler.

Описание:

RemoteMapGenHandler это имя процедуры MapBasic специального назначения, которая вызывается через OLE Automation. Если Вы используете OLE Automation для управления MapInfo, и вызываете метод MapGenHandler, MapInfo вызывает процедуру RemoteMapGenHandlers любого работающего приложения MapBasic. Метод MapGenHandler – это компонента механизма MapGen Automation, представленного в MapInfo 4.1.

Метод MapGenHandler Automation берет один аргумент: строку. Внутри процедуры RemoteMapGen4

Handler Вы можете восстановить строковый аргумент с помощью вызова следующей функции ...

CommandInfo(CMD_INFO_MSG)

... и присвоить результат строковой переменной.

Приложения MapInfo ProServer

MapInfo ProServer – это специальная версия MapInfo, которая поддерживает приложения MapInfo в среде Internet/Intranet. Процедура RemoteMapGenHandler обычно используется, если Вы разрабатываете приложения с использованием MapInfo ProServer, и Вам необходимо контролировать элементы MapInfo, которые Вы не можете контролировать используя метод OLE Automation.

1.В Вашей программе .MB, создайте процедуру, вызывающую RemoteMapGenHandler.

2.В процедуре RemoteMapGenHandler перечисляются операторы MapBasic, которые должны будут выполняться в Вашем ProServerLприложении.

3.Откомпилируйте приложение MapBasic (MBXLфайл).

4.Сконфигурируйте ProServerLприложение так, чтобы ваш MBXLфайл предназначался для сеанса.

5.В ProServerLприложении, вызовите метод OLE Automation MapGenHandler. Когда Вы вызываете этот метод, MapInfo вызовет процедуру RemoteMapGenHandler в MBXLфайле.

Более подробная информация о MapInfo ProServer содержится в документаци о ProServer.

Пример:

В качестве примера использования RemoteMapGenHandler, смотрите программу MAPSRVR.MB, которая поставляется как компонента MapInfo ProServer.

Справочник MapBasic

399

Процедура RemoteMsgHandler

Процедура RemoteMsgHandler

Назначение:

Процедура, автоматически выполняющаяся при получении командного сообщения из другой программы.

Синтаксис:

Declare Sub RemoteMsgHandler Sub RemoteMsgHandler

statement_list

End Sub

где

statement_list – список операторов процедурыLобработчика.

Описание:

RemoteMsgHandler – зарезервированное имя процедуры MapBasic, предназначенной для обслуживания связи между прикладными программами и другими программами. В среде Windows для связи между программами используется DDE (Dynamic Data Exchange), в Macintosh используется Apple Events. Однако основные принципы связи для всех платформ, где может работать программа MapInfo, одинаковы.

Если Вы запустили программу, которая имеет процедуру RemoteMsgHandler, то MapInfo автоматически вызовет процедуру RemoteMsgHandler, как только другая программа (например, работающая с базами данных) пошлет "выполняемую" команду ("DoScript" в системе Macintosh). Для получения "послания" в виде строки в процедуре RemoteMsgHandler используется функция

CommandInfo( ).

Для завершения программы в теле процедуры RemoteMsgHandler используется оператор End Pro4 gram. При этом полностью освобождается оперативное пространство, занимаемое прикладной программой, и связь с ним будет уже невозможно установить.

Связь между программами в среде Windows

Для налаживания связи между программами сначала создается один канал DDELсвязи (динамического обмена данных) и ему назначается номер. Этот канал связи позволяет соединить две программы, работающие в среде Microsoft Windows, для пересылки информации.

Прикладная программа может быть как "клиентом" DDELсвязи в пределах одного канала, так и "сервером" для другого канала, используя в последнем случае процедуру RemoteMsgHandler. Когда пользователь запускает программу, в которой есть такая процедура, программа не завершается после того, как выполнятся все операторы процедуры Main и других процедур, вызванных из нее. Прикладная программа будет пребывать в режиме ожидания до тех пор, пока "клиент" (какаяLнибудь другая программа в Windows) не обратится к "серверу".

Впроцедуре обработчика DDELсвязи для прочтения сообщения в строковом представлении используется функция CommandInfo(CMD_INFO_MSG).

Вдинамическом обмене данных имя программы, выступающей в роли сервера (например, "C:\MAPL BASIC\DISPATCH.MBX") должно использоваться как объект (topic) обмена.

Связь между программами в среде Macintosh

В Macintosh связь между программами поддерживается через Apple Events. При этом внешняя программа является "клиентом" (активная роль), а прикладная программа MapBasic – "сервером"

400

Справочник MapBasic

Процедура RemoteMsgHandler

(пассивная роль).

"Клиент" связи Apple Event должен посылать имя прикладной программы, находящейся в состоянии ожидания (например, "AE_Handler.MBX"), заключенной в кавычки, как первую часть послания DoScript event или же использовать ключевое слово "kobj" как тип объекта.

MapInfo автоматически вызывает RemoteMsgHandler процедуру всякий раз, когда клиент связи Apple Event выполняет оператор Do Script. Для прочтения послания в процедуре используется вызов функции:

CommandInfo(CMD_INFO_MSG)

Смотрите также:

DDEExecute, DDEInitiate( ), SelChangedHandler, ToolHandler, WinChangedHandler, Win4

ClosedHandler

Справочник MapBasic

401

Функция RemoteQueryHandler( )

Функция RemoteQueryHandler( )

Назначение:

Функция, которая вызывается, когда MapBasicLпрограмма работает DDELсервером и получает от DDELклиента внешний “считывающий” запрос.

Синтаксис:

Declare Function RemoteQueryHandler( ) As String

Function RemoteQueryHandler( ) As String statement_list

End Function

где

statement_list – группа операторов, которую нужно выполнить при получении “считывающего” запроса.

Описание:

Функция RemoteQueryHandler( ) работает с механизмом DDE (Dynamic Data Exchange). Подробнее механизм DDE описан в главе 11 Руководства пользователя MapBasic.

Внешняя программа может начать сеанс DDELсвязи с Вашей MapBasicLпрограммой. При инициации связи внешняя программа использует значение “MapInfo” как имя DDELпрограммы и имя Вашей MapBasicLпрограммы как DDELтему (topic). Как только связь установится, клиент (внешняя программа) может посылать считывающие запросы к MapBasicLпрограмме (серверу).

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

Внимание: DDELклиент может считывать значения глобальных переменных MapBasicLпрограммы без помощи RemoteQueryHandler( ). Если клиент выдаст считывающий запрос к глобальной переменной MapBasic, MapInfo автоматически возвратит требуемое значение вместо того, чтобы обратиться к RemoteQueryHandler( ).

Пример:

В следующем примере вызывается функция CommandInfo( ), чтобы определить, какой объект требует DDELклиент. Если объект называется “code1”, то действия продолжаются по одному сценарию, если нет, то по другому.

Function RemoteQueryHandler() As String Dim s_item_name As String

s_item_name = CommandInfo(CMD_INFO_MSG) If s_item_name = ”code1” Then

RemoteQueryHandler = custom_function_1() Else

RemoteQueryHandler = custom_function_2() End If

End Function

Смотрите также:

DDEInitiate( ), RemoteMsgHandler

402

Справочник MapBasic

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