Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2015年01月08日] [更新 2015年01月08日] Delphi 一般・その他
ポップアップメニュー
動作確認等 -
[整理番号 - 0950]







01_ポップアップメニューは、マウスの右ボタンクリックで表示


下の図を見てください。
デスクトップにメニューが現れています。このようなメニューを「ポップアップメニュー」と言っています。ポップアップメニューは、通常、マウスの右ボタンをクリックすると表示されるようになっています。また、ショートカットキー等の操作で表示することもあります。
アプリケーション、あるいはアプリケーションの操作内容に応じたポップアップメニューを表示することがあります。ポップアップメニューは、常に最前面に表示されます。

以上のことは、エンドユーザはともかく、Delphi を使用して Windows のアプリケーションを開発するプログラマーにとっては必須の知識であると思われます。



図1
ポップアップメニューの例
  • 通常は、マウスの右ボタンクリックで表示する
  • メニューのウィンドウの左上が表示開始位置のマウスの場所

ポップアップ (pop-up) は、ポンと飛び出ること、あるいは、ポンと飛び上がる、という意味で使用されています。
「ポップアップ広告」等のようにも使用されています。「ポップコーン」というスナック菓子があります。これは作る時に、コーンが飛び上がるようになる状態を意味していると思われます。



[備考 1]
ウィンドウ上部のメニューをクリック (あるいはキー操作) して表示されるメニューのことを、プルダウンメニューと言うことがあります。


[備考 2]
筆者の場合、Windows のアプリのエンドユーザに「ポップアップメニュー」という用語は使用しないようにしています。「クリックは、特に断らない限り、マウスの左ボタン」、ポップアップメニューの場合は「マウスの右ボタンをクリックしてください」という説明にしています。
「ポップアップメニューを表示してください」では理解できないユーザがいます。





02_Delphi でポップアップメニューを実装 - TPopupMenu コンポ


Delphi で開発するアプリケーションにも、このポップアップメニューを実装することができます。
コンポーネントパレットの [Standard] タブに、TPopupMenu という非ビジュアルコンポーネントがあります。これを使用します。

TEdit や TMemo 等のコントロールをフォーム配置すると、マウスの右ボタンクリックでは既定のポップアップメニューが表示されます。このメニューからコピーや貼り付けができますが、[Ctrl] + [C] とか [Ctr;] + [V} 等のショートカットは機能しません。
PopupMenu プロパティに TPopupMenu コンポーネントを指定すればその TPopupMenu がポップアップメニューとして使用されます。TPopupMenue コンポーネントで項目を設定して、ショートカットキーを定義すれば、ショートカットによる操作が可能になります。
TPopupMenu に何も項目を設定していない場合、ポップアップメニューは表示されません。

アプリケーションでは、TPopupMenue コンポーネント単独ではなく、TActionList や TActionManager と組み合せて使用することがあります。






03_ポップアップメニューとコンテキストメニュー


コンテキストメニューという用語があります。
コンテキスト (context) は、直訳すると「文脈、状況や関係」ですが、この用語が使用される分野によって意味が異なります。例えば、デバイスコンテキストは、多くの場合、そのデバイスの持つ情報、制御内容あるいは、そのデバイスのオブジェクト等の意味で使われているようです。
一方、コンテキストメニューは、状況に応じたメニュー等の意味で使用されています。一般的に、コンテキストメニューは、ポップアップ形式のメニューです。






04_ポップアップメニューを描画関係イベントでカスタマイズ


Delphi の TPopupMenu のメニュー項目はカスタマイズできます。
テキスト (文字列) も画像も「描画」することにより画面に表示されます。したがって、多くの描画関係のコンポーネント、コントロールと同じように、描画関係のメソッド、あるいはイベントを利用することで、描画のカスタマイズが可能です。

下図は、少し複雑な例ですが、メニューの項目を画像にするだけでなく、複数の画像にしています。そして、それらの各々の画像クリックを検出できるようにしています。



図2
メニュー項目のカスタマイズの例