Curl® 言語では、アプレットの中に、 ActiveX® コントロールとして利用できるリソースを挿入することが出来ます。
そのようなリソースの例として、Flash™ ムービー、 QuickTime™ ムービー や Microsoft®
Internet Explorer などが挙げられます。 追加するプロセスは、OBJECT や EMBED HTML タグをいれるプロセスと似ています。
注意: Windows Updateにより、Microsoft Internet Explorer のユーザは、埋め込まれた ActiveX コントロール を直接操作することは出来なくなりました。画面を操作するためには、回避策を実装しない限り、一度画面をクリックする必要があります。詳細は「
Microsoft MSDN Web サイト」を参照してください。
ActiveX API は Linux と Windows の両方用に提供されています。
しかし、Linux では ActiveX コントロールが無いため、実行時に
ActiveXException がスローされる可能性があります。
この Linux でスローされる例外は、Windows 上でActiveXコントロールがインストールされていない状況で、
アプレットがその実存しないコントロールにアクセスしようとする時にスローされる例外と一致しています。
このような例外を処理するアプレットは、どちらのプラットフォームでも最低限の機能をこなせるようにプログラムする必要があります。
注意: このチャプターで使用されているコード例では、他のチャプターで見られるような例とは違い、
ページ上から直に実行することは出来ません。[ ActiveX オブジェクトは特権があるアプレット
からのみ生成可能なためです。]
以下にある例を実行するためには、コード例を、空のアプレットのファイルにコピーしてから実行します。
そのアプレットは、特権付きロケーションに保存されている必要があります。
特権を与えるには、Curl コントロールパネルを使用してください。
特権に関しての詳しい内容は開発者ガイドの「
特権付アプレット」 を参照してください。
以下の例では、Microsoft®のカレンダー コントロール
を作成し、
Frame に挿入します。
ActiveXObject のファクトリの引数として、Program ID または Class ID を挿入します。
ActiveX オブジェクトの program ID と Class ID は、そのオブジェクトのドキュメンテーションから引用・コピーすることが出来ます。
Program ID は、引用符の中に入れる必要があります。
Class ID は、逐語的文字列として使用します。
逐語的文字列の詳しい内容は、開発者ガイドの「
逐語的文字列」 を参照してください。
特権付のロケーションに以下のアプレットをコピーしてください。
{import * from CURL.GRAPHICS.ACTIVEX}
|| ActiveX カレンダー コントロール
{let xobj:ActiveXObject =
{ActiveXObject
|| program id を使用
|| ProgId = "mscal.calendar"
|| class id を使用
ClsId = |"{8E27C92B-1264-101C-8A2F-040224009C02}"|
}
}
{value
{Frame
border-color = "black",
border-width = 2px,
margin = 2px,
background = "blue",
{ActiveXGraphic
width = 8cm,
height = 8cm,
xobj
}
}
}
{do
{set xobj.Year = 1998}
}
以下の例では、Microsoft カレンダー オブジェクトの、メソッド、ゲッター、
セッターを記述するメソッドが使用されています。
特権付のロケーションに以下のアプレットをコピーしてください。
{applet
{compiler-directives
stringent? = true
}
}
{import * from CURL.GRAPHICS.ACTIVEX}
{import ActiveXGraphic from CURL.GUI.BASE}
{let activex-object:ActiveXObject =
{ActiveXObject
ProgId = "mscal.calendar"
}
}
{let method-info-graphic:VBox = {VBox}}
{let num-methods:int = activex-object.method-count}
{do
{method-info-graphic.add {HBox {bold Methods}}}
{method-info-graphic.add
{HBox "Number of methods: ", num-methods}
}
{for i:int = 0 below num-methods do
let method-info:ActiveXMethodInfo = {activex-object.get-method-info i}
{method-info-graphic.add
{HBox "Name: ", method-info.name}
}
{if-non-null description = method-info.description then
{method-info-graphic.add
{TextFlowBox "Description: ", {value method-info.description}}}
}
{method-info-graphic.add
{HBox "Num args: ", method-info.arg-count}
}
{for i:int = 0 below method-info.arg-count do
{let thistype:ActiveXArgInfo = {method-info.arg-type i}}
{method-info-graphic.add
{format "Arg %d: %s", i, thistype.type}
}
}
{method-info-graphic.add {hrule}}
}
{method-info-graphic.add {HBox {bold Setters}}}
let num-setters:int = activex-object.setter-count
{method-info-graphic.add
{HBox "Number of setters: ", num-setters}
}
{for i:int = 0 below num-setters do
let setter-info:ActiveXFieldInfo = {activex-object.get-setter-info i}
{method-info-graphic.add
{HBox "Setter Name: ", setter-info.name}
}
{if-non-null description = setter-info.description then
{method-info-graphic.add {HBox "Description: ", description}}
}
{method-info-graphic.add {HBox "Type: ", setter-info.type.type}}
{method-info-graphic.add {hrule}}
}
{method-info-graphic.add {HBox {bold Getters}}}
let num-getters:int = activex-object.getter-count
{method-info-graphic.add
{HBox "Number of getters: ", num-getters}
}
{for i:int = 0 below num-getters do
let getter-info:ActiveXFieldInfo =
{activex-object.get-getter-info i}
{method-info-graphic.add
{HBox "Getter Name: ", getter-info.name}
}
{if-non-null description = getter-info.description then
{method-info-graphic.add
{HBox "Description: ", description}
}
}
{method-info-graphic.add {HBox "Type: ", getter-info.type.type}}
{method-info-graphic.add {hrule}}
}
}
{value
method-info-graphic
}
Curlのアプレットで ActiveX コントロールを使用する際には、COM メソッドに渡す Curl のオブジェクトがどういう種類のものかということを知っておく必要があります。次の表は、COM 型と Curl のデータ型の間のマッピングを示しています。方向 列の矢印は、型の変換が一方向でのみ有効なケースを示しています。
Curl のデータ型から COM 型への変換は、式のスタティックな型ではなく、Curlの値の実行時の型に基づいています。Curl では null 値は1つだけで、これはすべての # 型に共通であり、スタティックな型でありながら VT_NULL に変換されます。
| ActiveX の型 | 方向 | Curl のデータ型 |
| VT_EMPTY |  | null |
| VT_NULL | | null |
| VT_BSTR |  | StringInterface |
| VT_BSTR |  | #String |
| VT_BOOL | | bool |
| VT_I1 | | int8 |
| VT_I2 | | int16 |
| VT_I4 | | int32 |
| VT_I8 | | int64 |
| VT_UI1 | | uint8 |
| VT_UI2 | | uint16 |
| VT_UI4 | | uint32 |
| VT_UI4 |  | char |
| VT_UI8 | | uint64 |
| VT_INT |  | int32 |
| VT_UINT |  | uint32 |
| VT_R4 | | float |
| VT_R8 | | double |
| VT_DISPATCH | | #ActiveXObject |
| VT_UNKNOWN | | #ActiveXObject |
| VT_DATE | | ActiveXDate |
| VT_CY | | ActiveXCurrency |
| VT_DECIMAL | | ActiveXDecimal |
| VT_ARRAY | ... | | #{FastArray-of ...} |
| VT_ARRAY | VT_VARIANT | | #{FastArray-of any} |
| VT_BYREF | ... | | #{Reference-to ...} |
| VT_BYREF | VT_VARIANT | | #{Reference-to any} |
| <引数が省略されている場合> | | SkipOptionalArg |
Copyright © 1998-2008 Sumisho Computer Systems Corp.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of Sumisho
Computer Systems Corp. that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of Sumisho Computer Systems Corp.