我想知道DWScript是否支持使用腳本方法作爲Delphi窗體上控件的事件處理程序。例如,我想將TButton OnClick事件鏈接到腳本中存在的方法。Delphi Web腳本(DWScript)將腳本方法鏈接到外部控件事件
我可以用RemObjects Delphi腳本引擎通過調用返回TMethod對象的GetProcMethod來做到這一點。然後,我使用SetMethodProp將腳本方法分配給按鈕的OnClick事件。
procedure LinkMethod(SourceMethodName: String; Instance: TObject; ScriptMethodName: String);
var
ScriptMethod: TMethod;
begin
ScriptMethod := ScriptEngine.GetProcMethod(ScripMethodName);
SetMethodProp(Instance, SourceMethodName, ScriptMethod);
end;
我想這樣做在DWScript代替雷姆對象的腳本引擎,因爲它做一些其他的東西,我需要。
謝謝你。不幸的是,我不知道直到運行時所需的參數事件的名稱。 RemObjects處理攔截事件調用並將參數轉發到腳本事件處理程序。這樣你就不需要知道在編譯時調用的方法。我希望DWS能做這樣的事情。 –
目前還沒有完成,因爲DWScript是完全可以沙盒化的,並且旨在實現安全,RemObject使用的方法會導致內存損壞或崩潰(如果參數不匹配)。 RTTI在這方面已經取得了一些進展,但它仍然容易受到內存泄漏或AV的影響,因爲沒有辦法自動化Delphi事件的內存管理。 如果有人可以忍受這些限制併發布支持代碼,我會將其與適當的「謹慎」通知進行整合......-) –