history | TOP |
2005/02/11:作成
overview | TOP |
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)
参考にさせていただいたサイトが閉鎖中というのは、本当にもったいないです。復帰を楽しみにしています。
EOF | TOP |