使うサンプルを作ってみた。
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 件のコメント:
コメントを投稿