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

Оператор While...Wend

Оператор While...Wend

Назначение:

Циклически выполняет определенные действия, пока истинно определенное условие.

Синтаксис:

While condition statement_list

Wend

где

condition – выражение, управляющее выполнением цикла;

statement_list – группа операторов, выполняющаяся за один проход цикла.

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

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

Описание:

Оператор While... Wend является одной из конструкций цикла. MapBasic проверяет условие, заданное выражением condition. Если условие истинно, MapBasic выполняет операторы statement_list. Далее снова проверяется условие condition, и, если оно истинно, все повторяется. Цикл выполняется до тех пор, пока значение condition не станет ложным. После этого MapBasic пропустит операторы statement_list и передаст выполнение программы следующему после Wend оператору.

Заметим, что конструкция:

While condition statement_list

Wend

фактически идентична конструкции:

Do While condition statement_list

Loop

Цикл While... Wend может быть заменен одной из форм оператора Do... Loop. Использование в программе цикла While... Wend обуславливается стилистическими приверженностями каждого программиста.

Пример:

Dim psum As Float, i As Integer

Open Table "world"

Fetch First From world i = 1

While i <= 10

psum

=

psum + world.population

Fetch

Next From world

i = i

+

1

Wend

 

 

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

Do... Loop, For... Next

 

Справочник MapBasic

635

Процедура WinChangedHandler

Процедура WinChangedHandler

Назначение:

Процедура, автоматически выполняющаяся при перемещении или увеличении/уменьшении изображения в окне Карты, а также при добавлении или удалении слоя.

Синтаксис:

Declare Sub WinChangedHandler Sub WinChangedHandler statement_list

End Sub

где

statement_list – список операторов процедуры.

Описание:

WinChangedHandler – зарезервированное имя для процедуры MapBasic. Когда пользователь запускает программу, в которой есть такая процедура, программа не завершается после того, как выполнятся все операторы процедуры Main и других процедур, вызванных из нее. Программа будет пребывать в режиме ожидания до тех пор, пока не произойдет перемещение и масштабирование Карты в окне или изменение размеров самого окна Карты. После этого автоматически начнется выполнение процедуры с именем WinChangedHandler. После выполнения процедуры программа вновь переходит в режим ожидания. И так всякий раз до новых изменений на экране.

В процедуре WinChangedHandler может быть использована функция CommandInfo( ) для распознавания идентификатора окна, в котором произошло изменение. Для завершения программы в теле процедуры WinChangedHandler используется оператор End Program. При этом полностью освобождается память, занимаемая программой, и после следующего изменения в окне Карты процедура WinChangedHandler уже не будет вызываться.

Одновременно в состоянии ожидания могут находиться несколько прикладных программ. Поэтому при изменении в окне Карты, автоматически выполняются все процедуры Win ChangedHandler из этих программ, одна за другой.

В некоторых случаях MapBasic вызывают процедуру WinChangedHandler на события, не связанные с изменениями размера окна. Например, рисование нового объекта вызывает процедуру WinChangedHandler.

Чтобы закрыть обработчик и удаить его из памяти, применяйте оператор End Program.

Автопрокрутка в окне Карты

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

636

Справочник MapBasic

Процедура WinChangedHandler

Например, если Вы использовали инструмент Линейка и рисование каждого сегмента приводит к автопрокрутке, то MapInfo вызовет WinChangedHandler тогда, когда Вы закончите измерения двойным щелчком мышки или нажатием клавиши ESC. Если автопрокрутка произошла вследствие применения пользователем инструмента MapBasic, то MapInfo сначала вызовет обработчик инструмента, а затем процедуру WinChangedHandler.

MapInfo не будет вызывать процедуру WinChangedHandler, если пользователь вернет в предыдущее состояние изображение окна, в котором оно находилось перед автопрокруткой, или нажмет на клавишу ESC.

Автоматический сдвиг изображения Карты можно отключить с помощью оператора Set Win dow.

Пример:

Пример использования процедуры смотрите в тексте программы OVERVIEW, которая входит в стандартную поставку MapBasic.

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

CommandInfo( ), WinClosedHandler

Справочник MapBasic

637

Процедура WinClosedHandler

Процедура WinClosedHandler

Назначение:

Процедура автоматически выполняется при закрытии окна Карты, Списка, Графика, Отчета, Геогруппы или MapBasic.

Синтаксис:

Declare Sub WinClosedHandler Sub WinClosedHandler statement_list

End Sub

где

statement_list – список операторов процедуры.

Описание:

WinClosedHandler – зарезервированное имя для процедуры MapBasic. Когда пользователь запускает программу, в которой есть такая процедура, программа не завершается после того, как выполнятся все операторы процедуры Main и других процедур, вызванных из нее. Программа будет находиться в режиме ожидания до тех пор, пока пользователь не закроет какое-нибудь окно. Как только это произойдет, программа активизируется, выполняя процедуру с именем WinClosedHandler. После выполнения процедуры программа вновь переходит в режим ожидания.

В процедуре WinChangedHandler может быть использована функция Command Info(CMD_INFO_WIN) для распознавания идентификатора окна, в котором произошло изменение. Для завершения программы в теле процедуры WinChangedHandler используется оператор End Program. При этом полностью освобождается память, занимаемая прикладной программой, и после следующего изменения в окне Карты процедура WinChangedHandler уже не будет вызываться.

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

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

CommandInfo( ), EndHandler, RemoteMsgHandler, SelChangedHandler, ToolHandler, Win

ChangedHandler

638

Справочник MapBasic

Функция WindowID( )

Функция WindowID( )

Назначение:

Возвращает идентификатор окна, заданного его номером на экране.

Синтаксис:

WindowID(window_num)

где

window_num – величина типа SmallInt, номер окна.

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

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

Описание:

Функция WindowID( ) возвращает уникальный номер окна. Некоторые операторы MapBasic, такие, как Set Map, используют идентификатор в качестве параметра.

В следующей таблице приводятся возможные способы задания парметра window_num:

Значение window_num

Положительное целое число (величина типа Smallint), например, 1, 2, ... n

Результат

MapInfo возвращает идентификатор документального окна, такого, как Карта, Список. Например, если задана единица, то MapInfo возвращает идентификатор первого документального окна. Заметим, что значение n можно получить с помощью функции NumWindows( ).

Отрицательное целое число (величина типа Smallint), например, -1, -2, ... m

MapInfo возвращает идентификатор как документального окна, так и другого плавающего окна, такого как Информация. Заметим, что значение m можно получить с помощью функции NumAllWindows( ). Используя этот синтаксис, Вы можете вызывать функцию WindowID( ) в цикле для построения списка всех открытых окон.

Ноль (0)

MapInfo возвращает ID-номер окна либо последнего из

 

открытых документов, либо легенды, созданной

 

пользователем, либо инструментальной панели; или ноль,

 

если окна не открывались.

Код окна

Если Вы задали код от 1001 до 1013, то MapInfo вернет

(например, WIN_RULER)

идентификатор соответствующего специального окна. Имена

 

кодам назначены в файле стандартных определений MAPBA-

 

SIC.DEF. Например, код WIN_RULER, имеющий значение

 

1007, представляет окно Линейка.

Ошибки:

ERR_BAD_WINDOW_NUM, если неверно значение аргумента.

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

FrontWindow( ), NumWindows( )

Справочник MapBasic

639

Функция WindowInfo( )

Функция WindowInfo( )

Назначение:

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

Синтаксис:

WindowInfo(window_id, attribute)

где

window_id – целочисленный идентификатор окна; attribute – целое число, код необходимой информации.

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

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

Описание:

Функция WindowInfo( ) возвращает определенную информацию об открытом окне.

Параметр window_id задает идентификатор окна. Значения идентификатора можно получить, используя функции FrontWindow( ) и WindowID( ).

Многим кодам, используемых в параметрам, определены имена в файле MAPBASIC.DEF, которые Вы можете использовать в функции WindowInfo( ), если в начале программы есть строка Include "MAPBASIC.DEF".

В следующей таблице приводятся возможные способы задания парметра window_num:

Значение window_num

Целочисленный идентификатор

Положительное целое число (величина типа Smallint), например, 1, 2, ... n

Отрицательное целое число (величина типа Smallint), например, -1, -2, ... m

Ноль (0)

Описание

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

FrontWindow( ) или WindowID( ).

Функция возвращает информацию о документальном окне, таком, как Карта или Список. Например, если задана единица, то MapInfo возвращает информацию о первом документальном окне. Заметим, что значение n можно получить с помощью функции NumWindows( ).

Функция возвращает информацию как о документальном окне, так и о другом плавающем окне, таком, как Информация. Заметим, что значение m можно получить с помощью функции NumAllWindows( ). Используя этот синтаксис, Вы можете вызывать функцию WindowInfo( ) в цикле для построения списка информации обо всех открытых окнах.

Функция опрашивает последнее из открывавшихся окон. Если окна не открыты, порождается ошибка.

640

Справочник MapBasic

 

Функция WindowInfo( )

 

 

 

Код окна

Если Вы задали код от 1001 до 1013, то MapInfo вернет

(например, WIN_RULER)

информацию о соответствующем специальном окне. Имена

 

кодам назначены в файле стандартных определений MAP-

 

BASIC.DEF. Например, код WIN_RULER, имеющий

 

значение 1007, представляет окно Линейка.

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

Значение attribute

WIN_INFO_AUTOSCROLL

WIN_INFO_CLONEWINDOW

WIN_INFO_HEIGHT

WIN_INFO_LEGENDS_MAP

WIN_INFO_NAME

WIN_INFO_OPEN

WIN_INFO_STATE

WIN_INFO_SYSMENUCLOSE

WIN_INFO_TABLE

WIN_INFO_TOPMOST

Результат WindowInfo( attribute )

Логическая величина: “Да” (TRUE), если режим автоматического сдвига включен. Изменение этого режима делается оператором Set Window.

Строка с оператором MapBasic, который может быть использован в операторе Run Command для дублирования окна. Смотрите описание оператора Run Command.

Число типа Float, высота окна в "бумажных" единицах измерения, установленных оператором Set Paper Units.

Целое число: если вы составляете запрос об окне Легенды, открытом оператором Create Legend, то резутьтатом будет идентификатор соответствующего окна Карты или Графика. Если окно Легенды стандартно, то результатом будет 0.

Строка с именем окна.

Логическая величина, определяющая, открыто ли окно (используется для таких окон как "Статистика").

Короткое целое число (тип SmallInt): WIN_STATE_NORMAL, если окно раскрыто, но меньше окна MapInfo;

WIN_STATE_MINIMIZED, если окно свернуто в иконку; WIN_STATE_MAXIMIZED, если окно имеет максимальный размер.

Логическая величина: “Нет” (FALSE), если оператор Set Window нейтрализовал команду CLOSE из системного меню окна.

Строка с именем временной таблицы: "Cosmeticn", если определено окно Карты; "Layoutn", если определено окно Отчета;

где n – номер окна. Для окон Списка и Графика результатом будет имя таблицы, показанной в окне.

Логическая величина. Если окно активно, значение будет истинно (TRUE).

Справочник MapBasic

641

Функция WindowInfo( )

WIN_INFO_TYPE

WIN_INFO_WIDTH

WIN_INFO_WINDOWID

WIN_INFO_WND

WIN_INFO_WORKSPACE

WIN_INFO_X

WIN_INFO_Y

WIN_INFO_PRINTER_NAME

WIN_INFO_PRINTER_ORIENT

WIN_INFO_PRINTER_COPIES WIN_INFO_SNAPMODE

WIN_INFO_SNAPTHRESHOLD

WIN_INFO_PRINTER_PAPERSI ZE

WIN_INFO_PRINTER_LEFT_MA RGIN

WIN_INFO_PRINTER_RIGHT_ MARGIN

WIN_INFO_PRINTER_TOP_MA RGIN

Число типа SmallInt, определяющее тип окна (например, WIN_LAYOUT). Смотрите следующую таблицу.

Число типа Float, ширина окна в "бумажных" единицах измерения, установленных оператором Set Paper Units.

Целое число, идентификатор окна. Результат такой же, как у функции WindowID( ). Это можно использовать для передачи нуля как window_spec.

Целое число. В среде Windows представляет Windows HWND для опрашиваемого окна.

Строка с операторами MapBasic, с помощью которых запоминается Карта в Рабочем Наборе. Отличается от результата функции с кодом WIN_INFO_CLONEWINDOW тем, что результат включает в себя операторы Open Table и др.

Число типа Float, расстояние от левого края нашего окна до левого края рабочего поля MapInfo (в "бумажных" единицах).

Число типа Float, расстояние от верхнего края нашего окна до верхнего края рабочего поля MapInfo (в "бумажных" единицах).

Возвращает строку с идентификатором принтера (например, \\DISCOVERY\HP4_DEVEL)

Возвращает WIN_PRINTER_PORTRAIT или WIN_PRINTER_LANDSCAPE

Возвращает integer number of copies.

Возвращает a logical value. TRUE if snap mode is on. FALSE if snap mode is off. The value for WIN_INFO_SNAPMODE is 19.

Возвращает короткое целое, устойчивость в пикселах. Значение для WIN_INFO_SNAPTHRESHOLD это 20.

Целая величина. Смотрите в файле Papersize.def file объяснение значений возвращаемой величины.

Вещественное: левое поле области печати в текущих единицах длины.

Вещественное: правое поле области печати в текущих единицах длины.

Вещественное: верхнее поле области печати в текущих единицах длины

642

Справочник MapBasic

Функция WindowInfo( )

WIN_INFO_PRINTER_BOTTOM _MARGIN

WIN_INFO_PRINTER_BORDER

WIN_INFO_PRINTER_TRUECO LOR

WIN_INFO_PRINTER_DITHER

WIN_INFO_PRINTER_METHOD

WIN_INFO_PRINTER_TRANSPR ASTER

WIN_INFO_PRINTER_TRANSPV ECTOR

WIN_INFO_EXPORT_BORDER

WIN_INFO_EXPORT_TRUECOL OR

Вещественное: нижнее поле области печати в текущих единицах длины.

Строковая величина: ON если рамка вокруг окна изображается при печати, OFF если нет.

Строковая величина: ON если используется 24-битеый true color для печати растров и сеток(grid). Это бывает когда изображение 24 битное и принтер поддерживает более 256 йветов, OFF в противном случае.

Строковая величина: возвращает метод растеризации, который используется если надо конвертировать 24-битное изображение в 256 цветов. Возвращаемые значения HALFTONE и ERRORDIFFUSION. Эта настройка используется при печати растров и сеточных файлов (grid). Растеризация произойдет, если WIN_INFO_PRINTER_TRUECOLOR невозможно или если принтер поддерживает только 256 цветов или менее.

Строковая величина: возвращает значения DEVICE и EMF.

Строковая величина: возвращает значения DEVICE и INTERNAL.

Строковая величина: возвращает значения DEVICE и INTERNAL.

Строковая величина: возвращает значения ON и OFF

Строковая величина: возвращает значения ON и OFF.

WIN_INFO_EXPORT_DITHER

Строковая величина: возвращает значения HALFTONE и

 

ERRORDIFFUSION.

WIN_INFO_EXPORT_TRANSPR

Строковая величина: возвращает значения DEVICE и

ASTER

INTERNAL

Если Вы используете в качестве параметра attribute код WIN_INFO_TYPE, функция WindowInfo( ) вернет код вида окна. Имена для этого кода перечислены в первой колонке в следующей таблицы:

Код в результате

Описание окна

WIN_MAPPER

Окно Карты

WIN_BROWSER

Окно Списка

WIN_LAYOUT

Окно Отчета

WIN_GRAPH

Окно Графика

Справочник MapBasic

643

Функция WindowInfo( )

WIN_HELP

Окно Справочной системы

WIN_MAPBASIC

Окно MapBasic

WIN_MESSAGE

Окно "Сообщение" (вызывается оператором Print).

WIN_RULER

Окно "Линейка" (вызывается инструментом Линейка)

WIN_INFO

Окно "Информация" (вызывается инструментом Информация)

WIN_LEGEND

Окно "Легенда"

WIN_STATISTICS

Окно "Статистика"

WIN_MAPINFO

Рабочее окно программы MapInfo

WIN_BUTTONPAD

Окно инструментальной панели

Каждое окно Карты создает специальную временную таблицу, которая содержит данные для Косметического слоя Карты. Эти таблицы (имеющие имена "Cosmetic1", "Cosmetic2" и т.д.) пользователь не видит.

Аналогично, окна Отчетов также поддерживают временные скрытые от пользователя таблицы с именами вида "Layout1", "Layout2" и т.д. Вы можете получить эти имена от функции

WindowInfo( ) используя код WIN_INFO_TABLE.

Ошибки:

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

Пример:

В следующем примере открывается окно Статистика, если оно уже не открыто.

If Not WindowInfo(WIN_STATISTICS,WIN_INFO_OPEN) Then

Open Window WIN_STATISTICS

End If

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

Map, Browse, Graph

644

Справочник MapBasic

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