Справочник по компонентам Delphi. Часть 1 - TPopupMenu
ОГЛАВЛЕНИЕ
TPopupMenu
Текст, содержащийся в пункте меню, определяется свойством:
(Pb) property Caption: string;
Помимо основной, он несет еще две дополнительные нагрузки. Во-первых, если в строке имеется амперсанд ('&'), то он вместе с следующим за ним символом является акселератором. Например, для строки '&File' нажатие + означает выбор этого пункта. Во-вторых, если текст состоит из одного символа '-', то этот пункт служит в меню разделителем (имеет стиль MFJSEPARATOR);
Помимо акселератора может быть описана еще одна комбинация клавиш, нажатие которой равнозначно выбору пункта. Она должна содержаться в свойстве: •
(Pb) property Shortcut: TShortCut; TShortCut = Low(Word)..High(Word);
Способы выбора пункта меню — щелчок мышью, нажатие на сфокусированном пункте, нажатие акселератора или горячей комбинации, наконец, вызов метода
procedure Click;
приводят к возникновению события:
(Рb) property OnClick: TNotifyEvent;
Компонент TMenuItem может различать только это событие, с которьм должны быть связаны действия, ради которых вы ввели данный пункт в меню. Воспринимают это событие те пункты меню, которые в данный момент активны, что означает-установленное в True свойство:
(Рb) 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;
Пункты меню иерархически связаны. Методы и свойства для работы с дочерними пунктами меню приведены в таблице.
(Rо) property Parent: TMenuItem; | Содержит указатель на родительское подменю. |
(Ro) property I terns[Index: Integer]: TMenuItem; | Содержит список дочерних пунктов меню. |
(Ro) 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.