Программирование в Delphi. Барков И.А - 30 стр.

UptoLike

Составители: 

30
Механизм объединения меню используется серверами OLE, запускаемыми по месту нахожде-
ния объекта OLE. Загружаясь, сервер дописывает осуществляемые им операции к меню другого при-
ложения.
Для того чтобы реализовать объединение меню, у тех форм, меню которых будут присоедине-
ны к главному, установите в True свойство:
(Р1э) property AutoMerge: Boolean;
При этом у главного меню оно должно
оставаться равным False, иначе главное меню будет во-
обще невидимым. Объединение будет происходить автоматически при активизации новых форм или
серверов OLE. Кроме автоматического режима, объединение меню можно выполнить при вызове мето-
да:
procedure Merge(Menu: TMainMenu);
Присоединяемое меню при необходимости может быть легко отсоединено вызовом метода:
procedure Unmerge(Menu: TMainMenu) ;
При установленном в True свойстве AutoMerge ссылка на присоединенное меню будет сохра-
няться в специальном поле компонента и отсоединяться в нужных случаях автоматически (например,
при закрытии формы, которой оно принадлежит).
Объединение меню происходит по специальным правилам, в основе которых лежит использо-
вание группового индекса (свойства Group Index) каждого объекта TMenuItem.
У пунктов меню одного уровня, в частности всех подменю верхнего уровня в главном меню,
свойство Grouplndex является
неубывающим, т. е. у последующего пункта групповой индекс больше
либо равен индексу предыдущего. Это требование отслеживается как на этапе разработки, так и на эта-
пе исполнения. Например, пусть пункты меню имеют индексы О, 3, 4, 5, 6. Если вы включите пункт
меню с индексом 5 между пунктами с индексами 0 и 3, то 3
и 4 будут изменены на 5.
А вот изменить большее значение Х на меньшее Y, если впереди есть
пункты с индексом, большим Y, невозможно. Если в этом примере попытаться изменить индекс 6 на 4,
то это приведет к возникновению исключительной ситуации EMenuError.
Для обычных форм объединение происходит только на верхнем уровне в главном меню во вре-
мя их активизации. В объединенном меню
все подменю будут располагаться по возрастанию номера
группового индекса, при этом:
если в присоединяемом меню есть пункты с таким же групповым индексом, что и в исходном,
то все их множество заменяет все множество таких пунктов в исходном меню;
все пункты присоединяемого меню, групповой индекс которых не встречается в исходном,
добавляются к нему и вставляются на соответствующие их индексу места.
К окнам интерфейса MDI все сказанное относится только при запуске приложения. Если в
формах приложения со стилем fsMDIChild есть свои главные меню, то в этот момент они автоматиче-
ски сольются с главным меню формы fsMDIForm независимо от состояния AutoMerge.
На уровне работы с серверами OLE предусмотрены
дополнительные возможности по объеди-
нению меню. Если в компонент TOLEContainer загружен объект OLE, то в конец подменю Edit обычно
добавляется подменю, из которого можно вызвать функции открытия и редактирования этого объекта.
После активизации сервера он может не только вставлять свои подменю в главное, но и добавлять но-
вые пункты к уже существующим подменю.
Три метода TMainMenu используются для работы с меню OLE:
procedure PopulateOle2Menu(SharedMenu: HMenu; Groups:array of Integer; var Widths: array of
Longint);
procedure GetOle2AcceleratorTable(var hAccel : THandle;
var numAccels: Word; Groups: array of Integer) ;
procedure Set01e2MenuHandle(Handle: HMENU);
Конструктор меню Delphi поможет значительно упростить разработку меню. В нем имеются
готовые шаблоны типовых подменю верхнего уровня: File, Edit и др; пример их использования см. в
проекте DEMOEDIT на дискете, прилагаемой к книге. Можно также определить свои шаблоны.
Компонент TPopupMenu
        • Механизм объединения меню используется серверами OLE, запускаемыми по месту нахожде-
ния объекта OLE. Загружаясь, сервер дописывает осуществляемые им операции к меню другого при-
ложения.
        Для того чтобы реализовать объединение меню, у тех форм, меню которых будут присоедине-
ны к главному, установите в True свойство:
        (Р1э) property AutoMerge: Boolean;
        При этом у главного меню оно должно оставаться равным False, иначе главное меню будет во-
обще невидимым. Объединение будет происходить автоматически при активизации новых форм или
серверов OLE. Кроме автоматического режима, объединение меню можно выполнить при вызове мето-
да:
        procedure Merge(Menu: TMainMenu);
        Присоединяемое меню при необходимости может быть легко отсоединено вызовом метода:
        procedure Unmerge(Menu: TMainMenu) ;
        При установленном в True свойстве AutoMerge ссылка на присоединенное меню будет сохра-
няться в специальном поле компонента и отсоединяться в нужных случаях автоматически (например,
при закрытии формы, которой оно принадлежит).
        Объединение меню происходит по специальным правилам, в основе которых лежит использо-
вание группового индекса (свойства Group Index) каждого объекта TMenuItem.
        У пунктов меню одного уровня, в частности всех подменю верхнего уровня в главном меню,
свойство Grouplndex является неубывающим, т. е. у последующего пункта групповой индекс больше
либо равен индексу предыдущего. Это требование отслеживается как на этапе разработки, так и на эта-
пе исполнения. Например, пусть пункты меню имеют индексы О, 3, 4, 5, 6. Если вы включите пункт
меню с индексом 5 между пунктами с индексами 0 и 3, то 3
        и 4 будут изменены на 5. А вот изменить большее значение Х на меньшее Y, если впереди есть
пункты с индексом, большим Y, невозможно. Если в этом примере попытаться изменить индекс 6 на 4,
то это приведет к возникновению исключительной ситуации EMenuError.
        Для обычных форм объединение происходит только на верхнем уровне в главном меню во вре-
мя их активизации. В объединенном меню все подменю будут располагаться по возрастанию номера
группового индекса, при этом:
        • если в присоединяемом меню есть пункты с таким же групповым индексом, что и в исходном,
то все их множество заменяет все множество таких пунктов в исходном меню;
        • все пункты присоединяемого меню, групповой индекс которых не встречается в исходном,
добавляются к нему и вставляются на соответствующие их индексу места.
        К окнам интерфейса MDI все сказанное относится только при запуске приложения. Если в
формах приложения со стилем fsMDIChild есть свои главные меню, то в этот момент они автоматиче-
ски сольются с главным меню формы fsMDIForm независимо от состояния AutoMerge.
        На уровне работы с серверами OLE предусмотрены дополнительные возможности по объеди-
нению меню. Если в компонент TOLEContainer загружен объект OLE, то в конец подменю Edit обычно
добавляется подменю, из которого можно вызвать функции открытия и редактирования этого объекта.
После активизации сервера он может не только вставлять свои подменю в главное, но и добавлять но-
вые пункты к уже существующим подменю.
        Три метода TMainMenu используются для работы с меню OLE:
        procedure PopulateOle2Menu(SharedMenu: HMenu; Groups:array of Integer; var Widths: array of
Longint);
        procedure GetOle2AcceleratorTable(var hAccel : THandle;
        var numAccels: Word; Groups: array of Integer) ;
        procedure Set01e2MenuHandle(Handle: HMENU);
        Конструктор меню Delphi поможет значительно упростить разработку меню. В нем имеются
готовые шаблоны типовых подменю верхнего уровня: File, Edit и др; пример их использования см. в
проекте DEMOEDIT на дискете, прилагаемой к книге. Можно также определить свои шаблоны.

                                         Компонент TPopupMenu



                                                30