Справочник по компонентам Delphi. Часть 1
Страница 36. TPopupMenu


 

TPopupMenu

Текст, содержащийся в пункте меню, определяется свойством:

(Pb) property Caption: string;

Помимо основной, он несет еще две дополнительные нагрузки. Во-первых, если в строке имеется амперсанд ('&'), то он вместе с следующим за ним символом является акселератором. Например, для строки '&File' нажатие + означает выбор этого пункта. Во-вторых, если текст состоит из

одного символа '-', то этот пункт служит в меню разделителем (имеет стиль MFJSEPARATOR);

Помимо акселератора может быть описана еще одна комбинация клавиш, нажатие которой равнозначно выбору пункта. Она должна содержаться в свойстве: •

(Pb) property Shortcut: TShortCut;
TShortCut = Low(Word)..High(Word);

Способы выбора пункта меню — щелчок мышью, нажатие на сфо­кусированном пункте, нажатие акселератора или горячей комбинации, наконец, вызов метода

procedure Click;

приводят к возникновению события:

(Р1э) property OnClick: TNotifyEvent;

Компонент TMenuItem может различать только это событие, с которьм до­лжны быть связаны действия, ради которых вы ввели данный пункт в меню. Воспринимают это событие те пункты меню, которые в данный момент активны, что означает-установленное в True свойство:

(РЬ) property Enabled: Boolean;

Если Enabled равно False, пункт изображается серьм цветом и не воспринимает сообщений.

Часто пункты меню используются для переключения каких-либо режимов рабо­ты программы. При этом они могут быть отмечены "галочкой" перед началом текста. Свойство

(Pb) property Checked: Boolean;

отвечает за то, является ли этот пункт отмеченным.

Если в меню слишком много команд, то их расположение одна под другой может вызвать серьезные неудобства для пользователя. Свойство

(Pb) property Break: TMenuBreak;

TMenuBreak = (mbNone, mbBreak, mbBarBreak) ;

призвано решить эту проблему. Если оно установлено в mbBreak, то ко­манды меню, начиная с этой, располагаются в новом — соседнем с преж­ним — столбце (при этом их принадлежность не изменяется). Если оно равно mbBarBreak, столбцы при этом разделяются вертикальной чертой. В Delphi все компоненты меню типа TMenuItem могут быть как простыми командами, так и подменю, имеющими собственный список пунктов. В случае, если у компонента дочерних подменю и пунктов нет, для него имеет смысл свойство:

(Ro) property Command: Word;

Прежде при написании меню нужно было выдумывать и присваивать уникаль­ный идентификатор каждому его пункту — то есть собственно код команды, который посылался в качестве параметра сообщения WM.COMMAND. Сейчас эта задача возложена на Delphi — программист не только не определяет, но может и не знать кода команды, связанного с этим пунктом меню. Система выберет уникальное значение автоматически и присвоит это значение свойству Command. Изменять его не разрешается.

Интерпретация сообщений меню скрыта от программиста. Система сама опре­деляет, какой пункт выбран, и вызывает его обработчик события OnClick.

Если для каких-то целей понадобился код команды, можно воспользоваться вышеуказанным свойством (см. пример в описании компонента TMenu).

Если у компонента TMenuItem имеются дочерние пункты, то он является подменю, имеет статус MF_POPUP и дескриптор меню Windows, доступный для чтения через свойство:

(ro)property Handle: HMENU;

Пункты меню иерархически связаны. Методы и свойства для работы с до­черними пунктами меню приведены в таблице.

J. ^

(До) property Parent: TMenuItem;

Содержит указатель на родительское подменю.

(Ro) property I terns[Index: Integer]: TMenuItem;

Содержит список дочерних пунктов меню.

fRo) property Count: Integer;

Содержит количество дочерних пунктов меню.

procedure Insert(Index: Integer; Item: TMenuItem) ;

Вставляет пункт Item в меню на место Index. Поскольку структура меню строго иерархическая, вставляемый пункт не должен быть частью другого меню (его свойство Parent должно быть равно nil).

procedure Delete(Index: Integer) ;

Удаляет пункт с индексом Index из меню.

function IndexOf(Item: TMenuItem): Integer;

Возвращает индекс пункта Item.

procedure Add(Item: TMenuItem);

Добавляет пункт Item в конец меню.

procedure Remove(Item: TMenuItem);

Удаляет пункт Item из меню.

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

(Pb) property HelpContext: THelpContext;
Свойство
(Pb) property Grouplndex: Byte;

используется при объединении нескольких меню между собой. Подробное объяснение его назначения см. в описании компонента TMainMenu.

 
« Предыдущая статья   Следующая статья »