|
ActionManager コンポーネントは、ActionList をさらに拡張したコンポーネントでアクションだけでなく、ActionMainMenuBar
や ActionToolBar と併用することで UI のレイアウト管理も行うことができます。
ActionManagerの使い方
 フォーム上に ActionManager
を配置します。このコンポーネントは ActionList と同じく非ビジュアルコンポーネントです。 配置した ActionManager
をダブルクリックすると編集ダイアログが表示されます。ここで個々のアクションを定義します。追加されるアクションは TAction
型なので他のビジュアルコンポーネントの Action プロパティに使用することもできます。 ActionList 同様、カテゴリを定義するとアクションをグルーピングすることができます。この場合、オブジェクトツリーでもグループ化されて表示されます。また、ActionMainMenuBar
はカテゴリ単位にすばやくメニューを構築できるので、メニューを振り分けるイメージでカテゴリを分けておくと後々楽になります。
UIの構築
次に ActionMainMenuBar と ActionToolBar をフォームに配置します。これらは ToolBar
コンポーネントのように画面上部に貼り付きます。CoolBar や ControlBar などの上に配置すると Delphi
の IDE 風になります。従来の ActionList + ToolBar だとここで ToolButton を作成してそれに
Action を割り当てていました。 ActionManager ではいちいち ToolButton の作成などせずに直接
Action をツールバーにドロップすることでボタンを作成します。メニューも同じです。メニューやツールバーのセパレータはオブジェクトツリーから作成できます。
UI をカスタマイズ可能にする
次にユーザーがボタンの表示非表示、位置などをカスタマイズできるようにします。これは
CustomizeDlg コンポーネントを使います。フォーム上に CustomizeDlg を配置し ActionManager
プロパティに先ほど配置した ActionManager を指定します。次にカスタマイズダイアログを表示するためのイベントを記述します。たとえば
Button クリック時に表示するなら以下のようになります。
procedure TForm1.Button1Click(Sender: TObject);
begin
CustomizeDlg1.Show;
end;
|
CustomizeDialog
の Show メソッドはカスタマイズダイアログを表示するメソッドです。ダイアログは ActionManager 編集ダイアログと同じものが表示され、これを使うことでユーザーは
UI のカスタマイズができるようになります。また、ダイアログを表示した状態でツールバーのボタンやメニュー項目をドラッグすることで並べ替えが可能になります。しかし、これらの情報は次回起動時には復元されません。開発者が
UI 情報の保存、および読み込みをプログラミングしなければなりません。が、これもめちゃくちゃ簡単です。 ActionManager
の FileName プロパティにこれらの情報を保存するファイル名を指定するだけです。FileName プロパティを設定しておけば起動時、終了時に自動でレイアウト情報を読み書きします。保存、読み込みを手動で行いたいときは
ActionManager の SaveToFile 、 LoadFromFile メソッドを使います。
優先度の低い項目を非表示にする
次に優先度の低い項目を非表示にする方法です。各アクション項目は自分が呼び出された回数をカウントしており、アプリケーション起動回数と、自分が呼ばれた回数
( 実際は自分が最後に呼ばれた時のアプリケーションの起動回数 ) を記憶しています。 デフォルトの状態で ActionManager
の FileName プロパティにファイル名を設定している場合は1回目の起動ですべての項目が表示され、次回起動時に前回使われなかった項目が非表示になります。重要な項目を非表示しないようにするにはオブジェクトツリーから該当項目
( TActionClient 型 ) を選択し、UsageCount プロパティに -1 をセットします。最初から非表示を有効にする場合はオブジェクトツリーから
ActionBars を選び、 SessionCount プロパティに 2 をセットします。 UsageCount はアクションが呼ばれた回数、
SessionCount プロパティはアプリケーションの起動回数です。アプリケーションが3回目起動した時に 1 回も起動されなかった項目は非表示になります。
この辺はヘルプの TCustomActionManager.PrioritySchedule にも記述されています。 |