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

Оператор Sub...End Sub

Оператор Sub...End Sub

Назначение:

Определяет процедуру, которую можно вызвать из другой процедуры оператором Call.

Синтаксис:

Sub subroutine [ ([ByVal] parameter As var_type [, ... ]) ] statement_list

End Sub

где

subroutine – имя процедуры; parameter – имя параметра процедуры;

var_type – стандартный в MapBasic тип переменных (например, Integer) или сложноопределенный тип, заранее объявленный оператором Type;

statement_list – список (от 0 и более) операторов процедуры.

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

Вы не можете использовать оператор Sub... End Sub в окне MapBasic.

Описание:

Оператор Sub... End Sub описывает процедуру в MapBasic. Как только sub-процедура определена, к ней можно обращаться из любой другой части программы оператором Call.

Каждая процедура, задаваемая оператором Sub... End Sub, должна быть заранее объявлена оператором Declare Sub.

Каждая подпрограмма может иметь или не иметь параметры, значения которых передаются из процедуры, вызвавшей эту sub-процедуру. В дальнейшем параметры используются процедурой наравне с локальными переменными, имена и типы которых объявляются оператором Dim.

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

[ByVal] parameter As var_type

где parameter – имя параметра. Каждое такое определение параметра процедуры должно быть уникально.

Если при определении параметра процедуры ключевое слово ByVal не участвует, то это значит, что параметр определен ссылкой ("by reference"). То есть программа, вызывая процедуру, параметры которой заданы ссылкой, должна использовать только имена переменных в качестве параметров вызова. Вы не можете передавать константы или выражения (такие как "Москва") ссылкой. Впоследствии, если sub-процедура изменила значения этих параметров, то также изменятся значения переменных, использовавшихся как параметры вызова в операторе Call. Таким образом, параметр, передаваемый ссылкой, позволяет не только доставлять значение из вызывающей процедуры, но и возвращать значение обратно в этом же параметре.

Справочник MapBasic

603

Оператор Sub...End Sub

Если при объявлении использовалось ключевое слово ByVal, то параметр процедуры определен для передачи процедуре значением ("by value"). Программа, вызывая процедуру, параметры которой заданы значением, может использовать как имена переменных, так и константы или выражения в качестве параметров вызова. Однако, если изменить значение такого параметра в теле процедуры, новое значение нельзя будет вернуть в вызывающий модуль. Параметр, определенный как "значение", не может передавать массивы, значения переменных сложного типа, созданного оператором Type и объявленных в предложении Alias.

Sub-процедура может обрабатывать массивы. В списке параметров массив объявляется с помощью пустых скобок, следующих за именем переменной. В следующем примере в процедуре "ListProcessor" объявлен в качестве параметра массив целых величин "items".

Sub ListProcessor(items( ) As Integer)

При вызове такой процедуры оператором Call параметром вызова должно быть имя массива переменных целого типа без круглых скобок.

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

Предложение Exit Sub заканчивает работу sub-процедуры.

Пример:

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

Declare Sub Main

Declare Sub Cube(ByVal original As Float, cubed As Float)

Sub Main

Dim x, result As Float

Call Cube(2, result)

' переменная result теперь имеет значение: 8 (2 x 2 x 2) x = 1

Call Cube(x + 2, result)

' переменная result теперь имеет значение: 27 (3 x 3 x 3) End Sub

Sub Cube (ByVal original As Float, cubed As Float)

cubed = original ^ 3 End Sub

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

Call, Declare Sub, Dim, Exit Sub, Function... End Function, Global

604

Справочник MapBasic

Предложение Symbol

Предложение Symbol

Назначение:

Задание стиля символа для точечного объекта.

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

Symbol(shape, color, size )

где

shape – целое число, величина типа Integer, от 31 или больше, задающий символ из стандартного набора MapInfo (значение 31 задает невидимый символ);

color – целочисленный код цвета в системе RGB (смотрите описание функции RGB( )); size – целое число, величина типа Integer, размер символа в точках от 1 до 48.

Синтаксис (вариант 2 8 версия для символа из шрифта TrueType):

Symbol(shape, color, size, fontname, fontstyle, rotation )

где

shape – целое число, величина типа Integer, от 31 или больше, задающий символ из шрифта TrueType (значение 31 задает невидимый символ);

color – целочисленный код цвета в системе RGB (смотрите описание функции RGB( )); size – целое число, величина типа Integer, размер симвла в точках от 1 до 48;

fontname – строка с именем шрифта TrueType (например, “WingDings”);

fontstyle – целочисленный код, величина типа Integer, управляющий написанием шрифта; rotation – вещественное число, угол поворота в градусах.

Синтаксис (вариант 3 8 версия для символа из растрового файла):

Symbol(filename, color, size, customstyle )

filename – строка до 31 символа длиной с именем растрового файла (файл должен находиться в каталоге, заданном пользователем);

color – целочисленный код цвета в системе RGB (смотрите описание функции RGB( )); size – целое число, величина типа Integer, размер симвла в точках от 1 до 48;

customstyle – целочисленный код типа Integer, управляющий цветом и фоном символа.

Синтаксис (вариант 4):

Symbol symbol_expr

где

symbol_expr – выражение, результат которого есть величина типа Symbol, например, переменная типа Symbol или MakeSymbol(shape, color, size).

Описание:

Предложение Symbol позволяет задавать стиль символа для точечного объекта. Предложение не является отдельным оператором, но входит в состав многих операторов, работающих с точечными объектами. Например, в операторе Create Point предложение определяет стиль символа для нового объекта. Если предложение Symbol в этом операторе опущено, то будет использован текущий стиль символа, установленный в среде MapInfo.

Некоторые операторы MapBasic (такие как Alter Object...Info OBJ_INFO_SYMBOL) используют выражение типа Symbol как параметр без ключевого слова Symbol.

Справочник MapBasic

605

Предложение Symbol

Стандартный набор символов MapInfo 3.0

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

Стандартный набор символов состоит из символов, имеющих код от 31 до 67, однако пользователь может изменять и дополнять этот набор, используя приложение SYMBOL, программу, написанную на MapBasic и поставляемую в стандартном пакете MapInfo.

Символы шрифта TrueType

Если Вы задаете символ из шрифта TrueType, то параметр fontstyle управляет написанием символа:

Значение fontstyle

Написание

0

Нормальное

1

Жирное

16

Черная кайма

32

Оттененное

256

Белая кайма

Для задания двух или более стилей написания коды складываются. Например, для того, чтобы получить символ жирного и оттененного написания, параметр fontstyle должен быть равен 33. Написание 16 и 256 взаимоисключают друг друга.

606

Справочник MapBasic

Предложение Symbol

Растровый символ

Если Вы задаете новый символ, то параметр customstyle управляет, какими будут цвет и фон символа:

Значение customstyle

Стиль символа

0

Не действуют режимы из группы “Эффекты” диалога “Стиль символа”,

 

и символ появляется таким, какой он есть. Все белые пикселы растра

 

прозрачны.

1

Действует режим “Добавить фон”; все белые пикселы растра

 

непрозрачны.

2

Действует режим “Покрасить одним цветом”; все не белые точки растра

 

закрашены одним цветом.

3

Установлены оба флажка (действуют оба режима).

Пример:

Оператор Set Map может использовать предложение Symbol. В примере назначается стиль символов для показа точечных объектов первого слоя карты в виде кружочков (символ номер 34), закрашенных красным и размером в 18 пунктов.

Include ”mapbasic.def”

Set Map

Layer 1 Display Global

Global Symbol MakeSymbol(34,RED,18)

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

MakeFontSymbol( ), MakeCustomSymbol( ), MakeSymbol( ), StyleAttr( )

Справочник MapBasic

607

Функция SystemInfo( )

Функция SystemInfo( )

Назначение:

Возвращает информацию об активной операционной среде и версии программы MapInfo.

Синтаксис:

SystemInfo(attribute)

где

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

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

Тип результата зависит от значения параметра attribute. Величина типа SmallInt, Logical или String

Описание:

Функция SystemInfo( ) возвращает информацию об оперативной среде и версии программы MapInfo, в которых Вы сейчас работаете. Вид информации задает параметр attribute. В файле стандартных определений MapBasic MAPBASIC.DEF определены имена кодов, которые Вы можете использовать в качестве параметра функции SystemInfo( ). Для использования имен кодов Ваша программа должна иметь в начале оператор Include "MAPBASIC.DEF".

Значения attribute

Результат, полученный SystemInfo( )

SYS_INFO_APPLICATIONWND

Целое число, уникальный номер Windows HWND,

 

установленный оператором Set Application Window (или

 

ноль, если HWND не устанавливался).

SYS_INFO_APPVERSION

SYS_INFO_CHARSET SYS_INFO_COPYPROTECTED

SYS_INFO_DATE_FORMAT

SYS_INFO_DDESTATUS

SYS_INFO_DIG_INSTALLED

Целое число, соответствующее версии языка MapBasic, на котором было написана Ваша программа, и компилятора, умноженное на 100. Например, если версия 3.0, то функция вернет 300.

Возвращает имя используемой системы кодов.

Логическая величина: “Да” (TRUE), если пользователь запустил защищенную от копирования версию MapInfo.

Строка: “US” или “Local”, соответствующие способу форматирования даты. Смотрите описание оператора Set Format.

Целочисленная величина, количество элементов в DDEочереди на выполнение. Если очередь пуста, то SystemInfo( ) вернет ноль (если приходящие команды будут выстраиваться в очередь) или -1 (если приходящие команды будут немедленно выполняться).

Логическая величина: “Да” (TRUE), если дигитайзер и совместимый драйвер установлен.

608

Справочник MapBasic

 

Функция SystemInfo( )

 

 

SYS_INFO_DIG_MODE

Логическая величина: “Да” (TRUE), если включен режим

 

оцифровки.

SYS_INFO_MAPINFOWND

Целое число, представляющее номер Windows HWND

 

главного окна MapInfo. Функция возвращает 0, если

 

программа выполняется не в Windows.

SYS_INFO_MDICLIENTWND

SYS_INFO_MIPLATFORM

Целое число, представляющее номер Windows HWND для окна MapInfo MDICLIENT. Функция возвращает 0, если программа выполняется не в Windows.

Целое число, тип программы MapInfo: MIPLATFORM_WIN16 (16–битная версия Windows) MIPLATFORM_WIN32 (32–битная версия Windows)

SYS_INFO_MIVERSION

SYS_INFO_NUMBER_FORMAT

SYS_INFO_PLATFORM

SYS_INFO_PRODUCTLEVEL

SYS_INFO_RUNTIME

Целое число, соответствующее версии программы MapInfo, в которой Вы сейчас работаете, умноженное на 100 (сто). Например, если версия 3.00, то функция вернет 300.

Строка: “9,999.9” или “Local”, соответствующие способу форматирования чисел. Смотрите оператор Set Format.

Целочисленный код, определяющий операционную систему. Возвращенное число может быть одним из следующих кодов:

PLATFORM_WIN,

PLATFORM_MAC,

PLATFORM_MOTIF.

Целое число, отражающее уровень (product level) MapInfo (200 для MapInfo Professional).

Возвращает логическое "да" (TRUE) если работает runt- ime-версия MapInfo, и логическое "нет" (FALSE), если иначе.

Ошибки:

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

Пример:

В зависимости от того, в какой операционной среде выполняется программа (в Windows или нет), будет запущена или нет процедура, использующая DDE-связь.

Include "MAPBASIC.DEF"

Declare Sub DDE_Setup

If SystemInfo(SYS_INFO_PLATFORM) = PLATFORM_WIN Then

Call DDE_Setup

End If

Справочник MapBasic

609

Функция TableInfo( )

Функция TableInfo( )

Назначение:

Возвращает информацию об открытой таблице.

Синтаксис:

TableInfo(table_id, attribute)

где

table_id – либо целочисленный номер таблицы, либо имя таблицы в кавычках, либо 0; attribute – целочисленный код, определяющий тему запроса.

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

Строка, логическое значение, целое или короткое целое число. Величина типа String, Integer, SmallInt или Logical, в зависимости от значения параметра attribute.

Описание:

Функция TableInfo( ) используется для получения определенной информации об открытой таблице.

Первый параметр функции определяет, из какой таблицы была затребована информация. Параметр table_id может быть строкой с именем открытой таблицы или числом, равным ее номеру. Если значение параметра table_id равно 0, то функция будет опрашивать таблицу, которая была открыта или создана самой последней. Вы можете использовать функцию с нулевым первым параметром сразу после оператора Open Table, в котором предложение As не использовалось. Если в момент вызова функции TableInfo( ) не было открыто ни одной таблицы или все таблицы уже закрыты, то результатом функции будет ошибка.

Второй параметр attribute определяет вид информации о данной таблице MapInfo, которая будет получена. Параметр attribute должен быть целочисленным кодом (например, TAB_INFO_NAME). В следующей таблице в первой колонке приводятся имена используемых кодов, которые установлены при помощи оператора Define в файле стандартных определений MapBasic MAPBASIC.DEF.

Значения attribute

TAB_INFO_COORDSYS_CLAUSE

TAB_INFO_COORDSYS_MINX, TAB_INFO_COORDSYS_MINY, TAB_INFO_COORDSYS_MAXX, TAB_INFO_COORDSYS_MAXY

Результат TableInfo( )

Строка с предложением CoordSys, сооответствующим проекции таблицы, например “CoordSys Earth Projection 1, 0”. Возвращается пустая стока, если таблица не может иметь графические объекта.

Вещественные величины, минимальная и максимальная координаты по оси X и Y, которые могут быть сохранены в таблице. Если таблица не может иметь объектов, результатом будет ноль.

610

Справочник MapBasic

Функция TableInfo( )

TAB_INFO_COORDSYS_NAME

TAB_INFO_EDITED

TAB_INFO_FASTEDIT

TAB_INFO_MAPPABLE

TAB_INFO_MAPPABLE_TABLE

TAB_INFO_MINX,

TAB_INFO_MINY,

TAB_INFO_MAXX,

TAB_INFO_MAXY

TAB_INFO_NAME

TAB_INFO_NCOLS

TAB_INFO_NROWS

TAB_INFO_NUM

TAB_INFO_READONLY

TAB_INFO_SEAMLESS

TAB_INFO_TABFILE

TAB_INFO_TEMP

Справочник MapBasic

Строка с именем проекции, каким она названа в файле MAPINFOW.PRJ (но без суффикса “\p...”). Результатом будет пустая строка, если таблица не может иметь графические объекты или нет соответствия в файле MAPINFOW.PRJ.

Логическая величина: "Да" (TRUE), если таблица имеет несохраненные на диске изменения.

Логическая величина: "Да" (TRUE), если для редактирования таблицы включен режим FastEdit, и "Нет" (FALSE), если выключен. (Смотрите описание оператора Set Table, режим FastEdit.)

Логическая величина: "Да" (TRUE), если записям таблицы можно сопоставлять графические объекты.

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

Вещественное число, минимальная и максимальная координаты по оси X и Y, координаты углов минимального прямоугольного покрытия всех обектов таблицы.

Строка, имя таблицы.

Целое число (тип SmallInt), количество колонок в таблице.

Целое число (тип Integer), количество строк в таблице.

Целое число (тип SmallInt), номер открытой таблицы.

Логическая величина: "Да" (TRUE), если таблица открыта в режиме "только чтение".

Логическая величина: "Да" (TRUE), если для таблицы включен атрибут сшитости.

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

Логическая величина: "Да" (TRUE), если таблица является временной (например, ЗАПРОС1).

611

Функция TableInfo( )

TAB_INFO_TYPE

TAB_INFO_UNDO

Целое число (тип SmallInt), код, определяющий вид таблицы:

TAB_TYPE_BASE, если таблица нормальная; TAB_TYPE_RESULT, если таблица запроса; TAB_TYPE_IMAGE, если таблица растровая; TAB_TYPE_VIEW, если таблица является представлением (view), например, таблица STREETINFO является представлением; TAB_TYPE_LINKED, если таблица связанная.

Логическая величина: "Да" (TRUE), если для редактирования таблицы включена система обратных действий (Undo), и "Нет" (FALSE), если система выключена оператором Set Table.

TAB_INFO_USERBROWSE

Логическая величина: "Нет" (FALSE), если оператором

 

Set Table выключен режим UserBrowse.

TAB_INFO_USERCLOSE

Логическая величина: "Нет" (FALSE), если оператором

 

Set Table выключен режим UserDisplayMap.

TAB_INFO_USERDISPLAYMAP

Логическая величина: "Нет" (FALSE), если оператором

 

Set Table выключен режим UserDisplayMap.

TAB_INFO_USEREDITABLE

Логическая величина: "Нет" (FALSE), если оператором

 

Set Table выключен режим UserEdit.

TAB_INFO_USERMAP

Логическая величина: "Нет" (FALSE), если оператором

 

Set Table выключен режим UserMap.

TAB_INFO_USERREMOVEMAP

Логическая величина: "Нет" (FALSE), если оператором

 

Set Table выключен режим UserRemoveMap.

Ошибки:

В результате выполнения функции могут генерироваться коды ошибок: ERR_FCN_ARG_RANGE, если неправильно значение аргумента; ERR_TABLE_NOT_FOUND, если неправильно задана таблица или ее нет.

Пример:

Include "mapbasic.def"

Dim i_numcols As SmallInt, L_mappable As Logical

Open Table "world"

i_numcols = TableInfo("world", TAB_INFO_NCOLS)

L_mappable = TableInfo("world", TAB_INFO_MAPPABLE)

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

Open Table, Set Table

612

Справочник MapBasic

Функция Tan( )

Функция Tan( )

Назначение:

Вычисляет тангенс.

Синтаксис:

Tan(num_expr)

где num_expr – численное выражение.

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

Вещественное число. Величина типа Float.

Описание:

Функция Tan( ) возвращает тангенс от числа, полученного в результате вычисления num_expr. Число num_expr является угловой величиной в радианах.

Для перевода градусов в радианы число необходимо умножить на DEG_2_RAD. Для обратного конвертирования используется коэффициент RAD_2_DEG. Чтобы Ваша программа могла использовать эти коэффициенты конвертирования, она должна содержать оператор Include "MAPBASIC.DEF".

Пример:

Include "mapbasic.def"

Dim x, y As Float

x = 45 * DEG_2_RAD y = Tan(x)

'y равно 1,

'так как тангенс от 45 градусов равен 1

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

Acos( ), Asin( ), Atn( ), Cos( ), Sin( )

Справочник MapBasic

613

Функция TempFileName$( )

Функция TempFileName$( )

Назначение:

Возвращает имя, которое можно использовать при создании временного файла.

Синтаксис:

TempFileName$(dir)

где

dir – строка с маршрутом (диск+каталог), где будет создан временный файл; пустая строка ("") задает системный каталог для создания временных файлов.

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

Строка. Величина типа String.

Описание:

Функция TempFileName$( ) используется, когда Вам необходимо создать временный файл, но Вы не знаете, какое имя ему дать.

Если Вы вызвали функцию TempFileName$( ), MapBasic вернет строку с полным уникальным именем файла. Сама функция TempFileName$( ) не создает временный файл. Создать файл Вы можете оператором Open File.

Если параметр dir задан пустой строкой (""), то полное имя файла будет включать в себя системный каталог для временных файлов, например, "G:\TEMP\~MAP0023.TMP".

При работе в сети возможна ситуация, когда два пользователя одновременно могут создать временный файл на одном и том же месте, с одинаковым именем. Если Вы пробуете создать файл с именем и на каталоге, которые Вы получили от функции TempFileName$( ), может возникнуть конфликтная ситуация, потому что файл уже существует, так как другой пользователь сети успел создать его после того, как Ваша программа вызвала функцию TempFileName$( ), и до оператора создания файла. Для снижения вероятности такой конфликтной ситуации выполняйте оператор Open File непосредственно сразу после вызова функции TempFileName$( ). Для снижения вероятности сетевых конфликтов создайте обработчик ошибок и поместите оператор OnError после оператора Open File.

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

FileExists( )

614

Справочник MapBasic

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