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

Функция DateWindow( )

Функция DateWindow( )

Назначение:

Возвращает текущую дату, установленную как целое в диапазоне от 0 до 99, или (L1) если режим управления окном даты отключен.

Синтаксис:

DateWindow(context)

context L это короткое целое, которое может быть или DATE_WIN_CURPROG или DATE_WIN_SESSION.

Описание:

Это зависит от того, какой контекст (context) передается. Если context это DATE_WIN_SESSION, то возвращаются текущие настройки компьютера. Если context это DATE_WIN_CURPROG, то возвращаются локальные настройки MapBasic, если context пропущен, то возвращаются настройки текущего сеанса.

MBX скомпилированные ранее версии v5.5 будут до сих пор конвертировать двузначные года в текущее столетие (5.0 и более ранние версии). Для получения результатов, адаптированных к следующему тысячелетию, перекомпилируйте приложение с помощью MapBasic v5.5.

Пример:

В следующем примере переменные Date1 = 19890120, Date2 = 20101203 и MyYear = 1990.

DIM Date1, Date2 as Date

DIM MyYear As Integer

Set Format Date "US"

Set Date Window 75

Date1 = StringToDate("1/20/89")

Date2 = StringToDate("12/3/10")

MyYear = Year("12/30/90")

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

Оператор SetDateWindow

168

Справочник MapBasic

Функция Day( )

Функция Day( )

Назначение:

Возвращает номер дня (от 1 до 31) из даты.

Синтаксис:

Day(date_expr)

где date_expr – выражение, в результате которого получается дата.

Величина, полученная в результате:

Короткое целое число. Величина типа SmallInt.

Описание:

Функция возвращает целочисленное значение от одного до тридцати одного, являющееся номером дня в месяце. Например, для даты 12/17/92 функция будет равна 17.

Пример:

Dim day_var As SmallInt, date_var As Date date_var = StringToDate("05/23/1985") day_var = Day(date_var)

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

CurDate( ), Month( ), Timer( ), Year( )

Справочник MapBasic

169

Оператор DDEExecute

Оператор DDEExecute

Назначение:

Посылает на выполнение команду для другой программы по каналу DDELсвязи (динамического обмена данными).

Предупреждение:

Использование этого оператора возможно только в среде Microsoft Windows.

Синтаксис:

DDEExecute channel , command

где

channel – номер открытого канала DDELсвязи, целое число;

command – команда, посылаемая для выполнения в другую программу (DDELсервер), строковая величина.

Описание:

Посылает на выполнение команду в другую программу, присоединенную к каналу DDELсвязи.

Номер канала должен быть задан функцией DDEInitiate( ), которая открывает канал динамического обмена данными. Оператор DDEExecute возможен только после выполнения функции DDEInitiate( ). Параметр command должен зависеть от той программы, которой будет послана команда. Обе программы должны поддерживать DDELсвязь. Правильный формат команды зависит от правил, принятых в подсоединенной программе. Вы должны изучить документацию другой программы, прежде чем налаживать DDELсвязь.

Ошибки:

Оператор может генерировать следующие коды ошибок: ERR_CMD_NOT_SUPPORTED, если программа выполняется не в среде Windows; ERR_NO_RESPONSE_FROM_APP, если программаLсервер не отвечает.

Пример:

Программными средствами MapBasic Вы можете открыть канал DDELсвязи c Microsoft Excel и обращаться к нему как к программеLсерверу. Если канал был открыт для объекта (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$( )

170

Справочник MapBasic

Функция DDEInitiate( )

Функция DDEInitiate( )

Назначение:

Открывает новый канал DDELсвязи и возвращает его номер.

Предупреждение:

Использование этой функции возможно только в среде Microsoft Windows.

Синтаксис:

DDEInitiate(appl_name, topic_name)

где

appl_name – имя подсоединяемой программы (например, "MapInfo"), строковая величина; topic_name – имя документа или некоторого объекта (topic) программы (например, "System"), строковая величина.

Величина, полученная в результате:

Целое число. Величина типа Integer.

Описание:

Функция инициирует один канал DDELсвязи (динамического обмена данными), назначая ему номер.

Этот канал связи позволяет соединить две программы, работающие в среде Microsoft Windows, для пересылки информации. Как только канал открыт, MapBasic может читать информацию из документа другой программы (функция DDERequest$( )) или записывать в этот документ (оператор DDEPoke). После информационного обмена каналы связи рекомендуется закрыть, используя операторы DDETerminate или DDETerminateAll.

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

Параметр appl_name задает имя программы, которое понятно для DDELсвязи (например, для Microsoft Excel имя "Excel"). Программа, с которой связывается MapBasic, должна быть уже загружена перед выполнением функции DDEInitiate( ). Из программы на MapBasic это можно сделать при помощи оператора Run Program.

Замечание: Не все программы Windows поддерживают DDELсвязь. Для получения информации о поддержке DDE смотрите документацию этих программ.

Параметр topic_name задает некоторый объект для программы и зависит от нее. Каждая программа обладает некоторым набором объектов. О списке объектов, сопровождающих определенную программу, Вы можете прочитать в соответствующей документации. Для многих программ именем объекта является имя файла документа. Например, пусть "ORDERS.XLS" – имя файла рабочей таблицы программы Microsoft Excel и канал связи с ним открывается так:

Dim i_chan As Integer

i_chan = DDEInitiate("Excel", "C:\ORDERS.XLS")

Многие программы поддерживают специальный объект "System". Начав DDELобмен, используя объект "System", Вы можете с помощью функции DDERequest$( ) получить список строк, представляющих корректные имена объектов, поддерживаемые данной программой, например, список открытых файлов. Получив список открытых файлов, можно начать новый сеанс DDELсвязи с любым документом.

Справочник MapBasic

171

Функция DDEInitiate( )

В следующей таблице приводится список некоторых программ и их объектов для использования в функции DDEInitiate( ):

Вызов функции

Что происходит при DDEUобмене

DDEInitiate("Excel", "System")

Функция DDERequest$( ) может извлечь системную

 

информацию Excel, такую, как список рабочих таблиц,

 

загруженных сейчас в среде Excel, и оператор DDEExL

 

ecute может послать команду на выполнение в Excel.

DDEInitiate("Excel", wks)

Если wks – это имя документа Excel (например,

 

"Sheet1" или "May.xls"), то следующий оператор DDE4

 

Poke может поместить какуюLнибудь величину в

 

таблицу Excel и функция DDERequest$( ) может

 

прочитать информацию из нее.

DDEInitiate("MapInfo", "System")

Следующая функция DDERequest$( ) может извлечь

 

такую информацию, как список выполняемых сейчас в

 

MapInfo программ MapBasic.

DDEInitiate("MapInfo", mbx)

Если mbx – это имя программы на MapBasic, которая

 

сейчас выполняется (например, "C:\GRIDS.MBX"), то

 

следующий оператор DDEPoke может назначить

 

какуюLнибудь величину глобальной переменной

 

определенной программы MapBasic и функция

 

DDERequest$( ) может прочитать текущее значение

 

такой переменной.

Когда программа MapBasic выполняет функцию DDEInitiate( ), то MapBasic выступает как "клиент" в DDELсвязи. Другие программы Windows выступают как программыL"серверы". В пределах одной связи клиент всегда активен, а сервер только отвечает на запросы клиента. MapBasic может поддерживать одновременно сразу столько каналов, сколько могут позволить ресурсы памяти и системы Вашего компьютера.

Прикладная программа одновременно может быть как клиентом в сеансе одной связи (выполняя такие операторы как DDEInitiate( ) и др.), так и сервером для другого сеанса связи (выполняя процедуру со стандартным именем RemoteMsgHandler).

Ошибки:

Функция может вернуть следующие коды ошибок: ERR_CMD_NOT_SUPPORTED, если программа выполняется не в среде Windows; ERR_INVALID_CHANNEL, если неправильно задан номер канала.

Пример:

Следующий фрагмент текста программы иллюстрирует DDELсвязь Microsoft Excel. Целью является передача простого сообщения ("Привет от MapInfo!") в первую ячейку первой рабочей таблицы, но только если она пуста. Если ячейка не пуста, ничего записываться не будет, содержимое ячейки будет показано пользователю MapInfo.

Dim chan_num, tab_marker As Integer

Dim topiclist, topicname, cell As String

172

Справочник 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

173

Функция 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

174

Справочник MapBasic

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