- •5 Работа в системе visual foxpro
- •5.1 Базовые концепции Visual FoxPro
- •5.1.1 Общая характеристика субд
- •5.1.2 Элементы проекта
- •5.1.3 ИнтерфейсVisualFoxProи создание проекта
- •5.1.4 Принципы создания проекта и его основных компонентов
- •5.1.5 Создание базы данных, таблиц и индексов
- •5.1.5.1 Создание базы данных
- •5.1.5.2 Создание таблиц
- •5.1.5.3 Типы данных вVisualFoxPro
- •5.1.5.4Создание индексов вVisualFoxPro
- •5.1.6 Организация межтабличных связей
- •5.1.7 Обеспечение целостности данных
- •5.2 Извлечение и представление информации средствами интерфейсаVisualFoxPro
- •5.2.1 Средства формирования запросов
- •5.2.2 Организация многотабличных запросов и вычисляемого поля
- •5.2.3 Представление результатов запросов
- •Основы программирования вVisualFoxPro
- •5.3.1 Общие положения и соглашения о синтаксисе команд
- •5.3.2 Разновидности, объявление, инициализация и отображение переменных и массивов
- •5.3.3 Взаимодействие программ вVisualFoxPro
- •5.3.4 Команды структурного программирования
- •5.3.5 Команды обработки особых ситуаций
- •5.3.6 Команды установки программной среды
- •5.3.7 Некоторые важные функции языкаVisualFoxPro
- •5.3.8 Визуальное объектно-ориентированное программирование в Visual FoxPro
- •5.3.8.1 Базовые понятия
- •5.3.8.2 Создание объектов на основе базовых классов и задание свойств объектов
- •5.3.8.3 Определение событий и методов для объектов класса
- •5.3.8.4 Вложенность объектов
- •5.3.9 Команды для работы с меню
- •5.3.10 Пример совместного использование программных файлов, формы и меню
5.3.8.4 Вложенность объектов
Объекты, созданные на основе классов-контейнеров, могут содержать другие объекты. Ссылка на вложенный объект осуществляется путем перечисления объектов, содержащих этот объект. Элементы списка разделяются точками. Например, для ссылки на столбец colCountry объекта-сетки grdADDRESS, которая в свою очередь также является объектом, необходимо написать grdAddress.colCountry. Такая ссылка называется абсолютной ссылкой. Если глубина вложения объекта большая, абсолютная ссылка может включать слишком много объектов и будет слишком громоздкой. В Visual FoxPro имеются средства, которые позволяют сократить список объектов ссылки.
Для ссылки на активную форму можно использовать свойство ActiveForm экранного объекта (_SCREEN), что позволяет получить доступ к активной форме, даже если неизвестно ее имя. Аналогично свойство ActiveControl позволяет получить доступ к активному объекту формы, а свойство ActivePage – к активной странице формы. Например, выражения на рис. 5.41 позволяют изменить заголовок активной формы и надпись активной кнопки, соответственно.
_SCREEN.ActiveForm.Caption=”Новый заголовок”
_SCREEN.ActiveControl.Caption=”Печать ведомости”
Рис. 5.41 Обращение к вложенным объектам для изменения свойств
При ссылке на вложенный объект можно использовать свойство Parent и ключевые слова для идентификации объекта, к которому нужно получить доступ. Свойство Parent содержит ссылку на непосредственный контейнер объекта. Список ключевых слов и определяемые ими ссылки приведены в таблице 5.14.
Таблица 5.14
Ключевые слова для идентификации объектов
Наименование |
Ссылка |
THIS |
На сам объект |
THISFORM |
На форму, которая содержит объект |
THISFORMSET |
На группу форм, которая содержит объект |
Каждый объект обрабатывает связанные с ним события независимо. Поэтому контейнер не может реагировать на события вложенного в него объекта даже в том случае, если данный объект не содержит метода для обработки события, а контейнер может реагировать на данное событие.
5.3.9 Команды для работы с меню
Имеются специальные команды для вызова построителя нового меню или модификации существующего меню (рис. 5.42):
CREATE MENU [<file> | ?]
MODIFY MENU [<file> | ?]
Здесь <file> – файл .mnx, в котором записывается вся информация о меню;
? – обеспечивает выбор нужного файла из списка средствами диалогового окна OpenFile.
Рис. 5.42 Команды вызова построителя меню
Первичная линейка пользовательского меню создается командой, определяющей имя меню, и серией последующих команд, определяющих каждый пункт линейки меню (рис. 5.43)
DEFINE MENU <menu name1>
DEFINE PAD <pad name> OF <menu name1> PROMPT <expC1>
Здесь <expC1> – задает появляющийся в данном пункте текст.
Рис. 5.43 Команды задания линейки меню
Выбору конкретного пункта меню можно поставить в соответствие одно из возможных действий при помощи специальных команд (рис. 5.44).
активизация другой линейки меню командой
ON PAD <pad name> OF <menu name1> ACTIVATE MENU <menu name2>
активизация всплывающего меню командой
ON PAD <pad name> OF <menu name1> ACTIVATE POPUP <popup name>
выполнение команды или процедуры командой
ON SELECTION PAD <pad name> OF <menu name1> [<command>]
или командой
ON SELECTION MENU <menu name1> [<command>]
Рис. 5.44 Команды задания действий при выборе пунктов линейки меню
Последняя команда на рис. 5.44 определяет одинаковую реакцию системы на выбор любого пункта меню, обычно это вызов какой-то процедуры, выполняющей действия в зависимости от выбранного пункта. То, какой пункт меню выбран, определяет специальная встроенная функция (см. ниже рис. 5.49).
Каждое всплывающее меню в составе пользовательского меню должно быть заранее определено командами следующего вида (рис. 5.45):
DEFINE POPUP <popup name> [PROMPT FIELD <expr> |
PROMPT FILES [LIKE <scel>] | PROMPT STRUCTURE]
Здесь необязательные операнды определяют возможные пункты всплывающего меню, соответственно:
содержимое поля открытой таблицы базы данных;
список файлов активного рабочего диска;
список полей таблицы базы данных.
Если ни один из описанных операндов не указан, то пользователь должен явно описать все опции соответствующего всплывающего меню серией команд следующего вида:
DEFINE BAR <expN1> OF <popup name> PROMPT <expC1>
Здесь <expC1> – появляющийся в данном пункте всплывающего меню текст; <expN1> – номер пункта всплывающего меню.
Рис. 5.45 Команды задания пунктов всплывающего меню
Выбору конкретного пункта всплывающего меню можно поставить в соответствие следующие действия (рис. 5.46):
активизация линейки меню <menu name> или нового всплывающего меню <popup name2>
ON BAR <expN> OF <popup name1> [ACTIVATE MENU <menu name> |
ACTIVATE POPUP <popup name2>]
выполнение команды или процедуры
ON SELECTION BAR <expN> OF <popup name> [<command>]
выполнение той же команды или процедуры при выборе любого пункта меню
ON SELECTION POPUP <popup name> [<command>]
Рис. 5.46 Задание действий при выборе пунктов всплывающего меню
Меню после определения в программе нужно активизировать, то есть вывести на экран и сделать доступным для выбора (рис. 5.47).
Активация линейки меню
ACTIVATE MENU <menu name>
Активация всплывающего меню
ACTIVATE POPUP <popup name>
Рис. 5.47 Активация меню
Возможные манипуляции с меню показаны на рис. 5.48.
Активное меню сделать неактивным и удалить с экрана, оставив его в памяти,
DEACTIVATE MENU | POPUP
Активные линейки меню скрыть, то есть сделать невидимыми на экране, оставив их в памяти.
HIDE MENU <menu name1> [,<menu name2>… ]
HIDE POPUP <popup name1> [,<popup name2>… ]
Скрытое меню снова сделать видимым
SHOW MENU <menu name1> [,<menu name2>… ]
SHOW POPUP <popup name1> [,<popup name2>… ]
Это же реализуется повторным вводом команды ACTIVATE…. Команды SHOW только показывают меню на экране без их активизации.
Полное удаление всех пунктов меню
CLEAR MENUS | POPUPS
Рис. 5.48 Команды манипулирования меню
Полное удаление с экрана, из окна и из памяти пунктов меню и самих меню, определенных пользователем, выполняет команда RELEASE, которая позволяет удалять как меню в целом, так и отдельные пункты меню. Синтаксис команды аналогичен команде DEFINE.
Наконец, функции, полезные при работе с меню, показаны на рис. 5.49.
MENU() – функция символьного типа; возвращает название текущей активной линейки меню в виде строки из заглавных букв; если активных линеек меню нет или нажат ESC, то возвращает пустую строку;
POPUP() – то же для всплывающего меню;
PAD() – то же для пункта, выбранного последним из активной линейки меню;
BAR() – то же для команды, выбранной последней из всплывающего меню, только возвращает номер команды, соответствующей выбранной строке всплывающего меню; если активного меню не было или была нажата клавиша ESC, то возвращается число 0;
PROMPT() – функция символьного типа; возвращает текст приглашения, выводимого для пункта, выбранного последним из линейки меню, или для команды, выбранной последней из всплывающего меню.
Рис. 5.49 Функции, полезные при работе с меню