Ich frage mich, ob DWScript unterstützt, eine Skriptmethode als Ereignishandler für ein Steuerelement in einem Delphi-Formular zu verwenden. Zum Beispiel möchte ich ein TButton OnClick-Ereignis mit einer Methode verknüpfen, die im Skript existiert.Delphi-Webskript (DWScript) verknüpfen eine Skriptmethode mit einem externen Steuerelementereignis
Ich bin in der Lage, dies mit der RemObjects Delphi-Skript-Engine durch Aufruf von GetProcMethod, die ein TMethod-Objekt zurückgibt. Ich verwende dann SetMethodProp, um die Skriptmethode dem OnClick-Ereignis einer Schaltfläche zuzuweisen.
procedure LinkMethod(SourceMethodName: String; Instance: TObject; ScriptMethodName: String);
var
ScriptMethod: TMethod;
begin
ScriptMethod := ScriptEngine.GetProcMethod(ScripMethodName);
SetMethodProp(Instance, SourceMethodName, ScriptMethod);
end;
Ich mag würde dies anstelle des Rem in DWScript tun Objekte Skript-Engine, wie es einige andere Sachen tut, die ich brauche.
Danke dafür. Leider werde ich den Namen des Ereignisses der benötigten Parameter bis zur Laufzeit nicht kennen. RemObjects behandelt das Abfangen des Ereignisaufrufs und das Weiterleiten der Parameter an den Skript-Ereignishandler. Auf diese Weise müssen Sie nichts über die Methode wissen, die zum Zeitpunkt der Kompilierung aufgerufen wird. Ich hatte gehofft, dass DWS so etwas macht. –
Es ist im Moment nicht fertig, weil DWScript vollständig sandboxbar sein soll und Sicherheit anstrebt. Der Ansatz, den RemObject verwendet, führt zu Speicherbeschädigung oder stürzt ab, wenn die Parameter nicht übereinstimmen. Die RTTI ist ein bisschen weitergekommen, aber sie ist immer noch anfällig für Speicherlecks oder AV, da es keine Möglichkeit gibt, die Speicherverwaltung für Delphi-Ereignisse zu automatisieren. Wenn jemand mit diesen Einschränkungen leben und unterstützenden Code veröffentlichen kann, werde ich ihn integrieren ... mit entsprechenden "Vorsicht" -Anmerkungen ;-) –