anchor.diff:  function TAppPython.RunEvent(const AModule, ACmd: string; AEd: TObject;
     const AParams: TAppVariantArray; ALazy: boolean): TAppPyEventResult;
   var
  -  ObjName, SParams: string;
  +  ParamsObj: array of PPyObject;
  +//
  +  procedure InitParamsObj;
  +  var
  +    ObjCudatext, ObjCudatextDict: PPyObject;
  +    ObjEditor, ObjEditorArgs: PPyObject;
  +    i: integer;
  +  begin
  +    SetLength(ParamsObj, Length(AParams)+1);
  +
  +    with FEngine do
  +      if AEd=nil then
  +        ParamsObj[0]:= ReturnNone
  +      else
  +      begin
  +        //1st param is "Editor(AEd_handle)"
  +        ObjCudatext:= ImportModuleCached('cudatext');
  +        ObjCudatextDict:= PyModule_GetDict(ObjCudatext);
  +        ObjEditor:= PyDict_GetItemString(ObjCudatextDict, 'Editor');
  +        ObjEditorArgs:= PyTuple_New(1);
  +        PyTuple_SetItem(ObjEditorArgs, 0, PyLong_FromLongLong(PtrInt(AEd)));
  +        ParamsObj[0]:= PyObject_CallObject(ObjEditor, ObjEditorArgs);
  +        Py_XDECREF(ObjEditorArgs);
  +      end;
  +
  +    for i:= 0 to Length(AParams)-1 do
  +      ParamsObj[i+1]:= AppVariantToPyObject(AParams[i]);
  +  end;
  +  //
  +var
  +  ObjName: string;
     tick: QWord;
     i: integer;
   begin
  
positive.code:     //UseFileMode=True to allow running several statements with ";"
  end;
  
  function TAppPython.MethodEvalObjects(const AObject, AFunc: string; AParams: array of PPyObject): PPyObject;
  var
    CurrObject, Func, Params: PPyObject;
    i: integer;
  
negative.code:       end;
      end;
  
      InitParamsObj;
      Result:= MethodEvalEx(ObjName, ACmd, ParamsObj);
    end
    else
    //lazy event: run only of ObjName already created
    if IsLoadedLocal(ObjName) then
    begin
      InitParamsObj;
      Result:= MethodEvalEx(ObjName, ACmd, ParamsObj);
    end;
  
    FRunning:= false;
  
    if Assigned(EventTimes) then
    begin
  