DelphiXE4 [FMX]メニューバー(MenuBar)
2015/04/18
前回は[Standard]内の「スプリッター(Splitter)」について記述しましたので、今回は、同じく[Standard]内の「メニューバー(MenuBar)」について記述します。Delphi2010・VCLアプリケーションでの「ActionMainMenuBar」(アクションメインメニューバー)に相当でしょうか。
【Delphi2010の記事はこちら】
【DelphiXE3[VCLアプリケーション]の記事はこちら】
【DelphiXE3[FMXアプリケーション]の記事はこちら】
XE4(FMX)
FMX.Menus.TMenuBar
XE3(FMX)
FMX.Menus.TMenuBar
ユニットは同じ、オブジェクトインスペクタ内容も、ほぼ変わりなしの様子です。TabOrderプロパティがありますが、メニューバーはフォーカスを持てません。メニュー項目も[Tab]キーでは移動できませんが、矢印キーでの移動は出来ます。
(ヘルプより)
Align
このコントロールの整列オプション(上、左、クライアント、など)を示します。
Alignを使用すると、現在のコントロールの位置揃えを自動的に設定できます。AlignをalNone以外の値に設定すると、コントロールの位置、サイズ(高さと幅)、アンカーに影響を及ぼす可能性があります。デフォルトでは、Alignは、alNoneに設定されています。
TControlの子孫は、多くの場合、可視性と値をAlignプロパティに対して設定します。たとえば、TToolBarの場合、AlignのデフォルトはTAlignLayout.alTopです。
Alignの取り得る値と、コントロールに対するそれら値の目に見える効果については、FMX.Types.TAlignLayoutを参照してください。
alLeft や alRight 等も指定できますが、メニュー項目は上下ではなく左右に配置されますので基本的には使えないでしょう。
編集可能なメニューバーを表します。
TMenuBarは、移動、サイズ変更、および編集が可能なメニューバーの構造を記述するものです。TMenuBarは、TMenuItemsから構成されています。
メニュー項目はいくつかの方法で追加することができます。
設計時にメニュー項目を追加するには、次のいずれかを行います。
コンポーネントを右クリックし、コンテキストメニューから[項目の追加]を選択します。
コンポーネントをダブルクリックし、[項目デザイナ]で[項目の追加]ボタンをクリックします。
コンポーネントを右クリックし、コンテキストメニューから[項目エディタ...]を選択したあと、[項目の追加]ボタンをクリックします。
実行時にメニュー項目を追加するには、TMenuBarのAddObjectプロシージャを使用します。
ItemsおよびItemsCountを使用して、メニュー項目についての情報を抽出します。
画面デザイン時の例:
↓
項目エディタの表示
↓
項目エディタで下記のようなメニュー項目を追加
↓
実行時はこのような感じに
XE4(FMX)
XE3(FMX)
(ヘルプより)
AutoCheck
IsCheckedプロパティが、TMenuItemがクリックされた際に切り替わるかどうかを制御します。
AutoCheckプロパティは、TMenuItemがクリックされた際に、IsCheckedプロパティの切替を望むならTrueに、そうでなければFalseに設定します。
子項目の場合は有効ですが、一番上の項目の場合は無効です。
Bitmap
TMenuItemのために描画されるビットマップをデザインします。Bitmapを使用すると、TMenuItemのテキストの隣に現れる、カスタムイメージを提供することができます。
メインメニューとは異なり、有効です。
DesignVisible
コントロールのデザインが可視かどうかを示します。
DesignVisibleは、コントロールのデザインが可視の場合にはTrue、そうでなければFalseを返します。
Enable
コントロールが、マウス、キーボード、およびタイマの各イベントに応答するかどうかを示します。
Enabledを使用すると、ユーザーに対してコントロールが利用可能かどうかを制御することができます。コントロールを無効にするには、EnabledをFalseに設定します。無効化されたコントロールには、薄い灰色で表示されるものも(例:ボタン、チェックボックス、ラベルなど)、見た目は変わらずに単に機能を失うだけのもの(コンテナコントロール)もあります。EnabledがFalseに設定されている場合、コントロールは、マウス、キーボード、タイマによる各イベントを無視します。
コントロールを再度有効にするには、EnabledをTrueに設定します。
GroupIndex
このTMenuItemが属するTMenuItemsグループを示します。
TMenuItemsのグループは、同じポップアップメニューに属する一連のTMenuItemオブジェクト群を表します。このメニューでは、そのうち、RadioItemプロパティがTrueに設定されているTMenuItemのうち1つだけが選択されます。
メモ:
違うポップアップメニューに属するTMenuItemsの場合(同じParentプロパティの値を持たない場合)、それらは、たとえRadioItemプロパティがTrueだとしても、同時に選択することができます。
メモ:
デフォルトでは、同じポップアップメニューに属するTMenuItemsはすべて、GroupIndexプロパティに対して同じ値を持っています。
HitTest
マウスクリックイベントを、このコントロールがとらえることができたかどうかを示します。
HitTestをTrueに設定した場合、このコントロールは、マウスのすべてのOnClickおよびOnDblClickイベントをとらえます。
HitTestをFalseに設定した場合、これら2つのマウスクリックイベントは、このコントロールを素通りするため、このコントロールの背後に配置されているコントロールが、代わりにこのマウスイベントを受信します。
大抵のコントロールはデフォルトで、HitTestがTrueになっています。しかしながら、TLabelとTPathLabelでは状況が異なり、デフォルトでHitTestがFalseになっています。これら2つのコントロールでは、開発者がHitTestをTrueに設定しない限り、OnClickとOnDblClickイベントはとらえられません。
IsChecked
チェックマークを、TMenuItemのテキストの横に表示するかどうかを示します。
IsCheckedを使用すると、TMenuItemをチェックボックスのように動作させることができます。メニュー項目は、IsCheckedがTrueの場合には選択され、そうでなければ、クリアされます。
メモ:
AutoCheckがFalseの場合、メニュー項目はIsCheckedがTrueでもクリアのままになります。
IsSelected
TMenuItemが選択されているかどうかを示します。IsSelectedは、TMenuItemが選択されている場合にはTrue、そうでなければFalseとなります。
Locked
コントロールが設計時にロックされているかどうかを示します。
ロックされたコントロールは、設計時に変更することはできません。
コントロールをロックするには、LockedをTrueに設定します。
デフォルトでは、LockedはFalseで、コントロールは設計時に編集できます。
RadioItem
TMenuItemが、グループ内の他のメニュー項目と、お互いに排他的に選択されるかどうかを示します。
RadioItemを使用すると、そのメニュー項目を、他のメニュー項目らとグループとし、ラジオボタンのように動作させることができます。メニュー項目のグループは、ポップアップメニュー内のすべてのメニュー項目のセットで、同じGroupIndexの値を持っています。RadioItemがTrueの際、グループ内のメニュー項目は、一度に1つしか選択できません。グループ内に単独で存在する選択メニュー項目は、テキストの横のチェックマークによって表されます。
メモ:
RadioItemは、メインメニューの一番上のメニュー項目に対しては動作しません。
TMenuItemはメニュー項目のプロパティを記述するものです。
TMenuItemは、TMenuBar、TMainMenu、TPopupMenuなどのメニューに含まれる項目を表します。
メニューにTMenuItemを追加するには、そのメニューのAddObject手続きを使用します。たとえば、TMenuBarにTMenuItemを追加するには、FMX.Types.TFmxObject.AddObjectを使用します。
TMenuItemのAddObject手続きを使用すると、現在のTMenuItemにサブメニュー項目を追加することができます。GetItemおよびGetItemsCountを使用すると、現在のTMenuItemのサブメニュー項目についての情報を取得することができます。
AutoCheck、GroupIndex、IsChecked、またはRadioItemを使用すると、TMenuItemの確認を行うかどうかやどのように行うかを制御できます。
というわけで、通常の
メインメニュー(MainMenu)
とぱっと見では違いがわかりませんが(メインメニューはフォーム画面上にメニューが表示されないので少し分かりにくいですが)、実行時に編集可能、というところがポイントなのでしょう。Bitmapプロパティが正常に利用出来るメリットもあります。
例えば、
のようにボタンを配置して、そのクリックイベントハンドラを
procedure TForm1.Button1Click(Sender: TObject);
var
m : TMenuItem ;
begin
m := TMenuItem.Create(SELF) ;
m.Name := 'MenuItemA';
m.Text := 'メニューA';
MenuBar1.AddObject(m);
end;
とした場合、実行すると、
↓
みたいな感じでしょうか?
例外処理も何も入っていませんからその辺りはちゃんとしないといけないでしょうけれども…。 ただ、これに関しては、メインメニューの方でも可能ですので、そうなるとメインメニューとの違いは、メインメニューはアプリケーションの上部に表示固定となるけれども、メニューバーの場合は任意の場所に配置可能、という事になるでしょうか? MacOSX でも動作可能ですが、MacOSX でのメインメニューは画面上部のアップルメニューに表示される事になりますが、このメニューバーは、そうはなりませんから、明らかに「別物」と区別出来ます。
以下、スタイルブックを指定した画面状態です。
指定無し
Air.Style
Amakrits.Style
AquaGraphite.style
Blend.Style
Dark.style
GoldenGraphite.Style
Light.Style
RubyGraphite.style
Transparent.Style
MacOSX でも動作することが確認出来ます。
指定無し
Air.Style
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>
Delphi入門編
>
Delphi2010
>
DelphiXE3
>DelphiXE4
△TOP
▲2015/04/17
2015/04/18
▼2015/04/19
シェアウェア
Script!World
データベース
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.