Для создания нового меню или переопределения уже существующего используется оператор Create Menu. Рассмотрим два небольших примера создания меню.
В первом примере создается новое меню, которое будет размещено в конце строки главного меню MapInfo. После выполнения процедуры theEnd программа закончит работу, а построеное меню будет выгружено.
Создание нового меню
Include "mapbasic.def" Declare Sub Main Declare Sub TestPrint Declare Sub theEnd Sub Main Create Menu "Тест меню" As "Печать" Calling TestPrint, "Выход" Calling theEnd Alter Menu Bar Add "Тест меню" end sub Sub TestPrint print "Тест меню" end sub Sub theEnd End Program end sub |
Если в предыдущем примере несколько изменить процедуру Main,
Sub Main Create Menu "Тест меню" As "Печать" Calling TestPrint, "Выход" Calling theEnd Alter Menu Bar Remove ID 6, ID 7 Alter Menu Bar Add "Тест меню", ID 6, ID 7 end sub |
то меню разместится в строке меню MapInfo перед меню Окно.
Здесь вместо имен меню используются идентификаторы.
Файл ID 1
Правка ID 2
Объекты ID 14
Запрос ID 3
Таблица ID 15
Настройки ID 5
Окно ID 6
Справка ID 7
Список ID 8 Используется, при активном окне Списка
Карта ID 9 Используется, при активном окне Карты
График ID 11 Используется, при активном окне Графика
Отчет ID 10 Используется, при активном окне Отчета
Геогруппы ID 13 Используется, при активном окне Геогрупп
MapBasic ID 12 Используется, при активном окне MapBasic
Программы ID 4
WinSpecific Обозначает меню, соответствующее открытому окну: "Карта", "График", "Список", "Отчет", "MapBasic" или "Справка"
DefaultShortcut ID 16 Контекстное меню для окон, не имеющих
своего персонального контекстного меню
MapperShortcut ID 17 Контекстное меню окна Карты
BrowserShortcut ID 18 Контекстное меню окна Списка
LayoutShortcut ID 19 Контекстное меню окна Отчета
GrapherShortcut ID 20 Контекстное меню окна Графика
CmdShortcut ID 21 Контекстное меню окна MapBasic
RedistrictShortcut ID 22 Контекстное меню окна Геогрупп
Создание нового меню вместо существующего
Include "mapbasic.def" Declare Sub Main Declare Sub TestPrint Declare Sub theEnd Sub Main Create Menu "Справка" As "Печать" Calling TestPrint, "Выход" Calling theEnd end sub Sub TestPrint print "Тест меню" end sub Sub theEnd End Program end sub |
В данном случае стандартное меню Справка заменит новое меню, состоящее из двух
пунктов Печать и Выход. После окончания работы программы (процедура theEnd)
будет восстановлено стандартное меню Справка.
Можно програмно управлять состоянием элемента меню. Для этого используются
специальные управляющие коды. Информацию по этим кодам можно найти в
справочнике MapBasic. Приведем пример использования управляющих кодов.
Create Menu "Справка" As "Печать" + Chr$(9) + "Ctrl+д/W^L" Calling TestPrint, "(-", "Выход" Calling theEnd |
Здесь в пункт меню Печать будет добавлен комментарий Ctrl+д и появится
дополнительная возможность вызова обработчика TestPrint через нажатие на клавиатуре
клавиш Ctrl + д (Д, l, L). Следующий пункт меню не имеет обработчика события и его
роль чисто декоративная – он рисует линию разделяющую пункты меню.