Статьи Королевства Дельфи

       

Обработка переданных данных


Когда пользователь использует команды или кнопки, MapInfo посылает Вашему OLE-методу строку, содержащую восемь элементов, разделенных запятыми. Например, строка, посланная MapInfo, может выглядеть так: "MI:-73.5548,42.122,F,F,-72.867702,43.025,202," Содержание такой строки проще понять, если Вы уже знакомы с функцией MapBasic CommandInfo(). Когда Вы пишете приложения, Вы можете создать новые команды меню и кнопки, вызывающие MapBasic-процедуры. Внутри процедуры-обработчика вызовите функцию CommandInfo(), чтобы получить информацию. Например, следующее обращение к функции определяет, координату Х и У места на карте где пользователи применил инструмент. var X,Y : String; begin KDMapInfoServer1.ExecuteCommandMapBasic('Set CoordSys Layout Units "mm"',[]); X := KDMapInfoServer1.Eval('CommandInfo(%S)',[CMD_INFO_X]).AsString; Y := KDMapInfoServer1.Eval('CommandInfo(%S)',[ CMD_INFO_Y]).AsString; ShowMessage('X= ' + X + ' Y = ' + Y);

ЗначениеКод для событий, связанных с меню Код для событий, связанных с кнопкой
1 CMD_INFO_X
2 CMD_INFO_Y
3 CMD_INFO_SHIFT
4 CMD_INFO_CTRL
5 CMD_INFO_X2
6 CMD_INFO_Y2
7 CMD_INFO_TOOLBTN
8CMD_INFO_MENUITEM

Когда Вы создаете команду меню или кнопку, которая использует синтаксис вызова OLE, MapInfo создает строку, содержащую разделенные запятой все восемь возвращаемых CommandInfo() значений. Строка начинается с префикса "MI:", чтобы Ваш OLE-сервер мог определять, что обращение метода было сделано MapInfo.

Строка, которую MapInfo посылает Вашему методу, выглядит следующим образом: "MI:" + CommandInfo(l) + "," + CommandInfo (2) + "," + CommandInfo(3) + "," + CommandInfo (4) + "," + CommandInfo(5) + "," + CommandInfo (6) + "," + CommandInfo (7) + "," + CommandInfo (8) Предположим, что Ваше приложение добавляет команду меню к локальному меню OLE-методу строку. Если команда меню имеет номер 101 , строка будут выглядеть следующим образом: "Ml :,,,,,,, 101" В этом случае большинство элементов строки пусто, потому что функция CommandInfo( ) может возвращать только эту одну часть информации.

Теперь предположим что вы создаете кнопку которая позволяет пользователю выбирать линии на карте.Строка теперь примет вид - "MI:-73.5548,42.122,F,F,-72.867702,43.025,202," Теперь строка включает несколько элементов.

Первые два элемента содержат х- и у координаты точки на которые пользователь указал мышкой
Следующие два элемента сообщают, была ли нажата клавиша SHIFT или CTRL
Предпоследнии два элемента содержат координаты точки где пользователь отпустил кнопку мышки.
И последний - указывает номер идентификатора кнопки.

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



Содержание раздела