| 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 |