[BlueLeaf1336]> PROGRAM>

メニューを右寄せにする

historyTOP

2005/02/11:作成

overviewTOP

Windowsのメニューでは、多分見たことがないんですが、Macintoshのてっぺんにあるメニューは、左側と右側に分かれてメニューが表示されています(少なくとも漢字Talk7.5ではそうでした)。Windowsでもできないものかと調べてみると、Borland - Delphi Q&A にこんな記述がありました。

ちょっと試してみましたが、駄目のようです。動きません。「該当するバージョン:Delphi 1.0」というのは、ウソではないようです。

このときは諦めてしまったのですが、全く別のことを調べている最中にこんなサイトを見つけました。

さらに、このページのほぼ一番下にあるリンクを辿ると(上記サイトにも記述があるのですが、すでにオリジナルのページはGoogleからも失われていて、Welcome to The Internet Archive Wayback Machineで辿るしかないのですが)、見事に発見しました。

そのまま翻訳TOP

何も考えずにDelphiに翻訳したのが次のコードです。

//  ===========================================================================
//  メニューを右寄せする
//  http://web.archive.org/web/20040220034132/(続く)
//  http://www.bekkoame.ne.jp/~ilgg/VBMain/VB/Menu/RightMenu.html
//  ===========================================================================
procedure MoveHelpMenuToRight(FormHandle: HWND; MenuPos: integer);
const
    MAX_MENU_LEN = 256;
var
    MenuHandle: HMENU;
    SubMenuHdl: HMENU;
    Buf: string;
begin
    //  メニューハンドル取得
    MenuHandle := GetMenu(FormHandle);
    if (MenuHandle <> INVALID_HANDLE_VALUE) then
    begin
        //  サブメニューハンドル
        SubMenuHdl := GetSubMenu(MenuHandle, MenuPos);
        if (SubMenuHdl <> INVALID_HANDLE_VALUE) then
        begin
            //  メニュー文字列を取得(設計時は256文字で斬られました)
            SetLength(Buf, MAX_MENU_LEN);
            GetMenuString(MenuHandle, MenuPos, @Buf[1], MAX_MENU_LEN, MF_BYPOSITION);
            //  右寄せ
            ModifyMenu(MenuHandle, MenuPos, MF_BYPOSITION or MF_POPUP or MF_HELP,
                        SubMenuHdl, PChar(Buf));
        end;
    end;
end;

//  ===========================================================================
//  テスト
procedure TForm1.FormCreate(Sender: TObject);
begin
//    Help1.Caption := #8 + Help1.Caption;
    MoveHelpMenuToRight(Self.Handle, 3);
//    MoveHelpMenuToRight(Self.Handle, 4);
end;

FormCreateで、左から数えて4番目(0,1,2,3(0基準)と数えた場合の3番目)のメニューを右寄せにしてみました。右寄せさせたメニューよりも更に右にあるメニューは、自動的に押しやられて右に寄るようです。見事です。
20050211alrightmenu.zip(162,241bytes)

参考にさせていただいたサイトが閉鎖中というのは、本当にもったいないです。復帰を楽しみにしています。

EOFTOP