- 締切済み
Delphiでヘルプメニューを右端に
Delphi XE5を使っています。 ヘルプメニューを右端につけて、クリックしたらいくつかのサブメニューが表示され、そこから選択するようにしたいのですが、なにか方法がありますか? メニューがヘルプだけなので、普通のメニューだと左端になって使いにくいです。 右クリックで表示するメニューは、たまに使うユーザーにはわかりにくいでしょうし...
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 山本 隆(@tyamamoto)
- ベストアンサー率60% (12/20)
Delphi XE5では、マルチプラットフォームで動作するFireMonkeyアプリケーション(FireMonkeyデスクトップアプリケーションやFireMonkeyモバイルアプリケーションなど)と、Windowsでのみ動作するVCLアプリケーション(VCL Metropolis UIアプリケーション・VCLフォームアプリケーション)を作成できます。 メニューの「ファイル」→「新規作成」→「その他」→「Delphiプロジェクト」で確認できます。 紹介したコードはVCLフォームアプリケーションで使用できます。 メニューの「プロジェクト」→「オプション」→「アプリケーション」→「表示」を選択すると、スタイルを設定することができます。 スタイルを設定すると、紹介したコードは機能しません。
- 山本 隆(@tyamamoto)
- ベストアンサー率60% (12/20)
VCLフォームアプリケーションでVCLスタイルを使用していない場合は、次のようなコードでメニュー項目を右寄せにできます。 procedure TForm1.FormCreate(Sender: TObject); var MainMenu: HMENU; MenuItemInfo: TMenuItemInfo; Buffer:array[0..79] of Char; begin MainMenu := MainMenu1.Handle; MenuItemInfo.cbSize:=SizeOf(MenuItemInfo); MenuItemInfo.fMask := MIIM_TYPE; MenuItemInfo.dwTypeData := Buffer; MenuItemInfo.cch := SizeOf(Buffer); GetMenuItemInfo(MainMenu, MenuItemHelp.Command, False, MenuItemInfo); MenuItemInfo.fType := MenuItemInfo.fType or MFT_RIGHTJUSTIFY; SetMenuItemInfo(MainMenu, MenuItemHelp.Command, False, MenuItemInfo); end; MainMenu1はTMainMenu、MenuItemHelpは右寄せにするTMenuItemのNameです。
補足
回答ありがとうございます。 >VCLフォームアプリケーションでVCLスタイルを使用していない場合は、... これはどこで設定するのでしょうか? いろいろ調べてみたのですが、よくわかりません。 お手数ですがよろしくお願いします。
補足
お手数をおかけして申し訳ありません。 動作確認のため、メニューだけのアプリケーションを作ってみたのですが、メニューは左端のままです。 新規作成で、VCLフォームアプリケーションを選択しています。 各メニューを追加し、@部分を変更しています。 ------------------------------------------ unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus; type TForm1 = class(TForm) MainMenu1: TMainMenu; Help1: TMenuItem; HelpEnglish1: TMenuItem; HelpJapanese1: TMenuItem; Contactus1: TMenuItem; Supportsite1: TMenuItem; Version1: TMenuItem; private { Private 宣言 } public procedure FormCreate(Sender: TObject); { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var MainMenu: HMENU; MenuItemInfo: TMenuItemInfo; Buffer:array[0..79] of Char; begin MainMenu := MainMenu1.Handle; MenuItemInfo.cbSize:=SizeOf(MenuItemInfo); MenuItemInfo.fMask := MIIM_TYPE; MenuItemInfo.dwTypeData := Buffer; MenuItemInfo.cch := SizeOf(Buffer); GetMenuItemInfo(MainMenu, Help1.Command, False, MenuItemInfo);@ここを変更(Help1.Commandに変更、HelpEnglish1.CommandでもNG)。 MenuItemInfo.fType := MenuItemInfo.fType or MFT_RIGHTJUSTIFY; SetMenuItemInfo(MainMenu, Help1.Command, False, MenuItemInfo); end; end.