掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ビットマップ付きのメニューでショートカットに下線をつけるには? (ID:2019)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> MenuItemの中にImageListから読み込んだ画像、 > Captionのテキスト、ショートカットの文字を描かなければ > いけないですよね。しかも位置も考えながら。 位置は、キャプションは左寄せ、ショートカットは右寄せするだけでOKでしょう。 画像の大きさは16x16のはずですから、縦方向ではそれが中心になるようにしてやれば問題ないです。 標準的でないメニューを書く場合は、OnMeasureItemでサイズを確定させて、その最大にあわせて書けばいいだけです。こっちは少し面倒ですけどね。 今回の場合は、ざっと書くとこんな感じです。 難しいですか? どのあたりが難しいかおっしゃっていただければ、説明いたします。 # 対象は、PopDownするメニューです。メニューバーに直接表示されるTMenuItemだと、画像分ずれてしまうし、マウスが重なったときの枠が出なくなります procedure TForm1.MenuItemDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); const PADDING_WIDTH = 2; PADDING_RIGHT = 12; var AMenuItem: TMenuItem; ACaption, AShortcutText: String; LeftImage_width: integer; begin // 背景を埋める ACanvas.FillRect(ARect); // 画像は後から書くので、画像と隙間分足しておく LeftImage_width := ImageList1.Width + PADDING_WIDTH * 2; ARect.Right := ARect.Right - PADDING_RIGHT; ARect.Left := ARect.Left + LeftImage_width; //対象メニューと、キャプション・ショートカット名 AMenuItem := Sender As TMenuItem; ACaption := AMenuItem.Caption; AShortcutText := ShortCutToText(AMenuItem.ShortCut); // 左寄せでキャプションを描画 DrawTextEx( ACanvas.Handle, PChar(ACaption), Length(ACaption), ARect, DT_LEFT Or DT_VCENTER Or DT_SINGLELINE, nil); // 右寄せでショートカット名を描画 DrawTextEx( ACanvas.Handle, PChar(AShortcutText), Length(AShortcutText), ARect, DT_RIGHT Or DT_VCENTER Or DT_SINGLELINE, nil); // 画像が設定されていれば、画像を描画 if AMenuItem.ImageIndex >= 0 then ImageList1.Draw(ACanvas, ARect.Left - LeftImage_width, ARect.Top + ((ARect.Bottom - ARect.Top) - ImageList1.Height) div 2, AMenuItem.ImageIndex, AMenuItem.Enabled); end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.