Delphi2010 アクションリスト(ActionList)
2010/08/28
メインメニュー、ポップアップメニュー、ツールバー等から機能を選択し実行するプログラムを作成する場合、各項目をクリックした際のイベントハンドラを作成してそこに該当プログラムコードを記述する、という事は定石なのですが、アクションリストを利用する事によって、それを一括管理しましょう、というような事が出来ます。
アクションリストは Delphi6 にもあります。
例えば前頁の「テスト4」に、メインメニューとポップアップメニューをつけて、メモ帳的プログラムではお約束の「切り取り」「コピー」「貼り付け」を付けたいとします。そのため、まずはメインメニューとポップアップメニューを配置します。
メインメニューのメニュー項目を作成します。
ポップアップメニューのメニュー項目を作成します。
Memo1の
PopupMenu
プロパティを「PopupMenu1」にします。
そして各メニュー項目のOnClickイベントハンドラを記述します。
procedure TForm1.N1Click(Sender: TObject);
begin
Memo1.CutToClipboard ;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Memo1.CopyToClipboard ;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Memo1.PasteFromClipboard ;
end;
というのがこれまでの手法ですが、上記の例でも、メニュー項目の
Caption
プロパティの内容を間違えてしまって統一出来ていなかったり、イベントハンドラの指定を忘れてしまうというような事があるかもしれません。
こういう標準的作業を行う場合は、アクションリストを作成すると楽になる場合があります。
[Standard]内の「ActionList」(アクションリスト)を配置します。1つ目なので Nameプロパティは「ActionList1」となります。
↓
「ActionList1」をダブルクリックします。
アクションリストの編集用画面が表示されます。
右クリックをしてポップアップメニューを表示し、
「標準アクションの新規追加」を選択します。
「切り取り」「コピー」「貼り付け」のような、Windowsアプリケーションではよくあるメニュー項目は、標準アクションとして最初から用意されています。「編集」の中にある「TEditCut」をダブルクリックします。
すると、編集カテゴリとして、アクション EditCut1 が追加されます。
同じようにして、「TEditCopy」「TEditPaste」をダブルクリックして追加します。<オブジェクトインスペクタ>を見ると、標準アクションの各プロパティは最初からある程度の定石パターン内容がセットされています。この画面を閉じます。
上記で作成した、各メニュー項目のOnClickイベントハンドラを消します。標準アクションの場合は、標準的な処理は実装されていますので、特別な事をしない限りは自分で記述する必要はありません。
procedure TForm1.N1Click(Sender: TObject);
begin
end;
procedure TForm1.N2Click(Sender: TObject);
begin
end;
procedure TForm1.N3Click(Sender: TObject);
begin
end;
一旦、保存して下さい。そうすると、中身を消した「Procedure」〜「end;」は不要なものとして自動的に消されます。
フォームの表示とプログラムコードの表示は、プロジェクトマネージャの「〜.pas」をダブルクリックするか、「〜.dfm」をダブルクリックするか、で切替出来ます。
「MainMenu1」をダブルクリックします。<オブジェクトインスペクタ>にて
「編集」内の「きりとり」メニュー項目の
Action
プロパティを「EditCut1」にします。メニュー項目の内容(Caption)等が変わったのが確認できます。
↓
同様に「こぴー」を「EditCopy1」に、「はりつけ」を「EditPaste1」にします。
次にポップアップメニューのほうの作業も行います。
「PopupMenu1」をダブルクリックし、<オブジェクトインスペクタ>にて
各メニュー項目の
Action
プロパティを指定します。
↓
それでは保存・コンパイル(再構築)して実行してみます。
プログラムコードは何も記述していませんが、メインメニュー、ポップアップメニューとも、正常に動作しているのが分かると思います。
それではパネルの上にボタンでも配置してみましょう。
↓
ボタンの
Action
プロパティを指定して、保存、コンパイル、実行してみますが、メモ部分を選択して、切り取り・コピー、貼り付けをしても
正常に動作してくれません
。ボタンそのものがフォーカスを取得する事が出来るため、メモにあったフォーカスがボタンにフォーカスが移ってしまい、標準アクションがメモに対して働かないというのが原因のようです。こういった場合、アクションを独自に指定したり、OnClickイベントでそれぞれプログラムコードを記述したり、という事になるかもしれませんが、それよりは、フォーカスを持たない [Additional]頁の[SpeedButton]を利用する方が簡単でしょう。あるいは、ツールバー・クールバーを利用するパターンでしょう。
ここでは使用していませんが、各メニューのアイコンを用意しておいて、イメージリストを追加して登録し、各アイコンの統一・統合管理をするのも良いと思います。
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>
Delphi入門編
>
Delphi2010
▲2010/08/27
2010/08/28
▼2010/08/29
シェアウェア
Script!World
データベース
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.