RAD Studio での LiveBinding
RAD Studio 入門 への移動
LiveBinding は、RAD Studio において VCL と FireMonkey の両方でサポートされているデータ バインディング機能です。 LiveBinding は式に基づいています。つまり、式を使用して、オブジェクトをそれらのプロパティを通じて相互にバインドします。
目次 |
LiveBinding の概要
LiveBinding は、バインディング式と呼ばれる、単方向にも双方向にもできる関係式に基づいています。 LiveBinding はまた、コントロール オブジェクトとソース オブジェクトについてのものでもあります。 バインディング式により、バインドするオブジェクトの 1 つ以上のプロパティが含まれるバインディング式を定義するだけで、任意のソース オブジェクトを自分自身にも他の任意のコントロール オブジェクトにもバインドすることができます(自分自身にバインドする場合は、それ自身がソース オブジェクトにもコントロール オブジェクトにもなります)。 たとえば、TEdit コントロールを TLabel にバインドすることで、編集ボックス内のテキストが変わったら、バインディング式で評価された値に合わせてラベルのキャプションが自動的に変更されるようにすることができます。 あるいは、トラック バー を動かすにつれて進行状況が上下するようにトラッカー コントロールを進行状況バーにバインドするという例もあります。
同じようにして、データベースに接続したり、さまざまなオブジェクトの 1 つ以上のプロパティを変更する、といったことができます。 LiveBinding は伝播するので、コントロール オブジェクトにバインドされている他のオブジェクトに接続されているオブジェクトのプロパティを変更することさえできます。
LiveBinding の使用法
[オブジェクト インスペクタ]と、LiveBinding で使用されるビジュアル コンポーネントを使って、VCL アプリケーションや FMX アプリケーションで LiveBinding を使用することができます。 一方、LiveBindings をコンソール アプリケーションのプログラムで使用する方法があります。
以下のチュートリアルでは、LiveBinding を使用するうえでの基本事項を示します。
- チュートリアル:VCL アプリケーションで LiveBinding を使用する(VCL アプリケーション プロパティ バインディングの例を示します。)
- チュートリアル:LiveBinding を使用してコードを書かずにアプリケーションを作成する(LiveBinding で作成される FireMonkey HD アプリケーションの例を示します。)
- チュートリアル:LiveBinding をプログラムで使用する (コンソール アプリケーションまたは式の手動編集にのみ適しています。)
LiveBinding はマネージでもアンマネージでもかまいません。 マネージ バインディングは、入力式中のオブジェクトまたはプロパティが変更されたときに自動的に評価されます。 たとえば、入力式で Edit1 という編集ボックス コンポーネントの Text プロパティが参照されている場合は、式エンジンに Edit1 の変化が通知されると、バインディングが評価されます。 式エンジンに通知するために TBindingList.Notify が呼び出されます。 Notify() の第 1 パラメータはオブジェクト(この例では Edit1)で、第 2 パラメータは影響を受けるプロパティです。 このオブジェクトを参照するすべてのバインディングが評価されるように、プロパティ パラメータは空でもかまいません。
RAD Studio には、オブジェクトまたはプロパティの変化を式エンジンに知らせる通知システムがありません。 サンプル アプリケーションでは、Notify はイベント ハンドラから呼び出されます。 通常、イベント ハンドラの Sender パラメータは、BindingsList1.Notify(Sender, ''); を呼び出すのに使用されます。 こうして、1 つのイベント ハンドラを使用して、多数のコントロールからの通知を処理できます。 サンプル アプリケーション SynchControlsSampleProject(これも以下の一覧表に含まれています)では、通知オブジェクトがどう実装されるかを示しています。
TBindExpression と TBindExprItems は、マネージ バインディングをサポートしている LiveBinding コンポーネントです。 Managed プロパティを設定します。 これら 2 つのコンポーネントにはまた、通知に影響を及ぼす別のプロパティがあります。 NotifyOutputs プロパティが True の場合、式エンジンは、バインディングの評価時に、変更される出力オブジェクトまたはプロパティに自動的に通知を送ります。
その他のバインディング コンポーネントでは、マネージ バインディングを使用しません。 その代わり、アンマネージ バインディングを使用します。これは常に明示的に評価されます。
TBindLink、TBindListLink、TBindGridLink の各コンポーネントおよび密接に関係している FireMonkey TBindDB*Link コンポーネントでは、TDataSet フィールドなどのデータを TEdit などのコントロールにバインドします。 これらのコンポーネントでは、式エンジンの依存関係グラフに基づいてコントロールとデータの同期を保つのではなく、(新しい TObserver API を使って)データ ソースからの通知とコントロールからの通知をリスンします。 システムは VCL DB 対応コントロール設計を再編成したものになり、単に 2 つのプロパティの同期を保つ以上のことが行われます。 コントロールがこれらのコンポーネントと連携して動作し、データ入力をサポートするには、TObserver API を実装する必要があります。 TLabel のような読み取り専用コントロールでは、TObserver API をサポートする必要はありません。 TBindLink は VCL DB 対応コントロールのような動作をするように設計されているため、VCL DB 対応コントロールを使用するフォームとうまく組み合わせることができ、複雑な式と標準の VCL コントロールをサポートするという利点があります。
TBindPosition コンポーネントは、TObserver API を使ってコントロールからの通知をリスンするもう 1 つのコンポーネントです。 このコンポーネントは、TListBox、Vcl.StdCtrls.TScrollBar、TTracker のような、位置を持つコンポーネントと共に使用されます。 TBindPosition の使用方法については、BindLookupVCLProject サンプルを参照してください。
アンマネージ バインディングを使用するコンポーネントは、他に 2 つあります。 TBindList と TBindGridList は、リストまたはグリッドに値を設定するのに使用されます。 2 つのバインディング コンポーネントを同じコントロールで一緒に使用することができます。 そのため、たとえば、TBindList コンポーネントと TBindDBList コンポーネントを一緒に使用して、TDataSet フィールドを編集できる TListBox に値を設定できます。
LiveBinding のサンプル
RAD Studio には LiveBinding の多数のサンプル アプリケーションが付属しており、[スタート|(すべての)プログラム|Embarcadero RAD Studio XE2|サンプル]を選択することで、それらを見つけることができます。 対象となるフォルダは Delphi\LiveBinding です。 以下の表には、これらのサンプルの一覧を、対応するカテゴリ(FMX または VCL)で分けて示します。 サンプル アプリケーションのなかには、FMX でも VCL でも使用できるものもあれば、どちらか一方のカテゴリでのみ使用できるものもあります。 すべての LiveBinding サンプルのメイン プロジェクト グループは BindSamplesGroup.groupproj です。
ヒント: Samples ディレクトリを最新の SVN のバージョンへ更新する方法の詳細については、ヘルプ トピック「Sample」を参照してください。
| FMX の LiveBinding サンプル | VCL の LiveBinding サンプル |
| BindComponentsExprProject | N/A |
| BindDBExprSampleProject | N/A |
| BindExpressionSampleProject | N/A |
| SynchControlsSampleProject | N/A |
| BindGridLinkFMXProject | BindGridLinkVCLProject |
| BindLinkFMXProject | BindLinkVCLProject |
| BindLinkFMXProject | BindLinkVCLProject |
| BindListFMXProject | BindListVCLProject |
| N/A | BindListEditVCLProject |
| N/A | BindLookupVCLProject |
これらのサンプルは、機能強化されたアプリケーションを LiveBinding を使って作成する方法の詳細を示しています。
インストールされた製品に含まれている LiveBinding サンプルのソースは、以下のとおり、SourceForge にある公開 Subversion リポジトリにチェックインされています。
LiveBinding ビジュアル コンポーネント
LiveBinding エンジンは実行時機能ですが、多数のビジュアル コンポーネントがコンポーネント パレットに用意されており、設計時にコンポーネント間のライブ バインディングを作成するのに役立ちます。
コンポーネント パレットをざっと見ると、[LiveBinding]タブには、フォーム(VCL か FMX のどちらか)にドラッグ アンド ドロップできる以下のコンポーネントがあります。
- TBindingsList - バインディング リストを保持するためのもの
- TBindScope - コンポーネントへのバインディングのためのもの
- TBindScopeDB - データベースへのバインディングのためのもの
ヒント: [オブジェクト インスペクタ]を使用してコンポーネント間のライブ バインディングを作成すると、適切な LiveBinding コンポーネント(TBindingsList)がフォームに自動的に配置されます。 このコンポーネントには、アプリケーションで使用できる全バインディングのリストが格納されています。 バインディング リストについての詳細は、「バインディング リスト」を参照してください。
LiveBinding API リファレンス
以下のユニットは LiveBinding エンジンの構成要素です。 それらの適切なヘルプ トピックのドキュメントには、LiveBinding API の使用に関する情報が記載されています。
| ユニット名 | 内容 |
| System.Bindings.CustomScope | カスタム スコープに関連するクラス |
| System.Bindings.CustomWrapper | カスタム ラッパーに関連するクラス |
| System.Bindings.EvalProtocol | ラッパー、スコープなどの内部構造体のエンジンで使用されるインターフェイス |
| System.Bindings.Expression | バインディング式に関連するクラス |
| System.Bindings.ExpressionDefaults | バインディング式のデフォルト動作 |
| System.Bindings.Factories | 式、マネージャ、スコープのファクトリ |
| System.Bindings.Helper | プログラムによるバインディング式の作成と通知のためのツール |
| System.Bindings.Manager | バインディング マネージャに関連する実装 |
| System.Bindings.ManagerDefaults | バインディング マネージャのデフォルト動作 |
| System.Bindings.Methods | スクリプトで使用できるメソッドの管理 |
| System.Bindings.Outputs | 式出力の管理用ツール |
ヒント: C++Builder を使用して、LiveBinding を利用するコンソール アプリケーションを開発する場合は、プロジェクトを構成するクラスの RTTI 情報を生成するように C++ コンパイラに明示的に指示する必要があります。 それには、#pragma explicit_rtti methods()指令をプロジェクトの最初に追加します(「チュートリアル: LiveBinding をプログラムで使用する」に示されています)。#pragma explicit_rtti methods()指令の詳細については、「Pragma explicit rtti」ヘルプ トピックを参照してください。
関連項目
- LiveBinding の作成
- [LiveBinding の新規作成]ダイアログ ボックス
- LiveBinding の[メソッド]ダイアログ ボックス
- [出力変換コンポーネント]ダイアログ ボックス
- LiveBinding の[式の結果]ダイアログ ボックス
- [DB リンクの新規作成]ダイアログ ボックス
- LiveBinding の[列エディタ]ダイアログ ボックス
- バインディング リスト
- バインディング式エディタ
- [オブジェクト インスペクタ]
- [新規コンソール アプリケーション]
- VCL フォーム アプリケーション
- FireMonkey HD アプリケーション
- VCL-FMX-RTL ライブラリ リファレンス