Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
110
Добавлен:
15.06.2014
Размер:
10 Mб
Скачать

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]

Здесь необязательные операнды определяют возможные пункты всплывающего меню, соответственно:

  1. содержимое поля открытой таблицы базы данных;

  2. список файлов активного рабочего диска;

  3. список полей таблицы базы данных.

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

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 Функции, полезные при работе с меню