メニュー項目とツールバーボタンの機能は、C1Command と非常によく似ています。 メニュー項目またはツールバーボタンは、コマンドとコマンドリンクの2つに分けられます
C1Command Component の機能
コマンド(C1Command 型またはその派生型のオブジェクト、リストについては「クラス階層」を参照)は、コマンドが表す実際のアクションに関連するプロパティとイベントハンドラを保持するために使用されます。 コマンド自体は、C1Command のメニューとツールバーには含まれていません。 代わりに、フォーム上のすべてのコマンドは、C1CommandHolder 型のコンポーネント内の単一のコレクションに格納され、C1Command の最初のメニューまたはツールバーをそこに追加すると、単一のインスタンスがフォーム上に自動的に作成されます。
C1CommandHolder の使い方の詳細については、「C1CommandHolder コンポーネント」を参照してください。メニューおよびツールバー内のコマンドを表すには、コマンドリンク( C1CommandLink 型のコンポーネント)が使用されます。
C1CommandLink コンポーネントの機能
コマンドリンクは、小さく極めて単純なコンポーネントです。 その最も重要なプロパティは、Command であり、このコマンドリンクに関連付けられた実際のコマンドオブジェクトを指します。その他にコマンドリンクでは、テキストなど、リンク先のコマンドの一部のプロパティをオーバーライドできます。コマンドリンクの視覚表現は、リンク先のコマンドと、リンクがメインメニュー、ポップアップメニュー、ツールバーのどれに含まれているかという2つの要因に依存します。
コマンドリンクの表示に使用されるプロパティ、たとえばテキストや画像は、コマンドから取得されますが、その表示方法はコンテナによって決定されます。メインメニューではコマンドのテキストのみが表示されますが、ポップアップメニューでは画像とショートカットも表示されるというような違いがあります。複数のコマンドリンクが同一のコマンドを指すこともできます。これはコマンドとコマンドリンクが別々の項目になっている理由の1つです。
コマンド、コマンドリンク、メニューとツールバー、およびコマンドホルダーの相互関係
まとめると、コマンド、コマンドリンク、メニューとツールバー、およびフォーム上のコマンドホルダーの間には次のような関係があります。
- コマンド(クラス C1Command と派生クラス)は、フォームのコマンドホルダー(C1CommandHolder 型のオブジェクト)に自動的に格納されます。
- メニューとツールバーC1MainMenu 型、C1CommandMenu 型、C1ContextMenu 型、C1ToolBar 型のオブジェクト)には、メニュー項目またはツールバーボタンを表すコマンドリンク(C1CommandLink 型)が含まれています。 各コマンドリンクは、コマンドホルダー内の実際のコマンドを指しています。 コマンドリンクは、メニューまたはツールバーの CommandLinks コレクションに格納されています。 コマンドリンクは、このコレクションまたはデザイナから編集できます。
- 複数のコマンドリンクが同一のコマンドを指すこともできます。 さらに、同一のコマンドを指すコマンドリンクはそれぞれ別のコンテナに存在することができます。 たとえば、[ファイル]メニューからのリンクとファイル操作ツールバーからのリンクが同一のファイルオープンコマンドを指すことができます。
- コマンドリストの、ユーザーから見えるほとんどのプロパティ(テキスト、画像など)は、リンク先のコマンドから取得されます。 コマンドリンクの表示状態(有効/無効、ON/OFF など)も、リンク先のコマンドの対応する状態によって決定されます(コマンドリンクに状態プロパティはありません)。
- 最も重要なのは、ユーザー定義アクション(ファイルを開く、クリップボードにコピーするなど)を実際に実行するイベントハンドラが関連付けられているのがコマンドのみで、コマンドリンクに関連付けられることはない点です。 ユーザーがメニュー項目を選択したり、ツールバーボタンをクリックしたりすると、リンク先のコマンドのクリックイベントハンドラが呼び出さ.
- フォームに定義されているすべてのコマンドを列挙するには、コマンドホルダーの Commands コレクションを使用します(フォームのコンポーネントトレイに表示されます)。 また、コレクションエディタを使用して、コマンドを追加したり削除したりすることもできます(もっともメニューやツールバーのデザイナを使用して、リンクからコマンドにアクションする方がおそらく簡単です)。
関連トピック