VCL フォームに ActiveX アクティブ フォームを作成する
Delphi コントロールと同様に、ActiveX コントロールのコンポーネントを IDE でフォームなどの論理コンテナに配置すると、プログラム コードが生成されます。 ActiveX コントロールと Delphi コントロールの主な相違は、ActiveX コントロールは言語に依存しないことです。 たとえば、ActiveX コントロールを作成して、Delphi や %C++Builder% だけでなく、Windows 上のさまざまなプログラミング環境に配置することができます。
この手順では、ActiveX アクティブ フォーム ウィザードを使用して、2 つのコンポーネントを含むアクティブ フォームを作成します。 このウィザードは、VCL フォームを使用してアクティブ フォームを作成します。 アクティブ フォームをテストするには、単純な HTML ファイルと Web ブラウザを使ってフォームを開きます。 主な手順は次のとおりです。
- ActiveX ライブラリ プロジェクトと ActiveX アクティブ フォームを作成します。
- ボタンとイベント処理コードを追加します。
- アクティブ フォームをテストします。
目次
ActiveX ライブラリ プロジェクトと ActiveX アクティブ フォームを作成するには:
- ローカル ドライブに ActiveX プロジェクトのディレクトリを作成します。 そのディレクトリに簡単に見つけられる名前を付けます(たとえば、ActiveX)。
- 次のいずれかを選択します。
- [ファイル|新規作成|その他...|C++Builder|ActiveX|ActiveX ライブラリ]
- [ファイル|新規作成|その他...|Delphi|ActiveX|ActiveX ライブラリ]
- これにより、インプロセス ActiveX オブジェクトのホストとして使用できる DLL(ダイナミック リンク ライブラリ)プロジェクトが作成されます。
- 次のいずれかを選択します。
- [ファイル|新規作成|その他...|C++Builder|ActiveX|ActiveX フォーム]
- [ファイル|新規作成|その他...|Delphi|ActiveX|ActiveX フォーム]
- Active フォーム ウィザードが開かれます。
- デフォルト設定のままで[OK]をクリックします。 ウィザードにより、ActiveX コントロールの実装に必要なコードが生成され、プロジェクトに追加されます。 ActiveX アクティブ フォームが表示されます。
アクティブ フォームにボタンとイベントを追加するには:
- [ツール パレット]の[Standard]ページから、[TEdit]コンポーネントと[TButton]コンポーネントをフォームに追加します。
- ボタンを選択します。
- [オブジェクト インスペクタ]の[イベント]タブで、[OnClick]イベントをダブルクリックします。 コード エディタが表示され、次のいずれかのイベント ハンドラ ブロックにカーソルがあります:
- TActiveFormX.Button1Click (Delphi)
- TActiveFormX::Button1Click() (C++)
- カーソルの位置に次のコードを入力します。
- Delphi:
ShowMessage(Edit1.Text);
-
-
- C++:
-
ShowMessage(Edit1->Text);
- プロジェクト ファイルを ActiveX ディレクトリに保存します。
アクティブ フォームをテストするには:
アクティブ フォームを作成し、ビルドして登録したら、次のような単純な HTML ファイルを使って Web ブラウザ上で動作させることができます。
<html> <body> <h1>Active Form<h1> <object classid="clsid:3E46CAEF-520F-4B9F-B152-00FF2E006F88" codebase="AnActiveForm.ocx" width=700 height=250 align=center hspace=0 vspace=0> </object> </body> </html>
この HTML で、次の 2 つの項目については値を変更する必要があります。
classid
(アクティブ フォームの CoClass の GUID)codebase
(アクティブ フォームを含むアクティブ ライブラリの名前。拡張子は .ocx または .dll)
<project>_TLB ユニットで、
classid
(実際の GUID 値)を探します。 上の例のコードは以下のようになっています。
// *********************************************************************// // GUIDS declared in the TypeLibrary. Following prefixes are used: // Type Libraries : LIBID_xxxx // CoClasses : CLASS_xxxx // DISPInterfaces : DIID_xxxx // Non-DISP interfaces: IID_xxxx // *********************************************************************// const CLASS_TestActiveForm: TGUID = '{3E46CAEF-520F-4B9F-B152-00FF2E006F88}';
つまり、この例の
classid
は 3E46CAEF-520F-4B9F-B152-00FF2E006F88 です。ファクトリの登録コードを見て、正しい
codebase
の値を探します。codebase
は、ファクトリのコンストラクタに渡される 4 番目のパラメータで、"Class_" という接頭辞が付いています。
initialization TActiveFormFactory.Create( ComServer, TActiveFormControl, TTestActiveForm, Class_TestActiveForm, 1, , OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL, {$IFDEF SINGLE_THREADED} tmSingle); {$ELSE} tmApartment); {$ENDIF}
つまり、ここでの
codebase
は TestActiveForm です。HTML ファイルを編集して、
codebase
およびclassid
に固有の値を指定します。 ファイルを保存します。Internet Explorer などの Web ブラウザで HTML ファイルを開きます。
ブラウザのウィンドウにアクティブ フォームが表示されます。
ボタンをクリックします。 ポップアップ ダイアログに編集ボックスのテキストが表示されます。
テキストを変更して、もう一度ボタンをクリックします。 入力した新しいテキストがポップアップ ダイアログに表示されます。