- •Add Cartographic Frame
- •Оператор Alter Button
- •Оператор Alter ButtonPad
- •Оператор Alter MapInfoDialog
- •Оператор Alter Menu
- •Оператор Alter Menu Item
- •Оператор Alter Object
- •Оператор Alter Table
- •Оператор Autolabel
- •Оператор Beep
- •Оператор Browse
- •Предложение Brush
- •Оператор Call
- •Предложение CharSet
- •Функция ChooseProjection$()
- •Оператор Close All
- •Оператор Close File
- •Оператор Close Table
- •Оператор Close Window
- •Оператор Commit Table
- •Оператор Continue
- •Предложение Control CheckBox
- •Предложение Control EditText
- •Предложение Control GroupBox
- •Предложение Control RadioGroup
- •Оператор Create Arc
- •Оператор Create ButtonPad
- •Оператор Create ButtonPads As Default
- •Оператор Create Cartographic Legend
- •Оператор Create Collection
- •Оператор Create Ellipse
- •Оператор Create Frame
- •Оператор Create Grid
- •Оператор Create Index
- •Оператор Create Legend
- •Оператор Create Line
- •Оператор Create Map
- •Оператор Create Map3D
- •Оператор Create Menu
- •Оператор Create Menu Bar
- •Оператор Create MultiPoint
- •Оператор Create Point
- •Оператор Create PrismMap
- •Оператор Create Ranges
- •Оператор Create Rect
- •Оператор Create Redistricter
- •Оператор Create Region
- •Оператор Create Report From Table
- •Оператор Create RoundRect
- •Оператор Create Styles
- •Оператор Create Table
- •Оператор Create Text
- •Оператор DDEExecute
- •Оператор DDEPoke
- •Оператор DDETerminate
- •Оператор DDETerminateAll
- •Оператор Declare Function
- •Оператор Declare Sub
- •Оператор Define
- •Оператор Delete
- •Оператор Dialog
- •Оператор Dialog Preserve
- •Оператор Dialog Remove
- •Оператор Dim
- •Оператор Do Case...End Case
- •Оператор Do...Loop
- •Оператор Drop Index
- •Оператор Drop Map
- •Оператор Drop Table
- •Оператор End MapInfo
- •Оператор End Program
- •Процедура EndHandler
- •Оператор Error
- •Оператор Exit Do
- •Оператор Exit For
- •Оператор Exit Function
- •Оператор Exit Sub
- •Оператор Export
- •Оператор Fetch
- •Оператор Find
- •Оператор Find Using
- •Предложение Font
- •Процедура ForegroundTaskSwitchHandler
- •Функция FormatDate$
- •Оператор Function...End Function
- •Оператор Get
- •Оператор Graph
- •оператор Import
- •Оператор Include
- •Оператор Input #
- •Оператор Insert
- •Функция IsPenWidthPixels()
- •Оператор Kill
- •Оператор Line Input
- •Процедура Main
- •Оператор Map
- •Оператор Menu Bar
- •Оператор Metadata
- •Оператор Note
- •Оператор Objects Check
- •Оператор Objects Clean
- •Оператор Objects Combine
- •Оператор Objects Disaggregate
- •Оператор Objects Enclose
- •Оператор Objects Erase
- •Оператор Objects Intersect
- •Оператор Objects Overlay
- •Оператор Objects Snap
- •Оператор Objects Split
- •Оператор OnError
- •Оператор Open File
- •Оператор Open Table
- •Оператор Open Window
- •Предложение Pen
- •Функция PenPattern()
- •Функция PenWidthToPoints()
- •Функция PointsToPenWidth()
- •Оператор Print
- •Оператор PrintWin
- •Оператор ProgressBar
- •Оператор Put
- •Оператор Randomize
- •Оператор ReDim
- •Оператор Register Table
- •Оператор Reload Symbols
- •Процедура RemoteMapGenHandler
- •Процедура RemoteMsgHandler
- •Оператор Rename File
- •Оператор Rename Table
- •Оператор Reproject
- •Оператор Resume
- •Оператор Rollback
- •Оператор Run Application
- •Оператор Run Command
- •Оператор Run Menu Command
- •Оператор Run Program
- •Оператор Save File
- •Оператор Save Workspace
- •Оператор Seek
- •Процедура SelChangedHandler
- •Оператор Select
- •Оператор Server Begin Transaction
- •Оператор Server Bind Column
- •Оператор Server Close
- •Оператор Server Commit
- •Оператор Server Create Map
- •Оператор Server Create Table
- •Оператор Server Create Style
- •Оператор Server Disconnect
- •Оператор Server Fetch
- •Оператор Server Refresh
- •Оператор Server Rollback
- •Оператор Server Set Map
- •Оператор Set Application Window
- •Оператор Set Area Units
- •Оператор Set Browse
- •Оператор Set Cartographic Legend
- •Оператор Set Command Info
- •Оператор Set CoordSys
- •Оператор Set Date Window
- •Оператор Set Digitizer
- •Оператор Set Distance Units
- •Оператор Set Drag Threshold
- •Оператор Set Event Processing
- •Оператор Set File TimeOut
- •Оператор Set Format
- •Оператор Set Graph
- •Оператор Set Handler
- •Оператор Set Layout
- •Оператор Set Legend
- •Оператор Set Map
- •Оператор Set Map3D
- •Оператор Set Next Document
- •Оператор Set Paper Units
- •Оператор Set PrismMap
- •Оператор Set ProgressBars
- •Оператор Set Redistricter
- •Оператор Set Resolution
- •Оператор Set Shade
- •Оператор Set Table
- •Оператор Set Target
- •Оператор Set Window
- •Оператор Shade
- •Оператор StatusBar
- •Оператор Stop
- •Оператор Sub...End Sub
- •Предложение Symbol
- •Оператор Terminate Application
- •Функция Time()
- •Процедура ToolHandler
- •Оператор Type
- •Оператор UnDim
- •Оператор Unlink
- •Оператор Update
- •Оператор Update Window
- •Оператор While...Wend
- •Процедура WinChangedHandler
- •Процедура WinClosedHandler
- •Процедура WinFocusChangedHandler
- •Оператор Objects Move
- •Оператор Objects Offset
- •Функция Offset()
- •Функция SphericalOffset()
- •Функция SphericalOffsetXY()
- •Функция CartesianOffsetXY()
- •Функция LayerInfo( )
- •Оператор Register
- •Оператор Server Create Map
- •Функция TableInfo( )
Оператор DDEExecute
Оператор DDEExecute
Назначение:
Посылает на выполнение команду для другой программы по каналу DDE-связи (динамического обмена данными).
Предупреждение:
Использование этого оператора возможно только в среде Microsoft Windows.
Синтаксис:
DDEExecute channel , command
где
channel – номер открытого канала DDE-связи, целое число;
command – команда, посылаемая для выполнения в другую программу (DDE-сервер), строковая величина.
Описание:
Посылает на выполнение команду в другую программу, присоединенную к каналу DDE-связи.
Номер канала должен быть задан функцией DDEInitiate( ), которая открывает канал динамического обмена данными. Оператор DDEExecute возможен только после выполнения функции DDEInitiate( ). Параметр command должен зависеть от той программы, которой будет послана команда. Обе программы должны поддерживать DDE-связь. Правильный формат команды зависит от правил, принятых в подсоединенной программе. Вы должны изучить документацию другой программы, прежде чем налаживать DDE-связь.
Ошибки:
Оператор может генерировать следующие коды ошибок: ERR_CMD_NOT_SUPPORTED, если программа выполняется не в среде Windows; ERR_NO_RESPONSE_FROM_APP, если программа-сервер не отвечает.
Пример:
Программными средствами MapBasic Вы можете открыть канал DDE-связи c Microsoft Excel и обращаться к нему как к программе-серверу. Если канал был открыт для объекта (topic) "System", Вы можете выполнить как команду, так и макрофункцию Excel. В следующем примере открывается рабочая таблица "TRIAL.XLS" в программе Excel:
Dim i_chan As Integer
i_chan = DDEInitiate("Excel", "System")
DDEExecute i_chan, "[OPEN(""C:\DATA\TRIAL.XLS"")]"
Смотрите также:
DDEInitiate, DDEPoke, DDERequest$( )
186 |
Справочник MapBasic |
Функция DDEInitiate( )
Функция DDEInitiate( )
Назначение:
Открывает новый канал DDE-связи и возвращает его номер.
Предупреждение:
Использование этой функции возможно только в среде Microsoft Windows.
Синтаксис:
DDEInitiate(appl_name, topic_name)
где
appl_name – имя подсоединяемой программы (например, "MapInfo"), строковая величина; topic_name – имя документа или некоторого объекта (topic) программы (например, "System"), строковая величина.
Величина, полученная в результате:
Целое число. Величина типа Integer.
Описание:
Функция инициирует один канал DDE-связи (динамического обмена данными), назначая ему номер.
Этот канал связи позволяет соединить две программы, работающие в среде Microsoft Windows, для пересылки информации. Как только канал открыт, MapBasic может читать информацию из документа другой программы (функция DDERequest$( )) или записывать в этот документ (оператор DDEPoke). После информационного обмена каналы связи рекомендуется закрыть, используя операторы DDETerminate или DDETerminateAll.
DDE-связь возможна только в среде Microsoft Windows. И, если Ваше приложение будет обращаться к услугам DDE в среде другой вычислительной платформы, то MapBasic выдаст ошибку. Для обхода такого рода конфликта, Вы можете определить, в какой среде выполняется Ваша программа с помощью функции SystemInfo( ).
Параметр appl_name задает имя программы, которое понятно для DDE-связи (например, для Microsoft Excel имя "Excel"). Программа, с которой связывается MapBasic, должна быть уже загружена перед выполнением функции DDEInitiate( ). Из программы на MapBasic это можно сделать при помощи оператора Run Program.
Замечание: Не все программы Windows поддерживают DDE-связь. Для получения информации о поддержке DDE смотрите документацию этих программ.
Параметр topic_name задает некоторый объект для программы и зависит от нее. Каждая программа обладает некоторым набором объектов. О списке объектов, сопровождающих определенную программу, Вы можете прочитать в соответствующей документации. Для многих программ именем объекта является имя файла документа. Например, пусть "ORDERS.XLS" – имя файла рабочей таблицы программы Microsoft Excel и канал связи с ним открывается так:
Dim i_chan As Integer
i_chan = DDEInitiate("Excel", "C:\ORDERS.XLS")
Многие программы поддерживают специальный объект "System". Начав DDE-обмен, используя объект "System", Вы можете с помощью функции DDERequest$( ) получить список строк, представляющих корректные имена объектов, поддерживаемые данной программой, например, список открытых файлов. Получив список открытых файлов, можно начать новый сеанс DDE-связи с любым документом.
Справочник MapBasic |
187 |
Функция DDEInitiate( )
В следующей таблице приводится список некоторых программ и их объектов для использования в функции DDEInitiate( ):
Вызов функции |
Что происходит при DDE8обмене |
DDEInitiate("Excel", "System") |
Функция DDERequest$( ) может извлечь системную |
|
информацию Excel, такую, как список рабочих таблиц, |
|
загруженных сейчас в среде Excel, и оператор DDEEx- |
|
ecute может послать команду на выполнение в Excel. |
DDEInitiate("Excel", wks) |
Если wks – это имя документа Excel (например, |
|
"Sheet1" или "May.xls"), то следующий оператор DDE |
|
Poke может поместить какую-нибудь величину в |
|
таблицу Excel и функция DDERequest$( ) может |
|
прочитать информацию из нее. |
DDEInitiate("MapInfo", "System") |
Следующая функция DDERequest$( ) может извлечь |
|
такую информацию, как список выполняемых сейчас в |
|
MapInfo программ MapBasic. |
DDEInitiate("MapInfo", mbx) |
Если mbx – это имя программы на MapBasic, которая |
|
сейчас выполняется (например, "C:\GRIDS.MBX"), то |
|
следующий оператор DDEPoke может назначить |
|
какую-нибудь величину глобальной переменной |
|
определенной программы MapBasic и функция |
|
DDERequest$( ) может прочитать текущее значение |
|
такой переменной. |
Когда программа MapBasic выполняет функцию DDEInitiate( ), то MapBasic выступает как "клиент" в DDE-связи. Другие программы Windows выступают как программы-"серверы". В пределах одной связи клиент всегда активен, а сервер только отвечает на запросы клиента. MapBasic может поддерживать одновременно сразу столько каналов, сколько могут позволить ресурсы памяти и системы Вашего компьютера.
Прикладная программа одновременно может быть как клиентом в сеансе одной связи (выполняя такие операторы как DDEInitiate( ) и др.), так и сервером для другого сеанса связи (выполняя процедуру со стандартным именем RemoteMsgHandler).
Ошибки:
Функция может вернуть следующие коды ошибок: ERR_CMD_NOT_SUPPORTED, если программа выполняется не в среде Windows; ERR_INVALID_CHANNEL, если неправильно задан номер канала.
Пример:
Следующий фрагмент текста программы иллюстрирует DDE-связь Microsoft Excel. Целью является передача простого сообщения ("Привет от MapInfo!") в первую ячейку первой рабочей таблицы, но только если она пуста. Если ячейка не пуста, ничего записываться не будет, содержимое ячейки будет показано пользователю MapInfo.
Dim chan_num, tab_marker As Integer
Dim topiclist, topicname, cell As String
188 |
Справочник MapBasic |
Функция DDEInitiate( )
chan_num = DDEInitiate("EXCEL", "System") If chan_num = 0 Then
Note "Простите, но Excel не отзывается." End Program
End If
'Вызов списка документов – рабочих таблиц сейчас
'загруженных в среде Excel
topiclist = DDERequest$(chan_num, "topics")
'Здесь должен быть получен список topiclist
'с элементами в виде:
' |
": Sheet1 |
System" |
'(если раб. таблица еще не имеет имени)
'или в таком виде:
' ": C:Orders.XLS Sheet1 System"
'Если мы имеем дело с Excel версии 5,
'то topiclist может выглядеть так:
'"[Book1]Sheet1 [Book2]Sheet2 ..."
'Теперь выделим из списка первое имя (может быть "Sheet1")
'для этого извлечем из строки текст между первым и
'вторым символом табуляции;
'или для Excel 5 версии текст до первой табуляции.
If Left$(topiclist, 1) = ":" Then ' ...then it's Excel 4.
tab_marker = InStr(3, topiclist, Chr$(9) ) If tab_marker = 0 Then
Note "В программе Excel нет открытых документов! Остановка." End Program
End If
topicname = Mid$(topiclist, 3, tab_marker – 3) Else
' ... для Excel 5.x
tab_marker = Instr(1, topiclist, Chr$(9) ) topicname = Left$( topiclist, tab_marker – 1)
End If
' Открываем канал для связи с открытым документом
'(например, "Sheet1") DDETerminate chan_num
chan_num = DDEInitiate("Excel", topicname) If chan_num = 0 Then
Note "Problem communicating with " + topicname End Program
End If
'Теперь проверим первую ячейку таблицы Excel.
'Если она пуста, напишем туда сообщение.
'Если нет, то прочитаем содержимое и, используя
'оператор NOTE, покажем его в MapBasic.
'Заметим, что чистая ячейка возвращает знаки
'"возврат каретки" и "перевод строки": Chr$(13) + Chr$(10). cell = DDERequest$( chan_num, "R1C1" )
If cell <> Chr$(13) + Chr$(10) Then Note
Справочник MapBasic |
189 |
Функция DDEInitiate( )
"Сообщение не послано; В ячейке уже содержится:" + cell Else
DDEPoke chan_num, "R1C1", "Привет от MapInfo!"
Note "Сообщение послано в Excel,"+topicname+ ",R1C1." End If
DDETerminateAll
Приведенный пример не гарантирует от ошибок. Например, в Excel может в момент вызова быть активно окно графика (“Chart1” или подобные ему); тогда обращение к ячейке R1C1 будет ошибочным. Кроме того, если Вы работаете с русской версией Excel, то обращаться нужно не к R1C1, а к С1К1 и т.д.
Смотрите также:
DDEExecute, DDEPoke, DDERequest$, DDETerminate, DDETerminateAll
190 |
Справочник MapBasic |