投稿

2月, 2022の投稿を表示しています

Delphi で CreateOleObject のイベント処理

イメージ
Delphi の CreateOleObject で呼び出したオートメーションサーバのイベント処理 タイプライブラリから .pas を生成しろというコメントが散見されるほど、資料が少なく面倒でした.該当する GUID や DispID を調べる必要があります ScriptControl を例に、TScriptControlEventSink クラスを作成して、OnError と OnTimeout イベントを関連付けしています CreateOleObject と TScriptControlEventSink を利用したイベント追加 var ScriptControl: OleVariant; ScriptControlEventSink: TScriptControlEventSink; begin ScriptControl := CreateOleObject('ScriptControl'); try ScriptControl.Language := 'VBScript'; ScriptControl.Timeout := 2000; ScriptControl.AllowUI := False; // Event ScriptControlEventSink := TScriptControlEventSink.Create(ScriptControl); try ScriptControlEventSink.OnError := Form1.OnScriptError; ScriptControlEventSink.OnTimeout := Form1.OnScriptTimeout; // ScriptControl.Run(...); finally ScriptControlEventSink.Free; end; finally ScriptControl := Unassigned; en