Страница 36 из 39 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. |