原文 http://homepages.borland.com/strefethen/index.php?pagename=Main.ActionBandFAQ
現在 http://www.stevetrefethen.com/wiki/Delphi%20ActionBand%20FAQ.ashx
ライセンスはCreative Commons Attribution-Noncommercial-Share Alike 3.0 United States License だそうです。リンク先で確認してください。
セパレーターをActionBandへ追加するには、どうすれば良いですか?
ActionBandsの最新アップデートでは、セパレーターをActionBandsへ追加する、新しい仕組みが追加されました。Customizeダイアログの下部にボタンがあります。ドラッグ&ドロップするだけで、ActionBandにセパレーターを追加出来ます。手動でTActionToolBarへセパレーターを追加するには、以下のようにします。
既に項目のあるActionToolBarの場合
- ActionToolBar上の項目のひとつをクリックしましょう。矢印キーを使用して、セパレータを追加したい場所を選びましょう
- Insertキーを押しましょう。Barに新しい項目を追加します
- Captionに、"-" を設定しましょう
TActionMainMenuBarへセパレーターを挿入するためには、以下のようにします。
- トップレベルのメニューの1つをクリックしましょう
- キーボードやマウスを使用して、セパレーターを追加したい場所を選びましょう
- "-" キーを押して、セパレーターを追加しましょう
オブジェクト・ツリービューを使用する方法もあります。TActionManager.ActionBandsノードに移動し、セパレータを追加する場所を選びましょう。新しい項目を追加し、Captionを"-" にしましょう。
追加情報:設計時にActionBand上の項目を選択し、Ctrlキーを押せば、矢印キーで項目の場所を移動できます。
Outlook風のActionToolBarを作るには、どうすれば良いですか?
http://www.geocities.com/delphihelp/info/ABExpressTutorial.htm を参照しましょう。
(アーカイブは http://web.archive.org/web/20021106111358/http://www.geocities.com/delphihelp/info/ABExpressTutorial.htm )
(追記)http://www.google.com でactionband outlook style を検索すると良いです。
TActionMainMenuBarにサブメニューを作成するには、どうすれば良いですか?
これは、TActionMainMenuBarにサブメニューを作成する例です。
- ファイル|新規作成|アプリケーションを選択しましょう
- 以下のコンポーネントを置きましょう:TActionManager、TActionMainMenuBar
- ActionManagerコンポーネントをダブルクリックして、Customizeダイアログを開きましょう。
- CtrlキーとInsertキーを押して、標準アクション・ダイアログを表示しましょう(または新規アクション・ボタンのドロップダウン・ボタンをクリックして、標準アクションの新規追加を選択しましょう)
- ファイルと編集カテゴリのアクションを全て選択し、OKをクリックしましょう
- ファイル・カテゴリをクリックし、TActionMainMenuBar上へドラッグしましょう
サブメニューを作成する方法は以下の通りです。
- 編集カテゴリをクリックし、ActionMainMenuBarのファイル項目へドラッグしましょう。ファイル・メニューが開きますので、編集カテゴリをドロップし、編集サブメニューを作成しましょう。
- ファイル項目をクリックし、キーボードを使用して、サブメニューを作成したい位置へスクロールしましょう。Insertキーを押して、新規項目を追加し、Ctrlキーと右矢印キーを押して、サブメニューを作成しましょう。
(追記)http://groups.google.com で actionband create tactionmainmenubar submenu を検索すると良いです。
IDEでActionBandメニューを編集する場合、使用できるキーは何ですか?
設計時にTActionMainMenuBar上で、使用できるキー(Delphi/BCB IDE)は以下の通りです
キーと機能
Insert・・・新規項目を追加
Ctrl+Right・・・新規項目で、サブメニューを作成
Ctrl+Up/Ctrl+Down・・・項目を上下移動
Home・・・メニューの最初の項目を選択
End・・・最後の項目を選択
(追記)http://groups.google.com で %green%key IDE actionband を検索すると良いです。
最近使用したファイルを表示するメニューを作成するには、どうすれば良いですか?
デモがあります。ActionBandsを使用して、最近使用したファイルを表示するメニューを作成する方法を示します。ここからダウンロード出来ます(ミラー)。このデモはコード例も示しています。ツールバー上に、開くボタン(最近使用したファイルのリストを表示するドロップ・ダウン付き)を作成します。
TActionToolBar上にドロップダウン・ボタンを作成するには、どうすれば良いですか?
ドロップダウン・メニュー付きのActionToolBarボタンを作成するには、以下のようにしましょう。
- フォーム上にTActionManagerとTActionToolBarを置きましょう(設計時IDE)
- ActionManagerをダブル・クリックして、Customizeダイアログを表示しましょう
- 新規Actionを、ActionManagerへ追加しましょう
- 新規Actionを、TActionToolBarへドラッグしましょう
- 表示|オブジェクト・ツリーを選択しましょう
- ノードを開きましょう。Form1\ActionManager1\ActionBars\0 – ActionBar -> ToolActionBar1\Items\0 – ActionClient1\Items
- 右クリックして、新規項目をこのノードに追加しましょう。
以上でドロップダウン・ボタンが作成されます。これは、今は何もしない項目です。ActionManagerに新しいActionを追加し、新しいノードのActionプロパティと関連付け、ドロップダウン・メニューを作りましょう。
ActionBandsは、MDIアプリケーションをサポートしていますか?
Yesでもあり、Noでもあります。ActionToolBarsは、MDIアプリケーションに対応していますが、ActionBandメニューは対応していません。ActionBandメニューは、MDIアプリケーションでも動きますが、自動的なMDIメニューのマージを現在はサポートしていません。また子ウィンドウの復元/最小化/閉じるアイコンを表示しません。この機能は将来のリリースで、追加する予定です。はい。TActionMainMenuBar のWindow プロパティを見ましょう。
自分のカスタムActionBandコンポーネントを作れますか?
もちろんです。ActionBandsコンポーネントは非常に拡張性が高く、ユーザーがカスタムActionBandコンポーネントを作れるようになっています。
- Actionへ接続可能なコンポーネントを作成(または既存のコンポーネントを継承)しましょう。例えばコンポーネントの状態が変化した時、Actionが「何か」(発生させたい事をなんでも)を起こすようなコンポーネントです。
- TCustomActionControlを作成し、ActionBand上で使用するコンポーネントを包みましょう。
- 特定のコンポーネントとリンクするActionを作成しましょう。例えばListAction(TStaticListActionとTVirtualListAction)は、共にコンボ・ボックスで動作します。
- TCustomActionToolbarを継承したコンポーネントを作成し、GetControlClassをオーバーライドしましょう。作成したActionクラスを探して、コンポーネント・クラスを返し、適切なコンポーネントが作成されるようにしましょう
(追記)http://groups.google.com で create actionband control を検索すると良いです。
ActionBandsを実行時に動的に修正できますか?(Delphi6)
もちろんです。TActionManagerHelperというコンポーネントも用意されています。これはActionBandsの動的修正を容易にします。デモの通りです。このデモは(TActionManagerHelperを使用した)、ActionBandsの動的修正の方法を示しており、最近使用したファイル・メニュー http://homepages.borland.com/strefethen/Demos/AMHelper.htm を実装します。
(AMHelperは http://cc.embarcadero.com/Item/17128 か?)
既存のスタイルに代わるActionBandsは用意されていますか?(Delphi6)
Delphi7.0には既に付属しています。Delphi 6.0用にも、2つの追加メニュー・スタイルを用意しました。1つはMicrosoft Office XP風のメニューとツールバーです。もう1つは、Microsoft Encartaの真似です。両スタイルのコードは、http://homepages.borland.com/strefethen/info/ から入手できます。XPとEncartaスタイルのActionBandメニューとツールバーを探しましょう。ここをクリックして、D7スタイルのActionBandsのサンプルを入手しましょう。
(アーカイブは http://web.archive.org/web/20040712224142/http://homepages.borland.com/strefethen/info/ )
Disabledの外見を指定する方法はありますか?
現在(D6では)、Disabledの外見を直接変更する方法はありませんが、開発者が自分で表示する事は簡単に出来ます。例えば、ツールバーのボタンの表示方法を変更したい場合は、以下のようにします。
- 変更したいコンポーネントを継承した、コンポーネントを作成しましょう(例:TCustomButtonControl)
- DrawGlyphメソッドをオーバーライドし、希望するグリプタル(浮き彫り)を表示しましょう
- ActionBandで、OnGetControlClassイベントをフックし、新しいコンポーネント・クラスを返しましょう
これでActionBandがコンポーネントを生成する場合、デフォルトのコンポーネントではなく、先ほど作成した新しいコンポーネントが作成されます。
更にTCustomActionManagerを拡張し、DisabledImageIndexプロパティを持つ、TActionClientItemsを作り、先ほど作成したコンポーネントを使用することも可能です。これを行うには、以下のようにします。
- TActionClientItemを継承したコンポーネントを作成しましょう。DisabledImageIndexプロパティを追加しましょう。
- TCustomActionManager(またはTActionManager。お好きな方で)を継承したコンポーネントを作成しましょう。GetActionClientItemClassメソッドをオーバーライドし、1.で作成したクラスを返しましょう。
以上で、設計時に追加したプロパティが現れます。先ほど作成したカスタム・コンポーネントは、実行するまでは使用できませんが、これで良いのです。その理由は、設計時はどのコンポーネントも、Enabledな物として表示されるからです。
IDEで設計時に行ったActionBandへの変更が、実行時に現れません。
IDEで行ったActionBandへの変更が、実行時に現れないのは、ActionManagerのFileNameプロパティが設定されているからです。
使用情報とメニューのレイアウト情報を保存するためには、ActionManagerをファイルに保存する必要があります。アプリケーションを再スタートした時、ActionManagerはこのファイルをリロードし、ActionBandsを以前の状態に復元します。IDEで行った表示上の変更が、実行時に反映されない原因は、これです。
この状況を回避するためには、IDEでアプリケーションを実行する前に、設定ファイルを削除し、アプリケーションの配布準備が出来るまで、ActionManagerのFileNameプロパティの設定を無効にする必要があります。
ActionManagerのFileNameプロパティが設定されていない場合は、IDEの表示と実行時の表示が一致します。
TActionToolBarで、項目のCaptionを消すには、どうすれば良いですか?
- ファイル|新規作成|アプリケーションを選択しましょう
- TActionManager、TActionToolBar、TImageListコンポーネントを置きましょう
- TActionManager.ImageList = ImageList1;
- ActionManagerのCustomizeダイアログを開き、編集カテゴリの全Actionを追加しましょう
- 編集カテゴリのActionを、TActionToolBarへドラッグ&ドロップしましょう
- 表示|オブジェクトツリーを選択し、ActionManagerのノードを開きましょう
- ActionBars->"0 – ActionBar->ActionToolBar1"->Itemsを開きましょう
- ActionToolBar上にある、編集カテゴリの項目を開き、全て選択しましょう(最初の項目をクリックし、Shiftキーを押して、下矢印キーを押しましょう)
- オブジェクト・インスペクタで、ShowCaption = Falseを設定しましょう
- アプリケーションを実行しましょう。注目:「全てを選択」ActionのCaptionだけが表示されます。グリプタル(浮き彫り)を設定していないからです。
以上で、Captionを選択的にON/OFFできました。ポイントは、各項目のShowCaptionプロパティを使用するという事です。
(追記)http://groups.google.com で %green% caption items tactiontoolbar を検索すると良いです。D6 TActionManagerやTActionMainMenuBarやTActionToolBarのスレッドを参照しましょう。
注意:ShowCapitonプロパティをFalseにする為には、項目に関連付けられたImageが必要です。もしくはVisibleプロパティを使用し、ActionBand上の項目の表示/非表示をコントロールしましょう。
トップレベルのメニュー項目をDisableにするには、どうすれば良いですか?(Delphi6)
コンポーネントはユーザーにより、実行時に削除できますので、
以前は、コンポーネントには直接アクセスできませんでした。D7で、TActionManagerに、ActionBandsの項目を操作するメソッドが出来ました。
そこでD6用にも、TActionManagerHelperコンポーネントを用意しました。これは実行時に動的に、項目を見つけ、操作する事を容易にします。このコンポーネントは著者のウェッブ・サイトからダウンロードできます。
このコンポーネントを取得すれば、以下のコードを使用し、トップレベルのメニュー項目(ついでにActionBand上のコンポーネントも、関連するActionがオーバーライドしない場合は)のEnabledプロパティを操作できます。
var I: TActionClientItem; begin // In this case the Item's Caption is '&test' I := ActionManagerHelper1.FindItemByCaption('&test'); if Assigned(I) then I.Control.Enabled := not I.Control.Enabled; end;
(追記)groups.google.com で disable top level menu TActionMainMenuBar を検索すると良いです。
ActionManagerのCustomizeダイアログで表示されるActionを隠すには、どうすれば良いですか?
TCustomizeDlgコンポーネントを使用し、CustomizeDlg.Showを呼び出す新規Actionを追加しましょう。TCustomizeDlgのOnShow/OnCloseイベントを使用し、ダイアログに表示したくないActionを、削除・復元しましょう。
ActionをActionListから削除する場合は、ActionListプロパティをnil にしましょう。Action Listへ復元する場合は、ActionListプロパティに再割り当てしましょう。
(追記)http://groups.google.com で customize actionmanager hide を検索すると良いです。
Actionbandの項目をコードで作成するにはどうすれば良いですか?
ActionBandsを全体的にコードで作成するには、TCollectionで気持ちよく一仕事をする必要があります。TActionManagerはコレクションに依存しているからです。
これはTActionManagerの新しいActionBarに、項目を1つ追加する方法の例です。
procedure TForm1.FormCreate(Sender: TObject); var AnAction: TAction; begin // Setup the new action AnAction := TAction.Create(Self); AnAction.Caption := 'Test'; AnAction.Category := 'New Category'; // Should assign some event handler if it's just a TAction // AnAction.OnExecute := AnActionExecute; // "Add" the action to the action manager AnAction.ActionList := ActionManager1; // Add a new TActionBarItem, you could use an existing one ActionManager1.ActionBars.Add; // Manually a new TActionClientItem and assign the new action to it with ActionManager1.ActionBars0.Items.Add do Action := AnAction; end;
|