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

Оператор Dialog Preserve

Оператор Dialog Preserve

Назначение:

Открывает диалог снова после нажатия клавиш типа "OK" или "Отмена".

Синтаксис:

Dialog Preserve

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

Этот оператор может быть использован только в процедуре обработчика кнопок типа OKButton и CancelButton.

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

Описание:

Оператор Dialog Preserve позволяет приостановить закрытие диалога, созданного в программе оператором Dialog, нажатием на кнопки типа OkButton или CancelButton.

Оператор Dialog Preserve позволяет Вам подтверждать закрытие диалога. Например, пользователь нажимает на кнопку "ОК" (элемент диалога OkButton). Обработчик кнопки вызывает диалог, спрашивающий: "Вы хотите заменить старые значения колонки на новые?" (функция Ask( )). Если пользователь выберет кнопку "Нет", обработчик выполнит оператор Dialog Preserve и вернет выполнение в первоначальный диалог.

Пример:

Следующий отрывок может быть процедуройLобработчиком кнопки CancelButton.

Sub confirm_cancel

If Ask(”Изменения будут утеряны. Продолжить?”, ”Да”, ”Нет”) = FALSE Then

Dialog Preserve

End If

End Sub

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

Alter Control, Dialog, Dialog Remove, ReadControlValue( )

Справочник MapBasic

193

Оператор Dialog Remove

Оператор Dialog Remove

Назначение:

Закрывает диалог, созданный оператором Dialog.

Синтаксис:

Dialog Remove

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

Оператор работает только в процедуре обработчика элемента диалога.

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

Описание:

Оператор Dialog Remove закрывает диалог, построенный с помощью оператора Dialog.

Автоматически диалоговое окно закрывается по нажатию на кнопки OkButton или CancelButton. Оператор Dialog Remove позволяет выйти из диалога до выбора этих кнопок. Это полезно, например, если диалоговое окно имеет списковый элемент диалога ListBox. Указав дважды на элемент списка, Вы можете закрыть диалог.

Пример:

Эта процедура – часть программы NVIEWS.MB. Она выполняет роль обработчика спискового элемента (ListBox) диалога "Именованные Виды". Если пользователь указывает в список, используя одно нажатие на клавишу мышки, обработчик оставляет возможность закрыть диалог при помощи кнопок. Если пользователь указывает в список, используя двойное нажатие на клавишу мышки, обработчик использует оператор Dialog Remove для закрытия диалогового окна. Заметим, что MapL Info вызывает этот обработчик и тогда, когда клавиша мышки нажимается один раз, и тогда, когда пользователь использует двойное нажатие.

Sub listbox_handler Dim i As SmallInt Alter Control 2 Enable Alter Control 3 Enable

If CommandInfo(CMD_INFO_DLG_DBL) = TRUE Then

’ ... когда в списке было использовано ' двойное указание.

i = ReadControlValue(1) Dialog Remove

Call go_to_view(i) End If

End Sub

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

Alter Control, Dialog, Dialog Preserve, ReadControlValue( )

194

Справочник MapBasic

Оператор Dim

Оператор Dim

Назначение:

Объявляет тип одной или более переменных.

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

Если оператор Dim используется в окне MapBasic, то один оператор Dim может объявить тип только одной переменной. В окне MapBasic нельзя объявить массив переменных.

Синтаксис:

Dim var_name [, var_name ... ] As var_type [, var_name [, var_name ... ] As var_type ... ] где

var_name – имя объявляемой переменной; var_type – тип для переменной.

Описание:

Оператор Dim объявляет имя и тип локальной переменной перед употреблением их в процедуре.

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

Значение var_type

Описание

SmallInt

Короткое целое число от L32767 до 32767 включительно;

 

используется два байта.

Integer

Целое число от L2147483647 до +2147483647 включительно;

 

используется четыре байта.

Float

Число с плавающей запятой; занимает восемь байт в формате IEEE.

String

Символьная строка не более 32767 байт.

String * length

Символьная строка фиксированной длины (здесь length задает длину

 

строки до 32767 байт). Заранее предполагается, что это строки

 

пробелов.

Logical

TRUE или FALSE, 1 или 0; используется два байта.

Date

Дата в формате MM/DD/YYYY, используется четыре байта: два

 

байта – год, один байт – месяц, один байт – день.

Object

Графический объект (Точечный, Регион, Линия, Полилиния, Дуга,

 

Прямоугольник, Сглаженный Прямоугольник, Эллипс, Текстовый

 

или Рамка).

Alias

Имя колонки.

Pen

Установка стиля линии.

Brush

Установка стиля штриха.

Font

Установка стиля шрифта.

Symbol

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

Справочник MapBasic

195

Оператор Dim

Место для оператора Dim и область использования переменных в программе

Каждая локальная переменная должна быть объявлена в процедуре или функции перед тем, как на неё ссылаться (то есть внутри конструкций Sub...End Sub и Function...End Function). Другими словами, оператор Dim должен предшествовать тем операторам, в которых эти переменные используются. Обычно операторы Dim для всех переменных, используемых в процедуре, располагаются в первых строках процедуры или функции.

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

Для объявления глобальных переменных используется оператор Global. Значение глобальной переменной доступно всем процедурам и функциям всех модулей проекта.

Объявление нескольких переменных в одном операторе

Один оператор Dim позволяет объявлять сразу несколько переменных одного типа. Напишите их имена через запятую:

Dim i_counter, i_min, i_max As Integer

Dim s_name As String

Можно также в одном операторе объединить объявление нескольких переменных разного типа. Например:

Dim i_counter, i_min, i_max As Integer, s_name As String

Массивы переменных

MapBasic поддерживает одномерные массивы переменных. Если в операторе Dim после имени var_name стоит пара скобок, то это имя понимается как имя массива. При объявлении типа массива переменных Вы можете также задать размерность массива. Например, следующему массиву вещественных переменных задана размерность десять:

Dim f_stats(10) As Float f_stats(1) = 17.23

Число в скобках во второй строке примера является индексом массива, и задает порядковый номер элемента массива.

Изменить размерность массива в ходе программы можно оператором ReDim. Для определения текущей размерности массива используется функция UBound( ). Если оператор Dim объявляет массив с пустыми скобками, то массиву присваивается нулевая размерность. При этом массив не занимает в памяти места. Для его использования в нужный момент Вы всегда можете задать ему новую размерность оператором ReDim.

В 16Lбитной версии Windows массив MapBasic может содержать не более 7000 элементов. В MacinL tosh и 32Lбитной версии Windows – не более 32767 элементов.

Строковые переменные

Длина строковой переменной не должна превышать 32 К. Однако символьная строка, участвующая в операции присваивания (как в следующем примере), не должна превышать 256 символов.

Dim status As String

status = "Это строковая константа... "

196

Справочник MapBasic

Оператор Dim

При выполнении оператора Dim MapBasic, подобно другим BASICLязыкам, автоматически заполняет строковые переменные фиксированной длины пробелами. Другими словами, когда Вы объявляете строковую переменную в 10 байт, а в нее помещаете пятисимвольную строку, то оставшиеся пять позиций будут заполнены пробелами. (Это может быть полезно при формирования таблицы из строк текста.) Строковые переменные свободной длины при объявлении ничем не заполняются, вернее, значение переменной типа String сразу после выполнения оператора объявления равно пустому значению.

В следующем фрагменте оператор If... Then определяет равенство на самом деле неравных строк:

Dim

s_var_len

As

String

 

Dim

s_fixed_len

As

String

* 10

s_var_len = "тест"

 

 

s_fixed_len = "тест"

 

 

If s_var_len =

s_fixed_len

Then

 

Note "строки

равны"

'

этого никогда не случится

Else

 

 

 

Note "строки

не равны"

'

это случится обязательно

End If

 

 

 

Ограничения при выборе имени для переменной

В именах переменных большие и маленькие буквы не различаются. Так, если оператор Dim объявил переменную abc, то в дальнейшем к ней можно обращаться и abc, и ABC, и Abc.

Имя переменной может состоять не более чем из 31 символа, которыми могут быть буквы латинского алфавита, цифры и знак подчеркивания. Имена переменных могут также использовать следующие знаки пунктуации: $, %, &, !, # и @ , но только в конце имени. Например, именем переменной может быть LastName$, но не Last$Name. Имя переменной также не может начинаться с цифры.

Для имен переменных Вы также не можете использовать слова, которые использует язык MapBasic как ключевые, например, такие как Open, Close, Set и Do. Если Вы объявили переменную под именем “Set”, то при компиляции MapBasic сгенерирует ошибку. В следующей таблице приведены слова, которые не должны использоваться в качестве имен переменных.

Add

Drop

Insert

Rename

Alter

Else

Layout

Resume

Browse

ElseIf

Map

Rollback

Call

End

Menu

Run

Close

Error

Note

Save

Commit

Event

Objects

Seek

Create

Exit

OnError

Select

DDE

Export

Open

Set

DDEExecute

Fetch

Pack

Shade

DDEPoke

For

Print

StatusBar

Справочник MapBasic

197

Оператор Dim

DDETerminate

Function

PrintWin

Stop

DDETerminateAll

Get

ProgressBar

Sub

Declare

Global

Put

Type

Delete

Goto

ReDim

Update

Dialog

Graph

Register

While

Dim

If

Reload

 

Do

Import

Remove

 

В некоторых BASICLязыках тип переменной диктует написание ее имени. Например, если переменная имеет имя со знаком доллара в конце (LastName$), то она понимается как строковая. В языке MapBasic это не работает, тип переменной надо объявлять явно.

Начальные значения переменных

При объявлении численных переменных MapBasic присваивает им начальное значение 0 (ноль). Строковые переменные неопределенной длины имеют начальное значение пустая строка (""). Строковые переменные фиксированной длины заполняются пробелами.

Объектным переменным и переменным типа Pen, Brush, Font и Symbol при объявлении не присваивается начальных значений. Перед использованием этих переменных Вы должны их инициализировать.

Пример:

' Создадим сложный тип данных Person,

'используя оператор Type Type Person

Name As String Age As Integer Phone As String

End Type

'Следующий оператор Dim объявляет переменную типа Person Dim customer As Person

'Этот оператор Dim объявляет массив переменных типа Person : Dim users(10) As Person

'Этот оператор Dim объявляет целочисленную переменную "counter"

'массив целочисленных переменных "counters" :

Dim counter, counters(10) As Integer

'Этот оператор присваивает элементу "Name" первого значения

'массива "users" следующее значение :

users(1).Name = "Поликарп"

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

Global, ReDim, Type, UBound( )

198

Справочник MapBasic

Функция Distance( )

Функция Distance( )

Назначение:

Возвращает расстояние между двумя точками.

Синтаксис:

Distance(x1, y1, x2, y2, unit_name)

где

x1 и x2 – XLкоординаты (или широты);

y1 и y2 – YLкоординаты (или долготы);

unit_name – строка, задающая имя единицы измерения (например, "km")

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

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

Описание:

Функция Distance( ) вычисляет расстояние между двумя определенными точками и возвращает значение в указанных единицах. Список всех возможных имен единиц измерения приведен в описании оператора Set Distance Units.

Координаты X и Y понимаются MapBasic относительно заданной системы координат. Если система координат не объявлялась, то используется система широта/долгота. Объявить систему координат можно оператором Set CoordSys.

Если текущей системой координат является система координат Земли, то функция Distance( ) возвращает расстояние между двумя точками по дуге большого земного сечения (большой окружности, полученной в результате сечения земного шара плоскостью, заданной этими двумя точками и центром Земного шара). Если текущая система координат – система координат для непроецированных карт (планов), функция Distance( ) возвращает расстояние в Декартовых координатах.

Пример:

Dim dist, start_x, start_y, end_x, end_y As Float Open Table "cities"

Fetch First From cities

start_x = CentroidX(cities.obj) start_y = CentroidY(cities.obj) Fetch Next From cities

end_x = CentroidX(cities.obj) end_y = CentroidY(cities.obj)

dist = Distance(start_x,start_y,end_x,end_y,"mi")

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

Area( ), ObjectLen( ), Set CoordSys, Set Distance Units

Справочник MapBasic

199

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