Mi chiedo se DWScript supporti l'utilizzo di un metodo di script come gestore di eventi per un controllo su un modulo Delphi. Ad esempio voglio collegare un evento OnClick di TButton a un metodo che esiste nello script.Delphi Web Script (DWScript) collega un metodo di script a un evento di controllo esterno
Sono in grado di farlo con il motore di script RemObjects Delphi chiamando GetProcMethod che restituisce un oggetto TMethod. Quindi utilizzo SetMethodProp per assegnare il metodo di script all'evento OnClick di un pulsante.
procedure LinkMethod(SourceMethodName: String; Instance: TObject; ScriptMethodName: String);
var
ScriptMethod: TMethod;
begin
ScriptMethod := ScriptEngine.GetProcMethod(ScripMethodName);
SetMethodProp(Instance, SourceMethodName, ScriptMethod);
end;
mi piacerebbe farlo in DWScript al posto del Rem oggetti motore di script, come fa alcune altre cose che ho bisogno.
Grazie per quello. Purtroppo però non conoscerò il nome dell'evento dei parametri richiesti fino al runtime. RemObjects gestisce l'intercettazione della chiamata all'evento e l'inoltro dei parametri sul gestore di eventi script. In questo modo non hai bisogno di sapere nulla sul metodo che viene invocato in fase di compilazione. Speravo che DWS facesse qualcosa del genere. –
Al momento non è possibile perché DWScript è pensato per essere completamente sandboxable e mira alla sicurezza, l'approccio utilizzato da RemObject causerà corruzione della memoria o arresti anomali in caso di mancata corrispondenza tra i parametri. L'RTTI è progredito un po 'su questo, ma sarà comunque vulnerabile a perdite di memoria o AV, dal momento che non c'è modo di automatizzare la gestione della memoria per gli eventi Delphi. Se qualcuno può vivere con queste limitazioni e pubblicare il codice di supporto, lo integrerò ... con le opportune avvertenze "cautela" ;-) –