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

Оператор Define

Оператор Define

Назначение:

Назначает имя для постоянной величины.

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

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

Синтаксис:

Define identifier definition

где

identifier – имя, слово не более 31 символа длиной, начинающееся с буквы или символа подчеркивания (_);

definition – значение, которое MapBasic подставит вместо каждого identifier в тексте программы.

Описание:

Оператор Define определяет идентификатор identifier для постоянной величины. Перед компиляцией MapBasic сначала заменяет каждый идентификатор identifier на текст, который определен параметром definition. Примеры применения оператора Define Вы можете увидеть в файле MAPBA SIC.DEF.

Строчные и прописные символы в именах идентификаторов не различаются. То есть, если Вы с помощью оператора Define задали некоторой величине идентификатор FOO, то в тексте программы можно использовать и Foo, и foo.

В операторе Define нельзя применять для имен слова, используемые как ключевые, например, Set или Create. Список "запретных" слов приведен в описании оператора Dim.

Примеры:

Оператор Define делает Вашу программу более понятной, т. к. Вы можете задать осмысленные имена константам. Например, в программе используется число π(пи), которое примерно равно 3.141593. Вы можете присвоить этой константе имя Pi и использовать его в тексте программы. Для этого в начале программы напишите:

Define PI 3.141593

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

Define FILE_NAME "World.tab"

Следующий оператор входит в состав файла стандартных определений MAPBASIC.DEF. Выполнение этого определения приводит к открытию пустого окна "Сообщение":

Define CLS Print Chr$(12)

200

Справочник MapBasic

Функция DeformatNumber$( )

Функция DeformatNumber$( )

Назначение:

Очищает строку, представляющую число, от форматирующих символов.

Синтаксис:

DeformatNumber$(numeric_string)

где

numeric_string – строковая величина, представляющая число, такое как “12,345,678”

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

Строка. Величина типа String.

Описание:

Функция возвращает строку, представляющую число. При этом из исходного значения удаляются разделители тысяч, если они были в значении параметра numeric_string. Также заменяется знак отделения десятичной части на точку, если в строке numeric_string он не точка.

Примеры:

Функция Val( ), преобразующая строку в число, воспринимает разделители тысяч как просто текст. Потому для корректного перевода строкового представления числа в число требуется сначала применить функцию DeformatNumber$( ):

Dim s_number As String

Dim f_value As Float

s_number = ”1,222,333.4”

s_number = DeformatNumber$(s_number)

теперь переменная s_number имеет

значение: ”1222333.4”

f_value = Val(s_number)

Print f_value

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

FormatNumber$( ), Val( )

Справочник MapBasic

201

Оператор Delete

Оператор Delete

Назначение:

Удаляет один или более графических объектов. Или же удаляет одну или более строк из таблицы.

Синтаксис:

Delete [Object] From table [ Where Rowid = id_number ]

где

table – имя открытой таблицы;

id_number – номер строки, целое число от 1 и более.

Описание:

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

По умолчанию удаляются все строки таблицы. Если в операторе указано ключевое слово Object, то, удалив графические объекты, MapBasic не удалит записи, к которым эти объекты были присоединены.

Параметр id_number из предложения Where Rowid =... , задает номер строки, которая будет удалена из колонки. Если оператор Delete не содержит ключевого слова Object и в нем не задан номер удаляемой строки, то будут удалены все записи из таблицы.

Оператор Delete Object From отличается от оператора Drop Map. Первый действует только с объектами или записями и не влияет на структуру таблицы. Оператор Drop Map, напротив, изменяет структуру таблицы так, что из нее исключаются графические объекты.

Пример 1:

В этом примере оператор Delete удаляет все записи из таблицы CLIENTS.TAB. Сама таблица не удаляется, а становится пустой, похожей на ту таблицу, которая создается в MapInfo командой ФАЙЛ > НОВАЯ ТАБЛИЦА.

Open Table "clients.tab"

Delete From clients

Commit Table clients

Пример 2:

Оператор Delete удаляет только графический объект, присоединенный к десятой записи таблицы.

Open Table "clients.tab"

Delete Object From clients Where Rowid = 10

Commit Table clients

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

Drop Map, Insert

202

Справочник MapBasic

Оператор Dialog

Оператор Dialog

Назначение:

Создает новое диалоговое окно.

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

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

Синтаксис:

Dialog

[ Title title ]

[ Width w ] [ Height h ] [ Position x, y ] [ Calling handler ]

Control control_clause

[ Control control_clause ... ]

где

title – строковая величина, которая помещается в строку заголовка диалогового окна;

h – задает высоту диалогового окна в специальных единицах измерения высоты диалога (высота одного символа в диалоге равна 8 единицам);

w – задает ширину диалогового окна в специальных единицах измерения ширины диалога (ширина одного символа в диалоге равна 4 единицам);

x, y – координаты верхнего левого угла диалога в пикселах относительно верхнего левого угла рабочей области MapInfo's (по умолчанию диалог будет расположен в середине);

handler – имя процедуры, которая выполняется перед выводом диалога на экран; обычно в эти процедуры помещаются операторы Alter Control.

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

ButtonOKButtonCancelButton,

CheckBoxGroupBoxRadioGroup

EditTextStaticTextPopupMenu

PenPickerBrushPickerSymbolPicker

FontPicker ListBoxMultiListBox

Каждому типу предложения Control control_clause посвящен отдельный раздел этого настоящего

Справочника.

Описание:

Оператор Dialog создает диалоговое окно произвольного вида для организации диалога программы с пользователем.

Это так называемый модальный диалог; другими словами, пользователь должен закрыть диалог (например, нажав на кнопку "OK" или "Отмена") для того, чтобы продолжить работу с MapInfo.

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

Control OKButton.

Справочник MapBasic

203

Оператор Dialog

Оператор Dialog позволяет создавать Вам диалоговые окна произвольного вида. Если Вы хотите использовать стандартные диалоги в своей программе, используйте следующие операторы и функции: Ask( ), Note, ProgressBar, FileOpenDlg( ), FileSaveAsDlg( ).

Информацию об основных концепциях построения диалогового окна в MapBasic Вы можете найти в 6 главе Руководства пользователя MapBasic.

Размер и расположение элементов диалога

В операторе Dialog размер и расположение элемента диалога измеряются в долях шрифта диалога. Каждая единица измерения ширины в диалоге равна одной четвертой ширины символа (первая координата) и каждая единица измерения высоты в диалоге – одной восьмой высоты символа (вторая координата). Так, если элемент имеет ширину 40 и высоту 40, то это значит, что в элемент можно уместить слово в десять букв и список в пять строк.

Центром координат для определения места элементов диалога взят верхний левый угол окна диалога, он имеет координаты (0,0). Следующий пример определяет расположение в диалоге на пять букв правее и на две буквы ниже левого верхнего угла окна диалога:

Предложения Position, Height и Width не являются обязательными. Если Вы их опустили, то MapBasic разместит элементы по умолчанию в порядке следования соответствующих предложений Con trol в операторе.

Следует учитывать, что один и тот же диалог может в Macintosh показаться больше чем Windows, так как системный шрифт в системе Macintosh крупнее.

Закрытие диалога

Диалоговое окно, открытое MapBasic оператором Dialog, можно закрыть одним из четырех способов:

пользователь нажимает кнопку элемента OkButton (если этот элемент присутствует в диалоге);

пользователь нажимает кнопку элемента CancelButton (если этот элемент присутствует в диалоге);

пользователь отменяет диалог, используя системное меню диалогового окна или клавишу ESC;

пользователь указывает на элемент диалога, обработчик которого выполняет оператор Dia

log Remove.

Обычно для закрытия используются кнопки, создаваемые элементами OKButton или CancelButton. Но, используя обработчики для этих элементов, Вы можете перехватывать закрытие диалога. Например, после нажатия кнопки "ОК" появляется окно с вопросом: "Прежние значения записи будут утеряны. Вы хотите сохранить таблицу?". Если Вы нажали на кнопку с отрицательным ответом, Вы возвращаетесь в первый диалог.

Для достижения этого эффекта используется оператор Dialog Preserve. Оператор работает только в подпрограммах-обработчиках элементов OkButton и CancelButton.

Чтение введенных значений

После оператора Dialog с помощью функции CommandInfo( ) можно определить, как был закрыт диалог пользователем, кнопкой "OK" или "Отмена". Если пользователь нажал на кнопку "OK", то функция

CommandInfo(CMD_INFO_DLG_OK)

204

Справочник MapBasic

Оператор Dialog

вернет значение TRUE.

Для определения, какие значения ввел пользователь в окошки диалога, какие режимы выбрал, есть два способа: включить предложение Into в состав оператора Dialog или вызвать функцию ReadControlValue( ) из процедуры-обработчика.

Если используется предложение Into и диалог был закрыт кнопкой типа OKButton, MapInfo присвоит финальные значения из элементов диалога соответствующим переменным. Заметим, что MapInfo обновляет значения зарезервированных переменных, только когда пользователь закрыл диалог.

Прочитать значения из диалога, пока он не закрыт, можно только из процедуры-обработчика, вызвав функцию ReadControlValue( ).

Задание клавишных сокращений для элементов диалога

Если прикладная программа выполняется в среде MapInfo для Windows, то элементам диалога могут быть назначены клавишные сокращения, которые позволяют пользователю обращаться к элементам диалога с клавиатуры.

Символ для клавишного сокращения выбирается из заголовков и подписей элементов, которые задаются элементам в предложении Title. В тексте заголовка перед нужным символом надо поставить знак амперсанда (&). На экране этот символ подчеркивается. Например, следующая конструкция создает элемент диалога Button с клавишным сокращением ALT+В

Control Button

Title "&Восстановить"

Если Вы хотите вывести сам знак амперсанда в заголовок элемента, то используйте его два раза. Например, предложение:

Title "&Вернуть && обработать"

создаст следующую подпись элемента "Вернуть & обработать".

Если Вы задаете элемент StaticText сразу до или после элемента EditText, то определенное клавишное сокращение в тексте StaticText можно использовать для перехода в окошко элемента

EditText.

Если программу, создающую диалог с использованием клавишных сокращений, запустить в среде компьютера Macintosh, то сокращения будут проигнорированы.

Порядок элементов диалога для клавиши TAB

Для изменения фокуса в диалоге при помощи клавиатуры пользователь может использовать клавишу TAB. Фокус перемещается от элемента к элементу в том порядке, в котором соответствующие предложения Control следуют в операторе Dialog.

Пример 1:

Следующий оператор Dialog строит диалог с окошком для ввода текста пользователем.

Dialog

Title "Поиск строки"

Control StaticText

Title "Введите строку для поиска:"

Control EditText

Value gs_searchfor ' это строковая глобальная переменная

Справочник MapBasic

205

Оператор Dialog

Into gs_searchfor

Control OKButton

Control CancelButton

Title "Отмена"

If CommandInfo(CMD_INFO_DLG_OK) Then

'... если пользователь нажал на кнопку "OK",

'то переменной "gs_searchfor" присваивается текст,

'который ввел пользователь.

End If

Пример 2:

В следующем фрагменте Вы сможете найти применение элементов диалога всех типов.

Declare Sub resetsub

'

установка стандартных значений

Declare Sub oksub

'

подпрограмма, подтверждающая

 

'

нажатие кнопки OK.

Declare Sub Main

 

 

 

 

Sub Main

 

 

 

 

Dim maptitle As String

'

заголовок карты

Dim showlegend As Logical

'

TRUE означает показ легенды

Dim details As SmallInt

'

1

= полная детализация; 2 = частичная

Dim quarter As SmallInt

'

1

= за 1 ый квартал;... 4 = за 4 ый,

 

'

5

= за весь год

Dim mapscope As SmallInt

'

1

= карта города;2 = области;

 

'

3

= территории;

 

'

4

= региона;5 = карта всей страны

Dim storesymbol As Symbol

'

стиль символа для показа торговых точек

Dialog

 

 

 

 

Title "Карта торговых точек"

 

 

Width 210

 

 

 

 

Height 210

 

 

 

 

Control StaticText

 

 

 

 

Title "Заголовок карты:"

 

Position 5, 10

Control EditText

 

 

 

 

Value "Торговые точки"

 

Position 65, 8 Width 120

ID 1

 

 

 

 

Into maptitle

 

 

 

 

Control GroupBox

 

 

 

 

Title "Уровень детализации"

Position 5, 30

Height 40 Width 90

 

 

 

 

Control RadioGroup

 

 

 

 

Title "&Всё;В&ыборчно"

 

 

 

Value 2

 

 

 

 

ID 2

 

 

 

 

Into details

 

 

 

 

Position 12, 40

Width

72

 

Control StaticText

 

Title "Показывать пункты как:"

 

Position 110, 30

 

Control SymbolPicker

 

Position 140, 42

 

Into storesymbol

206

Справочник MapBasic

Оператор Dialog

Control StaticText

Title "Показать результаты для:" Position 5, 80 Control ListBox

Title "1 ого квартала;2 ого квартала;3 его квартала; 4 ого квартала;текущего месяца;года"

ID 3

 

Value 5

 

Into quarter

 

Position 10, 92

Height 40

Control StaticText

 

Title "Показать слои:" Position 110, 80

Control MultiListBox

Title "Улицы;Шоссе;Города;Области;Территории"

ID 4

 

Value 3

 

Position 115, 92

Height 40

Control StaticText

Title "Охват карты:" Position 5, 145

Control PopupMenu

Title "Город;Область;Территория;Регион;Вся страна"

Value 2 ID 5

Into mapscope

Position 10, 157

Control CheckBox

Title "Показывать &Легенду"

Into showlegend

ID 6

Position 115, 155

Control Button

Title "&Вернуть"

Calling resetsub

Position 10, 190

Control CancelButton

Title "Отмена"

Position 110, 190

Control OKButton

Title "OK"

Calling oksub

Position 160, 190

If CommandInfo(CMD_INFO_DLG_OK) Then

'... пользователь выбирает кнопку "OK" Else

'... пользователь выбирает кнопку "Отмена". End If

End Sub

Sub resetsub

'

' Восстановление Начальных значений в диалоге

'

Alter Control 1 Value "Торговые точки"

Справочник MapBasic

207

Оператор Dialog

Alter Control 2 Value 2

Alter Control 3 Value 5

Alter Control 4 Value 3

Alter Control 5 Value 2

Alter Control 6 Value 1

End Sub

Результатом этой процедуры будет следующий диалог:

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

Alter Control, Ask( ), Dialog Preserve, Dialog Remove, FileOpenDlg( ), FileSaveAsDlg( ), Note,

ReadControlValue( )

208

Справочник MapBasic

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