DelFusa Blog 総本山

プログラミングの話題とかです。

NEW | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

| スポンサー広告 | --:-- | comments(-) | trackbacks(-) | TOP↑

≫ EDIT

DelphiとVBScriptとの連携、VBScriptの関数に値渡したり、戻り値を受け取ったりする


  ∩∧,,∧∧,,∧  
   ミミ,,゚Д゚ミ,,・∀・ミ ニャ
   ミ   ミ,,uu_@
    ミ   ミ
    ∪''∪ ホイナー


VBScript関数をDelphi側から上手に使う方法です。
どうぞ。



■ DelphiでVBScriptを使って関数の引数と戻り値をやりとりする方法
環境はDelphi2006 for Win32 です。

VBScriptエンジンがインストールされている必要があります。

◆ Delphi側からVBScriptの関数に値を渡す方法を説明します。

◇ 通常のVCLフォームアプリケーションの上に
ScriptControl1を配置してください。

Memo2とButton2、Button3を配置しましょう。

000561.png

※先ほどの続きなので画像にはMemo1やButton1が入ってますが
今回は使わないです。

◇ FormShowで初期化処理をします。
procedure TForm1.FormShow(Sender: TObject);
begin
ScriptControl1.SitehWnd := Self.Handle;
ScriptControl1.Language := 'VBScript';
end;
FormのShowイベントでコントロールに必要なウィンドウハンドルと
コントロールが実行するスクリプトが[VBScript]だという事を設定します。

ここは、前回と一緒。

◇ VBScriptを設定します。
Memo2.Textに

Function Goodbye(Name)
MsgBox "Goodbye " & Name
End Function

このようなスクリプトを書いておきます。


◇ Delphi側からスクリプト呼び出します。
ボタンイベントを次のように書きます。

//VBScriptの関数に引数を渡す
procedure TForm1.Button2Click(Sender: TObject);
var
Params : PSafeArray;
v : Variant;
begin
v := VarArrayCreate([0, 0], varVariant);
v[0] := 'あいうえお';

Params := PSafeArray(TVarData(v).VArray);

ScriptControl1.AddCode(Memo2.Lines.Text);
ScriptControl1.Run('Goodbye', Params);
//VBScriptのGoodbye関数に引数を渡しています。
end;

これで実行時にボタンを押すと
実行結果は
Goodbye あいうえお
と表示されます。

000562.png


引数を渡すには PSafeArray を使うわけです。

◇ 引数を二つ渡す場合は次のようにしてください。

'Memo2.Text内のVBScript
Function Goodbye2(Name1, Name2)
MsgBox "Goodbye " & Name1 & " and " & Name2
End Function

//VBScriptの関数に引数を渡す
procedure TForm1.Button2Click(Sender: TObject);
var
Params : PSafeArray;
v : Variant;
begin
v := VarArrayCreate([0, 1], varVariant);
v[0] := 'あいうえお';
v[1] := 'かきくけこ';

Params := PSafeArray(TVarData(v).VArray);

ScriptControl1.AddCode(Memo2.Lines.Text);
ScriptControl1.Run('Goodbye2', Params);
//VBScriptのGoodbye関数に文字列を渡している
end;



◆ VBScriptの戻り値をDelphiで受け取る方法を説明します。


◇ VBScriptを設定します。
Memo2.Textに

Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function

このようなスクリプトを書いておきます。

◇ Delphi側からスクリプト呼び出します。
ボタンイベントを次のように書きます。

//VBScriptの関数から戻り値を受け取る
procedure TForm1.Button3Click(Sender: TObject);
var
Params : PSafeArray;
v : Variant;
ReturnValue: Variant;
begin
v := VarArrayCreate([0, 0], varVariant);
v[0] := '10';

Params := PSafeArray(TVarData(v).VArray);

ScriptControl1.AddCode(Memo2.Lines.Text);
ReturnValue := ScriptControl1.Run('Celsius', Params);

ShowMessage( FloatToStr(ReturnValue) );
end;

実行時にボタンを押すと
Celsius関数に指定した値=10が渡り
実行結果は
-12.222...
と表示されます。

000563.png



これでVBScriptを使うことで
Delphiアプリケーションの動作の幅が広がるでしょう。



サンプルファイルは、前と同じ。

拡張子がpngになってますので、拡張子をzipに変更して解凍してみてください。
VBScriptInDelphi.zip.png

スポンサーサイト

| 未分類 | 18:41 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://delfusa.blog65.fc2.com/tb.php/35-3f603268

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。