Распечатать страницу

Короткое меню в Microsoft Visual FoxPro

« Назад

Вернемся к форме ListForm (см. рис. 10.24) и создадим для нее приведенное на рис. 11.8 контекстное меню.

173.1.-Создаем-контекстное-меню-формы-ListForm

Рис. 11.8. Создаем контекстное меню формы ListForm

Назначение меню – изменять значение Value раскрывающегося списка Combo1 формы ListForm и вызывать обработчик его события InteractiveChange, который, в свою очередь, изменяет значения свойств списка List1 той же формы.

С каждым пунктом меню связана команда, вызывающая процедуру DoChangeInCombo1( ), расположенную в Cleanup-коде меню. (Механизм создания Cleanup-кода такой же, что и Setup-кода.)

Процедура DoChangeInCombo1( ) не имеет параметров, а для определения значения свойства Value элемента управления Combo1 активной формы используется функция Prompt( ), возвращающая заголовок выбранного пункта меню. Употребление такой функции приемлемо, поскольку соответствующие заголовки пунктов меню и значения свойства Value совпадают.

procedure DoChangeInCombo1( )

                                            && Получаем ссылку на объект формы

                                            oForm = _SCREEN.ActiveForm

                                            with oForm.Combo1

                                               && Изменяем значение свойства Value списка Combo1

                                               && и вызываем обработчик его события InteractiveChange

                                               .Value = Prompt( )

                                               .InteractiveChange

                                            endWith

                                            && Устанавливаем список Combo1 в фокусе

                                            && Это нужно для визуализации обновлений

                                            oForm.Combo1.SetFocus

endProc

Чтобы созданное меню функционировало как контекстное, в обработчик события RightClick формы ListForm добавим следующий код:

&& Обработчик события RightClick формы ListForm

if File('d:\SomeShortcutMenu.mpr') then

                                            do d:\SomeShortcutMenu.mpr

endif

После создания короткого меню и его Cleanup-кода сохраним меню в файле d:\SomeShortcutMenu.mnx, выполним генерацию меню и просмотрим полученный в файле d:\SomeShortcutMenu.mpr код (комментарий в приводимом коде частично опущен):

*       *

*       * This PROGRAM was automatically generated BY GENMENU

*       *

*       *   Menu Definition

*       *

DEFINE POPUP shortcut SHORTCUT RELATIVE FROM MROW( ), MCOL( )

DEFINE BAR 1 OF shortcut PROMPT "Value"

DEFINE BAR 2 OF shortcut PROMPT "Alias"

DEFINE BAR 3 OF shortcut PROMPT "SQL"

DEFINE BAR 4 OF shortcut PROMPT "QPR"

DEFINE BAR 5 OF shortcut PROMPT "Array"

DEFINE BAR 6 OF shortcut PROMPT "Fields"

DEFINE BAR 7 OF shortcut PROMPT "Files"

DEFINE BAR 8 OF shortcut PROMPT "Structure"

ON SELECTION BAR 1 OF shortcut DoChangeInCombo1( )

ON SELECTION BAR 2 OF shortcut DoChangeInCombo1( )

ON SELECTION BAR 3 OF shortcut DoChangeInCombo1( )

ON SELECTION BAR 4 OF shortcut DoChangeInCombo1( )

ON SELECTION BAR 5 OF shortcut DoChangeInCombo1( )

ON SELECTION BAR 6 OF shortcut DoChangeInCombo1( )

ON SELECTION BAR 7 OF shortcut DoChangeInCombo1( )

ON SELECTION BAR 8 OF shortcut DoChangeInCombo1( )

ACTIVATE POPUP shortcut 

*       *

*       *   Cleanup Code & Procedures

*       *

procedure DoChangeInCombo1( )

                                            && Код процедуры DoChangeInCombo1( ) см. выше

                                            …

endProc

Форма ListForm с созданным контекстным меню приведена на рис. 11.9.

173.2.-Контекстное-меню-Shortcut-формы-ListForm

Рис. 11.9. Контекстное меню Shortcut формы ListForm