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

Оператор Save Workspace

Оператор Save Workspace

Назначение:

Создает файл Рабочего Набора с текущим состоянием рабочего окна MapInfo.

Синтаксис:

Save Workspace As filespec

где

filespec – строка с именем Рабочего Набора.

Описание:

Оператор Save Workspace создает Рабочий Набор по текущему состоянию программы MapInfo. Действие оператора аналогично действию команды ФАЙЛ > СОХРАНИТЬ РАБОЧИЙ НАБОР, с тем исключением, что оператор не выводит диалог на экран.

Для загрузки существующего Рабочего Набора используйте оператор Run Application.

Пример:

Save Workspace As ”market.wor”

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

Run Application

460

Справочник MapBasic

Функция SearchInfo( )

Функция SearchInfo( )

Назначение:

Возвращает информацию о результатах поиска, сделанного функцией SearchPoint( ) или

SearchRect( ).

Синтаксис:

SearchInfo(sequence_number, attribute )

где

sequence_number – целое число от 1 до количества найденных объектов; attribute – короткое целое число, код результата функции.

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

Строка или целое число. Тип зависит от значения параметра attribute.

Описание:

После вызова функции SearchPoint( ) или SearchRect( ), осуществляющих поиск объектов на Карте, функция SearchInfo( ) обрабатывает результаты поиска.

Параметр sequence_number должен принимать значения от 1 и более. Максимальное значение для этого параметра равняется результату функции SearchPoint( ) или SearchRect( ).

Параметр attribute должен принимать значение одного из кодов, имена для которых заданы в файле стандартных определений MAPBASIC.DEF:

Значение attribute

Результат:

SEARCH_INFO_TABLE

Строка, величина типа String: имя таблицы, содержащей этот

 

объект. Если объект пренадлежит Косметическому слою, то строка

 

будет равна “CosmeticN” (где N – число от 1 и более).

SEARCH_INFO_ROW

Целое число, величина типа Integer: номер записи. Этот номер Вы

 

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

 

оператора Select.

Использовать имена кодов в программе Вы можете, включив в текст Вашей программы оператор Include "MAPBASIC.DEF".

Результаты поиска хранятся в памяти до тех пор, пока выполняется программа или до следующего поиска. Результаты поиска не будут удалены из памяти, если пользователь закроет окно или таблицу, в которых осуществлялся поиск; поэтому не надо затягивать с обработкой результатов поиска. Чтобы форсировать удаление результатов поиска из памяти, проведите поиск, который обязательно ничего не найдет (например, поиск по координатам 0, 0).

MapInfo поддерживает отдельные наборы значений для результатов поиска для каждой действующей MapBasic-программы, а также набор для результатов поиска самой программы MapInfo (для команд, введенных из окна MapBasic).

Справочник MapBasic

461

Функция SearchInfo( )

Ошибки:

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

Пример:

Следующая программа создает кнопки для двух инструментов. Если пользователь пользуется точечным инструментом, то программа вызывает функцию SearchPoint( ); если пользователь рисует рамки, то программа вызывает функцию SearchRect( ). В каждом случае программа использует функцию SearchInfo( ) для определения того, какие объекты попались пользователю.

Include ”mapbasic.def”

Include ”icons.def”

Declare Sub Main

Declare Sub tool_sub

Sub Main

Create ButtonPad ”Поиск” As

ToolButton Calling tool_sub ID 1

Icon MI_ICON_ARROW

Cursor MI_CURSOR_ARROW

DrawMode DM_CUSTOM_POINT

HelpMsg ”Укажите мышкой на Карту\nПоиск в точке”

Separator

ToolButton Calling tool_sub ID 2

Icon MI_ICON_SEARCH_RECT

Cursor MI_CURSOR_FINGER_LEFT

DrawMode DM_CUSTOM_RECT

HelpMsg ”Нарисуйте прямоугольник на Карте\nПоиск в рамке”

Width 3

Print ”Работает программа поиска.”

Print ”Выберите инструмент из панели Поиск”

Print ”и укажите на Карту.”

End Sub

Sub tool_sub

Эта процедура вызывается, если пользователь действует

одним из инструментов из панели Поиск.

Dim x, y, x2, y2 As Float,

i, i_found, i_row_id, i_win_id As Integer, s_table As Alias

 

i_win_id = FrontWindow()

 

If WindowInfo(i_win_id, WIN_INFO_TYPE) <> WIN_MAPPER Then

 

Note ”Этот инструмент работает только в окне Карты.”

 

Exit Sub

 

End If

462

Справочник MapBasic

Функция SearchInfo( )

’ Определяем начальную точку действия инструмента. x = CommandInfo(CMD_INFO_X)

y = CommandInfo(CMD_INFO_Y)

If CommandInfo(CMD_INFO_TOOLBTN) = 1 Then

случай, когда действует точечный инструмент.

определяем, сколько объектов содержат данную точку. i_found = SearchPoint(i_win_id, x, y)

Else

случай, когда действует инструмент, рисующий рамку.

определяем, сколько объектов содержатся в рамке. x2 = CommandInfo(CMD_INFO_X2)

y2 = CommandInfo(CMD_INFO_y2)

i_found = SearchRect(i_win_id, x, y, x2, y2)

End If

If i_found = 0 Then

Beep ’ Объектов в этом месте нет.

Else

Print Chr$(12)

If CommandInfo(CMD_INFO_TOOLBTN) = 2 Then

Print ”Прямоугольник: x1= ” + x + ”, y1= ” + y

Print ”x2= ” + x2 + ”, y2= ” + y2

Else

Print ”Точка: x=” + x + ”, y= ” + y

End If

’ Обработка результатов поиска. For i = 1 to i_found

Определяем имя таблицы, содержащей найденный объект. s_table = SearchInfo(i, SEARCH_INFO_TABLE)

Определяем номер записи, содержащей найденный объект. i_row_id = SearchInfo(i, SEARCH_INFO_ROW)

If Left$(s_table, 8) = ”Cosmetic” Then

Print ”Объект на Косметическом слое”

Else

’ извлекаем строку таблицы, содержащую объект.

Fetch rec i_row_id From s_table

s_table = s_table + ”.col1”

Print s_table

End If

Next

End If

End Sub

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

SearchPoint( ), SearchRect( )

Справочник MapBasic

463

Функция SearchPoint( )

Функция SearchPoint( )

Назначение:

Ищет объекты в заданной точке Карты.

Синтаксис:

SearchPoint(map_window_id, x, y )

где

map_window_id – идентификатор окна Карты; x – координата по оси X (например, долгота); y – координата по оси Y (например, широта).

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

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

Описание:

Функция SearchPoint( ) осуществляет поиск объектов в заданной точке Карты и возвращает количество найденых объектов. Поиск проводится по всем доступным слоям окна Карты, включая Косметический слой, если для него установлен режим доступности.

Функция не выбирает найденые объекты и не отменяет текущего выбора. Функция помещает список выбранных объектов в оперативную память. Для чтения этого списка используется функция SearchInfo( ), вызываемая после выполнения функции SearchPoint( ).

Поиск имеет небольшой допуск, аналогичный допуску при действии инструмента Информация. Точки и линейные объекты, расположенные слишком близко к месту указания мышкой, считаются “найдеными”, даже если координаты нажатия кнопки мышки не совпадают с точкой или ложатся непосредственно на линию.

Для того, чтобы пользователь мог осуществить выбор точки на карте при помощи мышки, можно использовать оператор Create ButtonPad или Alter ButtonPad для создания нового инструмента. Используйте код DM_CUSTOM_POINT как код рисования “точечным” инструментом. В обработчике инструмента используйте вызов функции CommandInfo( ) для определения координат точки, которую пользователь задал новым инструментом.

Пример:

Смотрите пример в описании функции SearchInfo( ).

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

SearchInfo( ), SearchRect( )

464

Справочник MapBasic

Функция SearchRect( )

Функция SearchRect( )

Назначение:

Ищет объекты на Карте в заданном прямоугольнике (рамке).

Синтаксис:

SearchRect(map_window_id, x1, y1, x2, y2 )

где

map_window_id – идентификатор окна Карты;

x1 и y1 – координаты, задающие один из углов прямоугольника;

x2 и y2 – координаты, задающие противоположный по диагонали угол прямоугольника.

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

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

Описание:

Функция SearchRect( ) осуществляет поиск объектов в заданном прямоугольнике в окне Карты и возвращает количество найденых объектов. Поиск осуществляется по всем доступным слоям окна Карты, включая Косметический слой, если для него установлен режим доступности.

Функция не выбирает найденные объекты и не отменяет текущего выбора. Функция помещает список выбранных объектов в оперативную память. Для чтения этого списка используется функция SearchInfo( ), вызываемая после выполнения функции SearchRect( ).

Механизм поиска работает аналогично механизму инструмента MapInfo Выбор-в-Рамке: если центроид объекта попадает в прямоугольник, то объект включается в список найденных.

Для того, чтобы пользователь мог задавать прямоугольник на Карте при помощи мышки, можно использовать оператор Create ButtonPad или Alter ButtonPad для создания нового инструмента. Используйте код DM_CUSTOM_RECT как код рисования “рамочным” инструментом. В обработчике инструмента используйте вызов функции CommandInfo( ) для определения координат прямоугольника, который пользователь задал новым инструментом.

Пример:

Смотрите пример в описании функции SearchInfo( ).

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

SearchInfo( ), SearchPoint( )

Справочник MapBasic

465

Функция Seek( )

Функция Seek( )

Назначение:

Возвращает текущую позицию в файле для операций ввода/вывода.

Синтаксис:

Seek(filenum)

где

filenum – номер открытого файла, целое число.

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

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

Описание:

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

Значение параметра file должно быть номером файла, под которым он был открыт оператором

Open File.

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

Ошибки:

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

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

Get, Open File, Put, Seek

466

Справочник MapBasic

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