Идёт загрузка страницы...

htp://aptem.net.ru





Пункт меню "Помощь" в правой части окна

Пример помещения корневого пункта меню в правую часть окна:


    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]