ActiveXの強化
DADiSP 6.5 |
---|
機能 |
6.5新機能の概要 |
リリースノート B04 リリースノート B03 リリースノート B02 リリースノート B01 |
プレスリリース |
ActiveXの強化
発生したActiveXイベントをREGISTEREVENT によって操作されます。 外部からActiveXイベントを発生されるとREGISTEREVENTはSPL関数に実効命令を出します。
以下のSPLイベントハンドラを考えます。
/* 簡単なイベントハンドラ */
MyEvent(argv)
{
local i, str = "";
loop (i = 1..argc)
{
str += sprintf("arg%d: %s ", i,
caststring(getargv(i)));
}
message("MyEvent", str); }
ハンドラはInternet Explorerからイベントを処理するために使用できます。
/* Internet Explorerへの接続 */
ie = createobject("internetexplorer.application");
/* ホームページへの移動 */
ie.navigate("www.dadisp.com");
/* 表示 */
ie.visible = 1; /* イベントハンドラの設定*/
registerevent(ie, "TitleChange", "MyEvent");
Internet Explorerでの変更によりタイトルが表示されるたびにMyEventが呼び出され、メッセージボックスが表示されます。
イベントは以下のように整数のイベントIDで指定することもできます。
registerevent(ie, 0x71, "MyEvent");
UNREGISTEREVENTでSPLイベントハンドラを外す(無効にする)ことができます。
FIREEVENT とRAISEEVENTによって外部へActiveXイベントを発生することができます。
FIREEVENTイベントID1〜8までのActiveXイベントを発生します。イベントハンドラにゼロまたは複数の引数を渡すことができます。引数はオプションとなります。標準的なオートメーションバリアント配列として渡された引数はほとんどのオートメーション言語との互換性を持ちます。
以下はVBAイベントハンドラの場合の例となります。
Public WithEvents DSP As DADiSPApp
#サーバーの初期化
Sub InitDSP()
Set DSP = New DADiSPApp
DSP.Visible = True
End Sub
#イベント3へのハンドラ
Sub DSP_Event03(ParamArray args() As Variant)
Dim i As Integer
Dim s As String
s = ""
For i = 0 To UBound(args)
s = s + CStr(args(i))
Next i
MsgBox s, vbOKOnly, "Event 3 Fired"
End Sub
イベントハンドラを適切に設定するにはDSDiSPタイプライブラリへ参照を追加します。DADiSPで以下を実行します。
fireevent(3)
以下ではDSP_Event03 VBA コードの実行を命令し、メッセージボックスを表示さます。
fireevent(3, "test", 2.5)
以下ではDSP_Event03 VBA コードの実行を命令し、テキストを表示させます。
test 2.5
RAISEEVENTはID番号9〜16を用いて.NET言語に適したバリアントのSafeArrayをオプション引数として与えます。
GETCONTROLは現在のActiveXオブジェクトを返します。
GETCONTROLによってSPLイベントハンドラに現在のActiveXコントローラまたはサーバーへハンドルを返しことができます。
以下のSPL関数を考えます
/* 簡単なイベントハンドラ */
MyEvent(argv)
{
local i, str = "", ctrl;
loop (i = 1..argc)
{
str += sprintf("arg%d: %s ", i,
caststring(getargv(i)));
}
/* ActiveX オブジェクトを呼び出し*/
ctrl = getcontrol();
/* ステータステキストのタイトルを表示 */
message(ctrl.StatusText, str);
}
ハンドラはInternet Explorerからイベントを処理するのに使用できます。
/* Internet Explorerへの接続 */
ie = createobject("internetexplorer.application");
/* ホームページへの移動 */
ie.navigate("www.dadisp.com");
/* 表示 */
ie.visible = 1;
/* イベントハンドラの設定*/
registerevent(ie, "TitleChange", "MyEvent");
Internet Explorerでの変更によりタイトルが表示されるたびにMyEventが呼び出され、メッセージボックスが表示されます。メッセージボックスに該当のWEBページのステータスラインテキストと現在のタイトルが表示されます。
Calculate手法
CalculateはActiveXクライアントから変数を受け取ることができます。
以下はVisual Basicの場合の例となります。
例1
Dim DADiSP as Object
Dim val as Variant
#DADiSPへの接続します
Set DADiSP = CreateObject("dadisp.application")
#表示なしで2つのワークシートウィンドウを作成します
Call DADiSP.Execute("Newworksheet(2, 0)")
# 10x3 のランダム配列を生成するし型を変形した値を返します
val = DADiSP.Calculate("rand", 10, 3)
ActiveXオートメーションサーバーとしてDADiSP を起動させ、2つのワークシートウィンドウを作成します。そして、入力引数にしたがって処理した10×3のランダム配列を返します。引数は$記号で指定します。
例2
Dim DADiSP as Object
#DADiSPへの接続します
Set DADiSP = CreateObject("dadisp.application")
#表示なしで2つのワークシートウィンドウを作成します
Call DADiSP.Execute("Newworksheet(2, 0)")
# 式に従いスケール付き100点のランダムシリーズを生成します
Call DADiSP.Calculate("W1 := gnorm($1, 1)*$2", 100, 10)
ActiveXオートメーションサーバーとしてDADiSP を起動させ、2つのワークシートウィンドウを作成します。そして、式に従い、10の間隔のスケールで100点のランダムシリーズをW1に配置します。入力引数の値はプレースホルダ変数$1と$2で指定します。