Тема 10 Организация пользовательского меню
ЦельНаучиться организации пользовательского меню
План
1. MainMenu – главное меню
2. PopupMenu – всплывающее контекстное меню
3. ActionList – диспетчер действий
1. MainMenu – главное меню
Позволяет конструировать и создавать на форме полосу главного меню, а также сопутствующие выпадающие меню Модуль menus
Описание -Компонент TMainMenu отображает на форме главное меню. Проектирование меню производится с помощью конструктора меню, вызываемого двойным щелчком на этом компоненте. Команды контекстного меню конструктора Create Submenu позволяет ввести подменю в выделенный раздел.- Свойства и методы TMainMenu обеспечивают объединение меню главной и вспомогательной форм и связь с меню OLE контейнера.
Свойство Items содержит массив разделов меню типа TMenuItem, обладающих своими свойствами, методами, событиями. Свойство Caption обозначает надпись раздела, свойство Name - имя объекта раздела, свойство ShortCut определяет клавиши быстрого доступа к разделу. Свойство Default определяет, является ли данный раздел разделом по умолчанию своего подменю, т.е. разделом, выполняемым при двойном щелчке пользователя на родительском разделе. Свойство Break используется в длинных меню, чтобы разбить список разделов на несколько столбцов. Свойство Checked, установленное в true, указывает, что в разделе меню будет отображаться маркер флажка, показывающий, что данный раздел выбран. Еще одним свойством, позволяющим вводить маркеры в разделы меню, является RadioItem. Это свойство, установленное в true, определяет, что данный раздел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства GroupIndex.
Для каждого раздела могут быть установлены во время проектирования или программно во время выполнения свойства Enabled (доступен) и Visible (видимый).
Начиная с Delphi 4 предусмотрена возможность ввода в разделы меню изображений. За это ответственны свойства разделов Bitmap и ImageIndex. Первое из них позволяет непосредственно ввести изображение в раздел, выбрав его из указанного файла. Второе позволяет указать индекс изображения, хранящегося во внешнем компоненте TImageList. Указание на этот компонент вы можете задать в свойстве Images компонента TMainMenu.
Основное событие раздела меню - OnClick, возникающее при щелчке пользователя на разделе или при нажатии "горячих" клавиш и клавиш быстрого доступа.
Свойства
1. AutoHotKeys
Определяет, могут ли "горячие" клавиши элементов меню устанавливаться автоматически
2. AutoLineReduction
Указывает, проверяет ли и исправляет ли Delphi появление в начале или конце подменю разделителей или двух разделителей подряд
3. AutoMerge - Определяет, соединяется ли главное меню вторичной формы с меню главной формы.
4 BiDiMode Определяет двунаправленный характер компонента. По умолчанию равно bdLeftToRight, что характерно для европейских языков. Другие значения используются для стран Востока
5.ComObject Ссылка на интерфейс в компонентах, поддерживающих стандарт COM
6. ComponentCount Указывает число компонентов, которыми владеет данный компонент.
7. ComponentIndex Позиция компонента в массиве Components его владельца
-Components Указывает массив компонентов Components, которыми владеет данный компонент.
-ComponentState Состояние компонента в процессе визуального проектирования. Свойство только для чтения. Во время выполнения не используется
-ComponentStyle Определяет флаги стиля компонента. Используется при создании новых компонентов
-DesignInfo Используется только в среде Delphi при проектировании форм. В приложениях не используется.
-Handle Дескриптор, обеспечивающий доступ к меню при вызовах функций API Windows
-Images-Список изображений, которые могут отображаться в разделах меню слева от надписи. Изображения конкретных разделов указываются свойством ImageIndex (индексом массива Images) разделов меню Items типа TMenuItem.
-Items Список элементов (разделов) меню типа TMenuItem
-Name Имя компонента, по которому на него ссылаются другие компоненты.
-Owner Определяет владельца данного компонента
-OwnerDraw Определяет, рисуются ли пункты меню приложением
-ParentBiDiMode Указывает, использует ли компонент родительский BiDiMode
-Tag Свойство, используемое пользователем по своему усмотрению
-VCLComObject Используется только в среде Delphi для компонентов, поддерживающих стандарт COM
-WindowHandle Обеспечивает доступ к дескриптору окна, которое использует меню.
Методы
fterConstruction - Вызывается автоматически после создания объекта
Assign - Копирует один объект в другой, создавая копию всех данных
BeforeDestruction - Вызывается автоматически перед срабатыванием деструктора
ClassInfo - Возвращает указатель на таблицу информации времени выполнения (RTTI) о типе объекта
ClassName - Возвращает имя типа объекта
-ClassNameIs--Возвращает true, если передаваемое в функцию имя совпадает с именем данного класса (в отличие от операции is не учитывает наследования)
ClassParent -Возвращает тип непосредственного предка данного класса—ClassType -Возвращает указатель на таблицу информации времени выполнения (RTTI) о типе объекта
CleanupInstanсe -Очищает длинные строки и объекты variant. Вызывается автоматически в методе -Free
Create--Создает и инициализирует экземпляр TMainMenu.--DefaultHandler
-Процедура обработки сообщения по умолчанию. Вызывается, из Dispatch, если не найден обработчик данного сообщения
Destroy Вызывает деструктор объекта. Вместо Destroy всегда лучше использовать -Free
DestroyComponents-Уничтожает все компоненты, которыми владеет данный компонент. Автоматически вызывается в методе -Free
Destroying-Показывает, что компонент и все компоненты, которыми он владеет, должны быть уничтожены. Автоматически вызывается в методе- Free
Dispatch-Вызывает обработчик сообщения, полученного объектом--DispatchCommand-Имитирует щелчок на разделе меню с указанным значением идентификатора Command ID -Windows
DispatchPopup-Имитирует щелчок на разделе меню, связанном с дескрипором всплывающего меню
-FieldAdress--Возвращает указатель на опубликованное поле объекта--FindComponent
-Ищет в списке Components компонент с заданным именем
FindItem--Ищет и возвращает раздел меню
Free--Уничтожает объект и освобождает выделенную под него память. Автоматически вызывает Destroy, если объект существует--FreeInstance
-Освобождает память, выделенную ранее вызванным методом
NewInstance.-Автоматически вызывается деструктором Destroy. Непосредственный вызов пользователем не требуется
FreeNotification--Гарантирует, что указанный в вызове компонент будет разрушен. Используется только по отношению к компонентам, расположенным на других формах. Для компонентов на текущей форме вызывается автоматически
FreeOnRelease-Освобождает ссылку интерфейса для компонентов, которые создавались из классов COM--GetHelpContext--Возвращает идентификатор ID -WinHelp- контекстно-зависимой справки, связанной с данным разделом меню--GetInterface--Возвращает интерфейс, указанный идентификатором
-GetInterfaceEntry--Возвращает вход интерфейса, указанного идентификатором
e-tNamePath -Возвращает строку, используемую Инспектором Объектов--GetOle2AcceleratorTable-Возращает таблицу ускорений меню--GetParentComponent-Возвращает родителя компонента--HasParentУказывает, имеет ли компонент родителя
InheritsFrom Определяет, является ли указанный класс предком данного объекта. Используется в операциях is и as
InitInstance Инициализирует новый объект и указатель на его таблицу виртуальных методов. Вызывается автоматически методом
NewInstanceInsertComponentДобавляет указанный компонент в конец списка
Components компонента-владельца. При визуальном проектировании вызывается автоматически. Специально может потребоваться вызов этого метода только при добавлении компонента в список другого владельца
InstanceSize-Возвращает число байтов, занимаемых объектом. Может использоваться для анализа затрат памяти различными типами объектов--
Событие
OnChangeНаступает при изменении меню
-При работе с меню основные события связаны не с самим объектом меню, а с объектами его разделов типа TMenuItem.
2. PopupMenu – всплывающее контекстное меню
Позволяет создавать всплывающие контекстные меню, возникающие при нажатии пользователем правой кнопки мыши Модуль menus
-Описание-----------------------------------------------------
-Компонент TPopupMenu определяет всплывающее контекстное меню, появляющееся на экране при щелчке пользователя правой кнопкой мыши в поле компонента, который связан с данным меню своим свойством PopupMenu.
Проектирование меню производится с помощью конструктора меню, вызываемого двойным щелчком на этом компоненте. Команды контекстного меню конструктора Create Submenu позволяет ввести подменю в выделенный раздел.-Свойство Items содержит массив разделов меню типа TMenuItem, обладающих своими свойствами, методами, событиями. Свойство Caption обозначает надпись раздела, свойство Name - имя объекта раздела, свойство ShortCut определяет клавиши быстрого доступа к разделу. Свойство Default определяет, является ли данный раздел разделом по умолчанию своего подменю, т.е. разделом, выполняемым при двойном щелчке пользователя на родительском разделе. Свойство Break используется в длинных меню, чтобы разбить список разделов на несколько столбцов. Свойство Checked, установленное в true, указывает, что в разделе меню будет отображаться маркер флажка, показывающий, что данный раздел выбран. Еще одним свойством, позволяющим вводить маркеры в разделы меню, является RadioItem. Это свойство, установленное в true, определяет, что данный раздел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства GroupIndex.
Для каждого раздела могут быть установлены во время проектирования или программно во время выполнения свойства Enabled (доступен) и Visible (видимый).
Начиная с Delphi 4 предусмотрена возможность ввода в разделы меню изображений. За это ответственны свойства разделов Bitmap и ImageIndex. Первое из них позволяет непосредственно ввести изображение в раздел, выбрав его из указанного файла. Второе позволяет указать индекс изображения, хранящегося во внешнем компоненте TImageList. Указание на этот компонент вы можете задать в свойстве Images компонента TPopupMenu.
-Основное событие раздела меню - OnClick, возникающее при щелчке пользователя на разделе или при нажатии "горячих" клавиш и клавиш быстрого доступа.
СВОЙСТВА
1. Alignment Определяет, какая точка меню появится под курсором мыши: paLeft - левый верхний угол, paRight - правый верхний угол, paCenter - центр. Значение по умолчанию - paLeft.
2. AutoHotKeysОпределяет, могут ли "горячие" клавиши элементов меню устанавливаться автоматически
3. AutoLine
4. Reduction Указывает, проверяет ли и исправляет ли Delphi появление в начале или конце подменю разделителей или двух разделителей подряд
5. AutoPopupОпределяет автоматическое появление меню при щелчке правой кнопки мыши или определенной в Windows 95/98 комбинации клавиш. Если AutoPopup равно false, то для отображения меню надо использовать метод Popup
6. HelpContext Определяет идентификатор контекстной справки, связанной со всем меню в целом. Для задания контекстной справки отдельным разделам меню надо использовать свойство HelpContext объектов разделов TMenuItem
7. Images Список изображений, которые могут отображаться в разделах меню слева от надписи. Изображения конкретных разделов указываются свойством ImageIndex (индексом массива Images) разделов меню Items типа TMenuItem
8. ItemsСписок элементов (разделов) меню типа TMenuItem
9. Menu
10. Animation Определяет способ появления меню на экране (только начиная с Windows 98 и NT 5.0)
11. Popup
12. ComponentОпределяет компонент, который последним вызвал данное меню. Используется в меню, с которым связано несколько компонентов, чтобы определить, из какого именно компонента поступил вызов
13. PopupPointЗащищённое свойство. Указывает место появления всплывающего меню. Значение свойства устанавливается методом Popup
14. TrackButton Указывает, какая кнопка мыши активизирует всплывающее меню, если оно связано с кнопкой панели инструментов
-МЕТОДЫ
-- AfterConstruction Вызывается автоматически после создания объекта
- Assign Копирует один объект в другой, создавая копию всех данных объекта.
- BeforeDestruction Вызывается автоматически перед срабатыванием деструктора
- ClassInfo Возвращает указатель на таблицу информации времени выполнения (RTTI) о типе объекта
- ClassName Возвращает имя типа объекта
- ClassNameIs Возвращает true, если передаваемое в функцию имя совпадает с именем данного класса (в отличие от операции is не учитывает наследования)
- ClassParent Возвращает тип непосредственного предка данного класса
- ClassTypeВозвращает указатель на таблицу информации времени выполнения (RTTI) о типе объекта
- CleanupInstanceОчищает длинные строки и объекты variant. Вызывается автоматически в методе Free
- CreateСоздает и инициализирует экземпляр TPopupMenu.
- DefaultHandlerПроцедура обработки сообщения по умолчанию. Вызывается, из Dispatch, если не найден обработчик данного сообщения
- Destroy Вызов деструктора объекта. Вместо Destroy всегда лучше использовать Free
- DestroyComponentsУничтожает все компоненты, которыми владеет данный компонент. Автоматически вызывается в методе Free
- Destroying Показывает, что компонент и все компоненты, которыми он владеет, должны быть уничтожены. Автоматически вызывается в методе Free
- Dispatch Вызывает обработчик сообщения, полученного объектом
- DispatchCommandИмитирует щелчок на разделе меню с указанным значением идентификатора Command ID Windows
- DispatchPopup Имитирует щелчок на разделе меню, связанном с дескрипором всплывающего меню
- DoPopup Генерирует событие OnPopup
- ExecuteActionВызывает указанное действие Action, связанное с данным компонентом
- FieldAddress Возвращает указатель на опубликованное поле объекта
- FindComponent Ищет в списке Components компонент с заданным именем
- FindItem Ищет и возвращает раздел меню
- FreeУничтожает объект и освобождает выделенную под него память. Автоматически вызывает Destroy, если объект существует
- FreeInstanceОсвобождает память, выделенную ранее вызванным методом NewInstance. Автоматически вызывается деструктором Destroy. Непосредственный вызов пользователем не требуется
- FreeNotification Гарантирует, что указанный в вызове компонент будет разрушен. Используется только по отношению к компонентам, расположенным на других формах. Для компонентов на текущей форме вызывается автоматически
- FreeOnRelease Освобождает ссылку интерфейса для компонентов, которые создавались из классов COM.
- GetHelpContext Возвращает идентификатор ID WinHelp контекстно-зависимой справки, связанной с данным разделом меню
- GetInterface Возвращает интерфейс, указанный идентификатором
- GetInterfaceEntry Возвращает вход интерфейса, указанного идентификатором
- GetInterfaceTable Возвращает указатель на структуру, содержащую все интерфейсы класса
- GetNamePath Возвращает строку, используемую Инспектором Объектов
- GetParentComponent Возвращает родителя компонента
- HasParentУказывает, имеет ли компонент родителя
- InheritsFromОпределяет, является ли указанный класс предком данного объекта. Используется в операциях is и as
- InitInstance Инициализирует новый объект и указатель на его таблицу виртуальных методов. Вызывается автоматически методом NewInstance
- InsertComponent Добавляет указанный компонент в конец списка Components компонента-владельца. При визуальном проектировании вызывается автоматически. Специально может потребоваться вызов этого метода только при добавлении компонента в список другого владельца
- InstanceSizeВозвращает число байтов, занимаемых объектом. Может использоваться для анализа затрат памяти различными типами объектов
- IsRightToLeft Указывает, должен ли компонент отображаться справа налево для стран Среднего Востока
- IsShortCut Распознает "горячие" клавиши, связанные с разделом меню, и выполняет этот раздел меню
- MethodAddress Возвращает адрес указанного метода.Непосредственно не вызывается
- MethodName Возвращает имя метода, расположенного по указанному адресу
- NewInstanceВыделяет область памяти под объект и возвращает указатель на нее. Автоматически вызывается всеми конструкторами. Использует InstanceSize
- PopupОтображает всплывающее меню в указанной позиции экрана
- ProcessMenuChar Обрабатывает сообщение клавиатуры, определяя клавиши быстрого доступа к разделу меню
- RemoveComponent Удаляет указанный компонент из списка Components компонента-владельца. При визуальном проектировании вызывается автоматически. Специально может потребоваться вызов этого метода только при удалении компонента из список другого владельца
- SafeCallException Обрабатывает исключения COM и OLE-- UpdateAction Обновляет действие Action, связанное с компонентом. Непосредственно не вызывается
- UseRightToLeftAlignment Указывает, должен ли компонент отображаться справа налево: возвращает true, если на комьютере установлена локализация стран Среднего Востока и BiDiMode = bdRightToLeft
СОБЫТИЯ
- OnChange Наступает при изменении меню
- OnPopup Событие происходит непосредственно перед появлением всплывающего меню
-При работе с меню основные события связаны не с самим обънктом меню, а с объектами его разделов типа TMenuItem
Литература: 1, с.54-67.
Контрольные вопросы.
1. Какие свойства использует компонент MainMenu?
2. Какие свойства использует компонент PopupMenu?
3. Какие свойства использует компонент ActionList – диспетчер действий?