Sign in Join
Wiki copytemporary

TPopupMenu/ja: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TPopupMenu/ja

OldNewLine
1+**TPopupMenu** ![](/wiki-images/e/e4/Tpopupmenu.png)はマウスの右ボタンがクリックされるとポップアップするメニューパネルである。
2+
3+これは目に見えないコンポーネントで、即ち、もし[[Component Palette/ja|コンポーネントパレットの]][[Standard tab/ja|Standardタブから]]選ばれ、フォームの上に置かれたとき、ランタイムに現れない。その代わり、メニューエディタによって構造定義されたメニューバーが現れる。
4+
5+Menu Editorを見るには、Main Menuアイコンをフォーム上で右クリックする。
6+
7+## ポップアップメニューを作る
8+
9+以下の道筋で、[[TForm|Formコンポーネントにポップアップメニューの]]追加の仕方を示す:
10+
11+- 新しい[[Form Tutorial/ja|GUIアプリケーションを]]作り、[[TImage/ja|TImageをそのフォームに]]挿入する。このため、コンポーネントパレット*Additional*でTImageを選択し、フォームの上でクリックする。これで*Image1*の名前でTImageがフォーム上に配置される。
12+- オブジェクトインスペクタに移動(*Image1*であるはずだ)し、*Align*プロパティを選択する。隣のコンボボックスで*alClient*を1列に調節する(Image1はフォームのサイズに調節される)。
13+- フォームの上にTPopupMenu(stanndardタブ)を配置する(もし可能なら「Image1」上に、そうすればこれが画像に1つとわかる)。コンポーネント*PopupMenu1*は(ドロップダウンメニューとコンポーネントの名前の表示と直角に)フォーム上に表示される。
14+- 「PopupMenu1」を右クリックすると、ポップアップメニューが現れる。最初の項目 **Menu Editor**をクリック
15+- *New Item1*のキャプションでメニューアイテムがすでに作られており、メニューエディタウィンドウで開く。おそらくこれを変更したいだろう、そのためにはクリックし、オブジェクトインスペクタに移動する。
16+- オブジェクトインスペクタでMenuItem1から何かふさわしい名前にするためNameプロパティを変更する。これをLoadメニューと呼ぶことにする。そこでNameを**popLoad**とタイプし、エンターを押す。
17+- New Item1より、ましなものとしたい、そこでCaptionプロパティに行き**Load**とタイプし、エンターを押す。
18+- さらにもう1つの入力項目がある。メニューエディタウインドウに戻り、*Load*を右クリックする。ポップアップメニューが現れる。
19+- Insert *New Item After*をクリックすると、*New Item2*という名前の新たなメニューが現れる。前の2つのアイテムで説明した通り、この名前を**popStretch**、キャプションを**Stretched**へとオブジェクトインスペクタで変更する。
20+- メニューへの入り口を忘れていることに気づくが、悪いことではない、メニューエディタに戻る。**Load**を右クリックするか、**Insert New Item (after)**をクリック、または**Stretched**で右クリックし、**Insert New Item (before)**をクリックする。
21+- キャプションを**Centered**名前を**popCenter**変更する。
22+- 必要なそれぞれのメニューアイテムが終端で閉じるようにメニューエディタで調節する。
23+- すべてのメニューを加えたとき、どのコンポーネントが結び付くべきかまだ設定しなければならない。この場合、これはフォームに最初に配置したTImage、*Image1*であるべきである。
24+- フォーム上の*Image1*を選択し、オブジェクトインスペクタのプロパティ**PopupMenu**へ移動する。そこで、隣のコンボボックスの*PopupMenu1*を選択する。
25+- 実行中は画像を右クリックするといつもポップアップメニューが現れるだろう。
26+
27+これで実行中メニューが現れ、ユーザーがメニューをクリックすることが可能となる。これは実際何もしない。何かをするメニューアイテムを作るには、それぞれのメニューについてクリックに反応する[[Event order|eventsを]]加えなければならない。
28+
29+以下にオブジェクトインスペクタを用いてメニュークリックイベントの編集の仕方を説明する。
30+
31+## 実際に何かをするメニューを作る
32+
33+- メニューエディタにもどり、クリックして**Load**メニューアイテムをクリックして選択する。そしてオブジェクトインスペクタウインドウへ移動し、**events**タブを選択する。変えたいイベントだけを変える、それは今、空の*OnClick*である。もし用いるべき[[Event order|EventHandlerをすでに]]持っているなら、それらを使うことができるし、それに応じて選択することもできる、さもなくば、Lazarusで作ることもできる。右側に3つの点があるボタンがある。クリックする。そうすると新しいプロシージャ(新しく生成したイベントハンドラ)がコードの中に生成され、ソーステキストエディタに対する変化が見て取れる。このプロシージャはこのように見えるだろう:
34+
35+``` pascal
36+procedure TForm1.popLoadClick(Sender: TObject);
37+begin
38+
39+end;
40+```
41+
42+- **begin**と**end**間にメニューエントリ*Load*に対するコードを挿入することができる。
43+
44+この場合フォームの上にTOpenDialogコントロールを挿入し、この目的ンために標準ダイアログを使うことができるだろう:
45+
46+- そのため、[[TOpenDialog|TOpenDialogコントロールをフォームに]]入れ(コンポーネントパレット ダイアログ)、その名前は*OpenDialog1*である。プロシージャを以下に変更する:
47+
48+``` pascal
49+procedure TForm1.popLoadClick(Sender: TObject);
50+begin
51+ if OpenDialog1.Execute then //ファイルが選択された場合のみ
52+ try //try
53+ Image1.Picture.LoadFromFile(OpenDialog1.Filename); //そのファイルを読み込む
54+ except
55+ end;
56+end;
57+```
58+
59+- 他のメニューアイテムも同様のプロシージャで、それぞれのイベントハンドラを作り、以下のコードを挿入する:
60+
61+``` pascal
62+procedure TForm1.popStretchClick(Sender: TObject);
63+begin
64+ popStretch.Checked := not popStretch.Checked; //マーク/チェック on/off
65+ Image1.Stretch := popStretch.Checked; //Image1 引き伸ばし yes/no
66+end;
67+
68+procedure TForm1.popCenterClick(Sender: TObject);
69+begin
70+ popCenter.Checked := not popCenter.Checked; //マーク/チェック on/off
71+ Image1.Center := popCenter.Checked; //Image1 中央配置 yes/no
72+end;
73+```
74+
75+- これで、このサンプルを<span class="kbd">F9</span>で実行し、右クリックでポップアップメニューが開き、*Load*をクリックする。すると選んだ画像が読み込まれる。画像を取り込んだら、他のメニューエントリを試してみよう。
76+
77+## 自己ポップアップ
78+
79+特定のコンポーネント、異なるイベントでは右クリックでポップアップを表示させたくない場合があるかもしれない。その時は**`PopupMenu.PopUp`**を実行することができる。
80+
81+簡単な例:
82+
83+- 新しい[[Form Tutorial|GUI applicationを]]作り、そのフォームにTPopupMenu *PopupMenu1*と[[TButton]] *Button1*を加える。
84+- 新しいメニューエントリ*PopupMenu1* ([[TPopupMenu|Creating a PopupMenuを]]見ること)。
85+- *Button1*のOnClickイベントを作成し、以下のコードを書く:
86+
87+``` pascal
88+procedure TForm1.Button1Click(Sender: TObject);
89+begin
90+ PopupMenu1.PopUp; //ポップアップメニューを表示
91+end;
92+```
93+
94+- プログラムを実行すると、ボタンをクリックすることにより、ポップアップメニューが呼ばれる。
95+
96+## ポップアップメニューの結果
97+
98+同じポップアップメニューは、ポップアップの呼び出し元を取り戻すため、*PopupComponent*を用いて複合コントロールにより使うことができる。
99+
100+``` pascal
101+...
102+Uses
103+... Clipbrd...
104+
105+procedure TfrmIniPrevMain.pmnuMenuItem1Click(Sender: TObject);
106+begin
107+ if pmnuMenuItem1.PopupComponent.ClassType = TMemo then
108+ begin
109+ Clipboard.AsText := TMemo(pmnuClipBoard.PopupComponent).Text;
110+ end;
111+ if pmnuClipBoard.PopupComponent.ClassType = TEdit then
112+ begin
113+ Clipboard.AsText := TEdit (pmnuClipBoard.PopupComponent).Text;
114+ end;
115+end;
116+```
117+
118+## 以下も参照のこと
119+
120+- [[doc:lcl/menus/tpopupmenu.html|TPopupMenu doc]]
121+- [[TMainMenu]]
122+
123+---
124+*From the Free Pascal wiki, page "TPopupMenu/ja", as it stood on 2024-03-20 after a change by Ariben, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history