如何查找变量调用TdwsGlobal.onReadVar / OnWriteVar事件

时间:2013-05-17 13:27:41

标签: delphi dwscript

我在DWSUnit中动态创建变量,如下所示:

v := dwsUnit.Variables.Add('c', 'float'); // etc
v.OnWriteVar := writeVar;
v.OnReadVar := readVar;

所有变量都指向相同的事件过程。

问题是我无法弄清楚如何确定哪个变量触发了事件。

该事件只给我一个TprogramInfo结构,但我找不到任何内容来识别实际变量。

如果我在设计时创建了变量,我可以为每个变量创建一个单独的事件,但是当动态创建变量时,这是不可能的。

我在这里遗漏了什么。

我刚刚开始使用DWS并且已经获得了我需要的大部分工作,但是我被困在这里!

1 个答案:

答案 0 :(得分:2)

你应该在变量上附加一个事件。如果您正在动态创建它们并想要跟踪变量,您可以将事件移动到一个类,创建该类并将其用于事件,例如

type
   TVariableEventHandler = class
      Name : String; // store variable name here (or better, something more relevant)
      procedure DoWrite(info: TProgramInfo; var value : Variant);
      procedure DoRead(info: TProgramInfo; const value : Variant);
   end;

然后声明变量

handler := TVariableEventHandler.Create; 
handler.Name := 'c'; // etc
v := dwsUnit.Variables.Add('c', 'float'); // etc
v.OnWriteVar := handler.DoWrite;
v.OnReadVar := handler.DoRead;

在实践中,不是将Name存储在处理程序实例中,你可能最好存储一个更直接的引用来实现你真正暴露的内容。

您还可以将处理程序的DoWrite / DoRead方法设为虚拟,并提供专门的实现。