Delphi Deep Exploration-データベース-Clear ActiveX コントロール
強力なデータベース開発機能は間違いなく Delphi の至宝です。少なくとも 80% の人が毎日 Delphi を使用してデータベース プログラムを開発しています。ビルディング ブロック VCL データベース コントロールと、Dev ExPRess や Wol2Woll などの企業が提供する強力なサードパーティ データベース クリア コントロールに基づいて、プロパティを設定してマウスをドラッグするだけでよいと言っても過言ではありません。数回の作業でデータベースの開発を迅速に完了できます。 Delphi のデータベース機能が強力すぎるため、ActiveX が柔軟なデータベース バインディングも提供できるという事実を見落としがちですが、残念なことに、Delphi 自体が提供するいくつかのサードパーティ ActiveX コントロールはいずれもデータベースに対応していないため、間接的に誤解を招いています。そのため、多くの人が、Delphi が明確なデータを含む ActiveX コントロールをサポートしていないと誤解しています (昔の私も含めて)。もちろんこれは間違った見方です。 Delphi でのデータクリア ActiveX コントロールの使用 次の例では、Office 2000 のシステムにインストールされている Microsoft Calendar 9.0 コントロールをデモンストレーションのために使用します。 [コンポーネント] | [ActiveX コントロールのインポート] を選択し、[Microsoft Calendar 9.0] (以下の図 1.12 を参照) を選択し、システム内の同じ名前の元のコントロールとの競合を避けるためにクラス名を TCalendar から TAXCalendar に変更し、[インストール] ボタンをクリックしてこれをインストールします。コントロール。
新しいプログラムを作成し、TAXCalendar コントロールをフォームに配置します。別の DataSource と Table コントロールを配置します。 DataSource のデータセットを Table1 に設定し、次に Table1 の DataBaseName プロパティを DBDEMOS に設定し、TableName プロパティを EMPLOYEE.DB に設定し、最後に Table1.Active プロパティを True に設定します。 次に、データベースをバインドします。導入された TAXCalendar には、DataSource と DataBindings という 2 つのプロパティがあり、一般的な ActiveX コントロールとは異なります。これは、ActiveX インポート ウィザードが、導入する前にまずデータベースに適したコントロールであるかどうかを判断するためです。 ActiveX コントロール。そうである場合は、継承する基本クラスとして TDBOleControl を使用します。そうでない場合は、TOleControl から継承します。 TDBOleControl は、DataBindings プロパティと DataSource プロパティを実装します。 AXCalendar1.DataSource プロパティを Datasource1 に設定します。 この時点で、フォーム上の TAXCalendar コントロールを右クリックすると、右クリック メニューに追加の DataBindings... メニュー項目が表示されます (下の図 1.13 を参照)。
メニュー項目をクリックすると、データ バインディング属性編集ボックスが表示されます (下の図 1.14 を参照)。 [FieldName] リスト ボックスで HireDate を選択し、[Property Name] リスト ボックスで Value(12) (12 は Value の Dispid 番号) を選択し、[Bind] ボタンをクリックしてデータベース フィールドと Value プロパティの間のデータの関連付けを確立します。
最後に、DBGrid コントロールと DBNavigator コントロールをフォームに配置し、その DataSource を DataSource1 に設定します。プログラムを実行して現在のデータ位置を移動すると、データベースの Hiredate と一致して、ActiveX の日付表示もそれに応じて変化することがわかります。図 1.15 に示すように:
データクリアな ActiveX コントロールの作成 Delphi が実際にデータクリアな ActiveX コントロールを使用できることはすでにわかっていますが、Delphi 自体でデータクリアな ActiveX コントロールを作成できるのかという新たな疑問が生じます。 Delphi では、ActiveX コントロールの変換と生成を 1 ステップで実行できるため、多くの人は、ActiveX をサポートする他の開発環境でデータベース プログラムを開発するときに、Delphi と同じエクスペリエンスを享受できるように、Delphi の強力なデータベース コントロールを ActiveX コントロールに変換したいと考えています。 . 同じリラックスした幸せな気持ち。しかし、最初の部分で述べたように、Delphi のデータクリア コントロールの内部メカニズムは ActiveX データベース コントロールの内部メカニズムと大きく異なるため、Delphi はその強力なデータベース コントロールを単純に直接変換することはできません。それは私たちにできることは何もないということですか?もちろんそうではありません。実際、タイプ ライブラリ エディタを使用すると、クリア データを含む ActiveX コントロールを非常に簡単に実装できます。TEdit コントロールで試して、その方法を見てみましょう。メニュー コマンド [新規] | [ActiveX] | [ActiveX コントロール] を選択して、ActiveX コントロール変換ウィザードを開始し、変換オブジェクトとして TEdit コントロールを選択し、EditX ActiveX フレームワークを生成します。 次に、TEdit の Text プロパティをデータ バインディングをサポートするように変換します。 [表示] | [タイプ ライブラリ] を選択して、Delphi によって生成されたタイプ ライブラリを表示し、[Text] プロパティを選択して、[Flags] プロパティ ページに切り替えます (下の図 1.16 を参照)。
[フラグ] プロパティ ページには多くのチェック ボックスがあることに注意してください。ここでは、データ バインディングに関連するオプションのみを考慮します。これらは、「バインド可能」、「表示バインド可能」、「デフォルト バインド可能」、「即時バインド可能」、および「編集要求」オプションです。 プロパティをバインド可能としてマークし、データベース フィールドにバインドした後、ユーザーがプロパティを変更すると、コントロールは値が変更されたことをデータベースに通知し、データベースに更新ステータスを記録するよう要求します。レコードの更新が成功しました。 Bindable オプションは、プロパティがデータ バインディングをサポートしていることを示します。プロパティがバインド可能としてマークされている場合、プロパティは値が変更されたときにそのコンテナに通知します。 Request Edit は、プロパティが OnRequestEdit 通知メッセージをサポートしていることを示します。これにより、コントロールは、ユーザーによるプロパティ値の変更を許可するかどうかをコンテナーに問い合わせることができます。 「バインド可能を表示」とは、コンテナーがこのプロパティがバインド可能であることをユーザーに表示できることを意味します。 Default Bindable は、それが唯一のデフォルトのバインド可能な属性であることを意味します。これを使用するには、同時に Bindable 属性をマークする必要があります。即時バインド可能がマークされている場合、すべての変更が通知されるため、バインド可能フラグと編集要求フラグを設定する必要があります。 次に、EditX コントロールの Text プロパティを Bindable、Display Bindable、Default Bindable、および Request Edit としてマークします。次に、[更新] ボタンをクリックしてタイプ ライブラリを更新し、最後に [実行] | [ActiveX サーバーの登録] を選択して ActiveX コントロールを登録します。 新しい EditX ActiveX コントロールを導入すると、実際にデータ バインディング機能が実装されていることがわかります。次の図は、データ クリアを使用する EditX プログラムの動作を示しています (実際には、Delphi の ActiveX データ クリア機能が実装されています)。シンプルでかっこいいですね。