Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MB6REFRU.pdf
Скачиваний:
10
Добавлен:
13.02.2015
Размер:
3.83 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

593

Процедура WinChangedHandler

Процедура WinChangedHandler

Назначение:

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

Синтаксис:

Declare Sub WinChangedHandler Sub WinChangedHandler statement_list

End Sub

где

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

Описание:

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

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

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

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

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

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

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

594

Справочник MapBasic

Процедура WinChangedHandler

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

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

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

Пример:

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

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

CommandInfo( ), WinClosedHandler

Справочник MapBasic

595

Процедура WinClosedHandler

Процедура WinClosedHandler

Назначение:

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

Синтаксис:

Declare Sub WinClosedHandler Sub WinClosedHandler statement_list

End Sub

где

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

Описание:

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

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

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

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

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

ChangedHandler

596

Справочник 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), например, L1, L2, ... m

Ноль (0)

Код окна

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

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

MapInfo возвращает IDLномер окна либо последнего из открытых документов, либо легенды, созданной пользователем, либо инструментальной панели; или ноль, если окна не открывались.

Если Вы задали код от 1001 до 1013, то MapInfo вернет идентификатор соответствующего специального окна. Имена кодам назначены в файле стандартных определений MAPBAL SIC.DEF. Например, код WIN_RULER, имеющий значение 1007, представляет окно Линейка.

Ошибки:

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

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

FrontWindow( ), NumWindows( )

Справочник MapBasic

597

Функция 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), например, L1, L2, ... m

Ноль (0)

Описание

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

FrontWindow( ) или WindowID( ).

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

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

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

598

Справочник MapBasic

 

Функция WindowInfo( )

 

 

 

Код окна

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

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

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

 

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

 

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

599

Функция 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 объяснение значений возвращаемой величины.

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

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

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

600

Справочник MapBasic

 

Функция WindowInfo( )

 

 

 

WIN_INFO_PRINTER_BOTTOM

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

_MARGIN

единицах длины.

WIN_INFO_PRINTER_BORDER

Строковая величина: ON если рамка вокруг окна

 

изображается при печати, OFF если нет.

WIN_INFO_PRINTER_TRUECO

Строковая величина: ON если используется 24Lбитеый true

LOR

color для печати растров и сеток(grid). Это бывает когда

 

изображение 24 битное и принтер поддерживает более 256

 

йветов, OFF в противном случае.

WIN_INFO_PRINTER_DITHER

Строковая величина: возвращает метод растеризации,

 

который используется если надо конвертировать 24Lбитное

 

изображение в 256 цветов. Возвращаемые значения HALFL

 

TONE и ERRORDIFFUSION. Эта настройка используется

 

при печати растров и сеточных файлов (grid). Растеризация

 

произойдет, если WIN_INFO_PRINTER_TRUECOLOR

 

невозможно или если принтер поддерживает только 256

 

цветов или менее.

WIN_INFO_PRINTER_METHOD

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

WIN_INFO_PRINTER_TRANSPR

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

ASTER

INTERNAL.

WIN_INFO_PRINTER_TRANSPV

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

ECTOR

INTERNAL.

WIN_INFO_EXPORT_BORDER

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

WIN_INFO_EXPORT_TRUECOL

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

OR

 

 

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

601

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

602

Справочник MapBasic

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