Пример помещения корневого пункта меню в правую часть окна:
unit ODMenuU; interface uses SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TForm1 = class(TForm) MainMenu1: TMainMenu; FileItem1: TMenuItem; ExitItem1: TMenuItem; HelpItem1: TMenuItem; About1: TMenuItem; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin { Перемещаем корневой пункт меню "Помощь" в правую часть окна } { Windows 95/NT 4 поддерживают это таким образом ... } {$IFNDEF ALTERNATIVEWAY} ModifyMenu(MainMenu1.Handle, 1, mf_ByPosition or mf_Popup or mf_Help, HelpItem1.Handle, '&Помощь'); {$ELSE} { ... а Win 3.xx таким образом: } HelpItem1.Caption := #8 + HelpItem1.Caption; {$ENDIF} end; end. |
Это все! Просто? :)
Даже несмотря на то, что Microsoft в Windows Styles Guides говорит о недопустимости правого расположения пунктов меню, вы наперекор этому можете это сделать. Вам необходимо проверить файл электронной справки с описанием второго и третьего параметров функций GetMenuItemInfo и SetMenuItemInfo.
procedure TForm1.FormCreate(Sender: TObject); var MMI: TMenuItemInfo; MyMenu: hMenu; Buffer: array[0..79] of Char; begin MyMenu := GetMenu(Handle); // Handle является дескриптором формы, содержащей меню MMI.cbSize := SizeOf(MMI); MMI.fMask := MIIM_TYPE; MMI.dwTypeData := Buffer; MMI.cch := SizeOf(Buffer); GetMenuItemInfo(MyMenu, 1, True, MMI); // (..., 1, True, ...) означает что "Помощь" является вторым пунктом меню. MMI.fType := MMI.fType or MFT_RIGHTJUSTIFY; SetMenuItemInfo(MyMenu, 1, True, MMI); end; |
И сразу после опубликования совета пришло мне письмо:
Все хорошо, но мне кажется правильнее так: (Меню постоянно меняется, и помнить о индексе?? Зачем, наименование не изменно, заголовок как правило тоже...)
procedure TForm1.FormCreate(Sender: TObject); begin { Перемещаем корневой пункт меню "Помощь" в правую часть окна } { Windows 95/NT 4 поддерживают это таким образом ... } {$IFNDEF ALTERNATIVEWAY} ModifyMenu(MainMenu1.Handle, 1, mf_ByPosition or mf_Popup or mf_Help, >>> ModifyMenu(MainMenu1.Handle, HelpItem1.MenuIndex, mf_ByPosition or mf_Popup or mf_Help, (мнение автора) HelpItem1.Handle, '&Помощь'); {$ELSE} { ... а Win 3.xx таким образом: } HelpItem1.Caption := #8 + HelpItem1.Caption; {$ENDIF} end; |
С уважением, Вадим В. Приставко, pristavko@writeme.com Кольская АЭС [000178]