使うサンプルを作ってみた。
Microsoft ScriptコントールをDelphiに取り込む必要がある。
Microsoft Scriptコントール取り込むには、コンポーネントの取り込みを選択し
ActiveXコントールの取り込みを選択する。
(ここでタイプライブラリの取り込みを選択するとクラスがつくられないみたい
なので要注意)
コントロールの一覧からMicroSoft Scriptコントロールを選択する。
あとは、画面の支持にしたがってファイルを作成し、Microsoft Scriptコントールを
組み込みたいプロジェクトに読み込む。
ここから、実際につくったサンプル。
サンプルは、
1) a,b二つの引数を持つVBSのFUNCTIONプロシージャを実行する。
2) VBSはメモコンポーネントに記述する。
3) メモコンポーネントに記述したFUNCTIONのリストをListBoxに表示する。
4) ListBoxから選んだFUNCTIONを実行し結果をラベルに表示する。
とゆうものです。
以下、ソースファイル
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MSScriptControl_TLB, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
スクリプトを登録: TButton;
ListBox1: TListBox;
選択した関数を実行: TButton;
実行結果: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure スクリプトを登録Click(Sender: TObject);
procedure 選択した関数を実行Click(Sender: TObject);
private
{ Private 宣言 }
FScriptControl:TScriptControl;
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses ActiveX,VarUtils;
{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FScriptControl.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FScriptControl := TScriptControl.Create(Self);
{Jscriptを使用するときは、'VBSCRIPT'を'JScript'に変更する。}
FScriptControl.Language := 'VBSCRIPT';
end;
procedure TForm1.スクリプトを登録Click(Sender: TObject);
var
i : Integer;
begin
ListBox1.Clear;
{Scriptコントロールにコードを追加}
FScriptControl.AddCode(WideString(Memo1.Text));
{プロシージャコレクションを操作することでプロシージャーのリストを得る}
for i := 0 to FScriptControl.Procedures.Count -1 do
begin
{VB(VB6,VBA)用のCOMのコレクションは1基数のものが多いので注意}
ListBox1.Items.Add(FScriptControl.Procedures.Item[i+1].Name);
end;
end;
procedure TForm1.選択した関数を実行Click(Sender: TObject);
var
ResultStr : OleVariant;
ParamArray : Variant;
PParamArray : PVarArray;
MyParams : PIntegerArray;
begin
{パラメータはヴァリアント型の配列で渡す必要がある}
ParamArray := VarArrayCreate([0, 1], varVariant);
ParamArray[0] := 3;
ParamArray[1] := 5;
PParamArray := VarArrayAsPSafeArray(ParamArray);
ResultStr := FScriptControl.Run(WideString(ListBox1.Items[ListBox1.ItemIndex]),
PSafeArray(PParamArray));
Label2.Caption := VarToStr(ResultStr);
end;
end.
以下、コントロールの取り込みと上記プログラムを実行しているところのデモ動画



0 件のコメント:
コメントを投稿