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

Компонент tPopupMenu

В отличие от главного меню локальное меню постоянно не отображается на экране, а выводится по мере необходимости. Для вызова локального меню используется правая кнопка мыши. Локальное меню является одноуровневым, хотя это и необязательно.

Локальное меню обычно используется для динамического изменения свойств того интерфейсного элемента, над которым в данный момент находится курсор мыши. Локальное меню наряду с изменением свойств интерфейсных элементов обеспечивает доступ к командам. Причем это происходит быстрее, чем если команда вызывается из обычного меню. Во многих случаях отдельные элементы локального меню дублируют наиболее часто используемые команды главного меню. В отличие от главного, локальное меню может быть создано для любого оконного компонента.

Чтобы связать щелчок правой кнопки мыши на соответствующей компоненте необходимо свойству PopupMenu данного компонента присвоить имя локального меню. Например:

Label1.PopupMenu := PopupMenu1;

Пример 1.

Поместим на форму компоненты Memo и PopupMenu. Чтобы войти в Menu Designer, дважды щескните на всплывающем меню. Поместим в это меню три пункта с именами Cut, Copy и Paste. В их обработчиках события OnClick помести следующие строки:

Memo1.CutToClipboard;

Memo1.CopyToClipboard;

Memo1.PasteFromClipboard;

Удалите содержимое свойства Lines компонента Memo, установив его свойство ScrollBars в ssBoth.

Присвойте имя компонента PopupMenu в качестве значения свойству PopupMenu.

Запустите программу и введите какой-нибудь текст. С помощью мыши выделите одно или два слова, затем нажмите правую кнопку мыши. Выбирая из всплывающего меню пункты с именами Cut, Copy и Paste, можно увидеть эффект.

Используя туже программу, выберите всплывающее меню из списка в Object Inspector. Перейдите на страницу Events, дважды щелкнув на событии OnPopup, вставьте следующий текст:

Cut1.Enabled := Memo1.SelLength > 0;

Copy1.Enabled := Cut1.Enabled;

Paste1.Enabled := Clipboard.HasFormat(CF_Text);

В строку Uses модуля добавьте ClipBrd.

Запустив программу снова и убедитесь, что пункты Cut и Copy всплывающего меню оказываются заблокированными, когда нет выделенного текста, который можно было бы выделить и скопировать. Пункт Paste будет недоступен, если нет текста для вставки.

В этом и состоит основное назначение события Popup – предоставить возможность настроить всплывающее меню таким образом, чтобы оно соответствовало текущим условиям.

Множество различных компонентов может быть ассоциировано с одним всплывающим меню посредством своего свойства PopupMenu. Свойство PopupComponent всплывающего меню делает эту связь двухсторонней. Оно сообщает компоненту PopupMenu , поверх какого компонента ему следует всплывать.

Другой пример:

Type

Tform1 : class(TForm);

...

PopupMenu1 : TPopupMenu;

N8 : TMenuItem;

N9 : TMenuItem;

Procedure N8Click;

Procedure N9Click;

end;

Замечание

Для того, чтобы подключить локальное меню к главной форме, необходимо в инспекторе объектов свойству

PopupMenu := PopupMenu1;

В разделе Implementation Unit1 необходимо записать две процедуры, связанные с обработкой команд локального меню:

Procedure Tform1.N8Click;

begin

Form2.ShowModal;

end;

Procedure Tform1.N9Click;

begin

Form3.ShowModal;

end;

Пример 2.

Пусть требуется реализовать локальное меню, по командам которого необходимо выводить в компоненту Label текст с различными способами выравнивания.

Для каждой команды локального меню можно создать обработчик в виде:

Procedure Tform1.Left(Center, Right)Click;

begin

Label1.Allignment := taLeftJustify(taCenter,taRightJustify);

end;

Замечание

Для того, чтобы появлялось локальное меню по нажатию правой кнопки в области компонента Label1 необходимо имя локального меню указать в свойстве PopupMenu компонента Label1.

Для того, чтобы визуально было видно выравнивание текста, необходимо

Label1.AutoSize := false;

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