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

Функция ButtonPadInfo( )

Функция ButtonPadInfo( )

Назначение:

Возвращает информацию о состоянии инструментальной панели

Синтаксис:

ButtonPadInfo(pad_name, attribute)

где

pad_name – строковая величина, представляющая имя инструментальной панели; например, “Операции”, “Пенал”, “Программы” или “Команды” для стандартных панелей или то имя, которое было определено при создании новых панелей.

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

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

Зависит от значения параметра attribute.

Описание:

В зависимости от значения attribute функция ButtonPadInfo(_) вернет следующую информацию об инструментальной панели pad_name:

Значения attribute

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

BTNPAD_INFO_

Логическая величина (Logical). Возвращается значение TRUE, если

FLOATING

панель плавающая, и значение FALSE, если панель находится в

 

прикрепленном состоянии, то есть вытянута вдоль верхнего края

 

рабочего окна.

BTNPAD_INFO_NBTNS

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

BTNPAD_INFO_WIDTH

Целое число типа SmallInt, ширина панели, причем единица

 

измерения равна одной кнопке (не включая разделитель).

BTNPAD_INFO_WINID

Целое число типа Integer, идентификатор панели.

BTNPAD_INFO_X

XLкоордината верхнего левого угла инструментальной панели. Если

 

панель находится в прикрепленном состоянии, то возвращается

 

целое число от 0 и более, если панель плавающая, то число типа

 

Float (при этом значение представляется в "бумажных" единицах).

BTNPAD_INFO_Y

YLкоордината верхнего левого угла инструментальной панели.

 

Смотрите описание предыдущего кода.

Вы можете использовать приведенные имена кодов, если в тексте Вашей программы есть ссылка на файл стандартных определений MAPBASIC.DEF.

Пример:

Include ”mapbasic.def”

If ButtonPadInfo(”Операции”, BTNPAD_INFO_FLOATING) Then ’...если панель Операции плавающая,

'то следующий оператор прикрепит ее.

Alter ButtonPad ”Операции” ToolbarPosition(0,0) Fixed End If

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

Alter ButtonPad

54

Справочник MapBasic

Оператор Call

Оператор Call

Назначение:

Вызывает subLпроцедуру или внешнюю процедуру (DLL, XCMD или RPC).

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

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

Синтаксис:

Call subproc [ ( [ parameter ] [, ... ] ) ]

где

subproc – имя подпрограммы;

parameter – параметр, передающий подпрограмме значение из основного модуля.

Описание:

Оператор Call используется для вызова подпрограммы. Подпрограммой может быть процедура, написанная на MapBasic, первым оператором которой является оператор Sub. Так же с помощью оператора Call в Windows может быть вызвана процедура из динамической библиотеки (DLL).

Аналогично, прикладная программа в MapInfo для Macintosh может вызывать внешние XCMDL команды. Смотрите описание оператора Declare Sub для подробной информации о внешних процедурах.

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

Программа MapBasic должна в главной процедуре содержать оператор Declare Sub, объявляющий имя процедуры и список ее параметров перед ее вызовом. Это требование должно выполняться как по отношению к процедурам, организованным оператором Sub, так и к внешним процедурам (DLL и XCMD).

Передача значений параметров

Подпрограмма может не иметь параметров, тогда вызов такой процедуры может выглядеть так:

Call subroutine

или

Call subroutine(_)

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

Объявление величины параметра как значения осуществляется при помощи ключевого слова ByVal перед именем параметра в списке операторов Sub и Declare Sub. Если один из параметров

Справочник MapBasic

55

Оператор Call

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

SubLпроцедуры могут пересылать как простые параметры, так и массивы переменных. При этом в списке вызова Вы пишете только имя массива без скобок.

Вызов внешних процедур

Если оператор Call вызвал процедуру DLL, то MapBasic выполняет процедуру до тех пор, пока она не вернет управление. Сама процедура находится в отдельном файле (например, "KERNEL.EXE"). Этот файл с внешней процедурой должен быть доступен в то время, как MapBasic выполняет внешний вызов.

Аналогично, если оператор Call вызывает XCMD, то файл, содержащий XCMD, должен быть доступным.

В вызове XCMDLкоманд не могут участвовать массивы переменных и переменные сложных типов, составленных оператором Type, в качестве параметров.

Пример:

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

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

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 Program

 

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

'Параметр "original"_– число,

'параметр "cubed"_– результат вычисления.

cubed = original ^ 3 End Sub

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

Declare Sub, Exit Sub, Global, Sub... End Sub

56

Справочник MapBasic

Функция CartesianArea( )

Функция•CartesianArea( )

Назначение:

Возвращает площадь, используя вычисления в системе координат Широта/Долгота. Используется декартовый алгоритм вычислений.

Синтаксис:

CartesianArea( expr, unit_name )

unit_name это строковая величина, имя единиц измерения площади. (sq km”)

Возвращаемое значение:

Величина с плавающей запятой

Описание:

Функция CartesianArea( ) возвращает площадь географического объекта, указанного выражением obj_expr.

Функция возвращает измеренную площадь, в единицах, определенных параметром unit_name; например, чтобы получить площадь в акрах, укажите ”acre” в качестве параметра unit_name. Смотрите описание оператора Set Area Units, где описаны возможные единицы измерения.

Функция CartesianArea() всегда будет возвращать значение площади, рассчитанное по декартовым алгоритмам. Величина L1 будет возвращаться для данных в плановых координатах, поскольку такие данные не могут быть конвертированы в Широту/Долготу. Возвращаются приближенные результаты в том случае, если используется скругленный прямоугольник. MapBasic рассчитывает площадь скругленного прямоугольника как если бы объект был настоящим прямоугольником.

Только полигоны, эллипсы, прямоугольники и скругленные прямоугольники имеют площади. По определению, значение функции CartesianArea( ) для точки, дуги, текста, линии или полилинии это ноль. Функция CartesianArea( ) возвращает приблизительные результаты, когда применяется к скругленным прямоугольникам. MapBasic вычисляет площадь скругленного прямоугольника как если бы объект был настоящим прямоугольником.

Примеры:

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

Dim f_sq_miles As Float

Open Table ”states”

Fetch First From states

f_sq_miles = CartesianArea(states.obj, ”sq mi”)

Вы можете также использовать функцию CartesianArea( ) внутри оператора SQL Select как показано в следующем примере.

Select lakes, CartesianArea(obj, ”sq km”)

From lakes Into results

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

Функция Area (), функция SphericalArea ()

Справочник MapBasic

57

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