◆ [Delphi] スクリプト言語を利用し、ユーザによる処理実装を実現する方法 その3 : サンプルプログラム2
どーもボキです。

ScriptControl で VBスクリプト でループ処理中も、EXEに触れるようにしたサンプルを作った。
サンプルプログラム

Forループを組んだスクリプトを実行しても、EXEのボタンに触れることが確認できると思う。
一見スレッド処理に見えるかもだが、スクリプトからApplication.ProcessMessage を呼んでるだけ。つまり、単純な一筆書き処理。

EXEで実行させるスクリプトは以下。

下線部分のAutoObject.CallProcessMessageが、Application.ProcessMessage に相当する。
スクリプトでループ処理を行う場合、このサンプルのようにスクリプト内で時々EXEの処理に戻してやる必要がある。
Function Func_VBS(ByRef i)
for i = 0 to 99
AutoObject.Value = AutoObject.Value + 1
AutoObject.CallProcessMessage
Sleep(100)
Next
End Function

また、WScriptオブジェクトが実装されてないので、
WScript.Sleep や WScript.Quit いったフロー管理メソッドが使えない。これは痛い。

サンプルEXEのスクリプトにはSleepを呼び出しているが、それは以下のコードを実行させている。
Private Sub Sleep(mSec)
On Error Resume Next
GetObject( _
"winmgmts:{impersonationLevel=impersonate}").ExecNotificationQuery _
("select * from __instancecreationevent within 1" _
& " where targetinstance isa 'Win32_Process'" _
& " and targetinstance.ProcessID=0" _
).NextEvent mSec
On Error GoTo 0
End Sub
WScript.Quit の代用は、End Sub とか End Function しかなさそうね。
あー使いにく。

参考
 Scripting Your Delphi Applications (タイプライブラリエディタの設定方法とか)
[PR]
by yozda | 2009-10-06 22:43 | プログラミング | Trackback | Comments(0)
トラックバックURL : http://yozda.exblog.jp/tb/9067281
トラックバックする(会員専用) [ヘルプ]
<< [Youtube] LEGOで... [日記] 会社のソフトボール大会 >>