Как установить событие на обработчик в скрипте

отредактировано 01:41 Раздел: FastScript
Проблема такая:
У меня загружается скрипт из потока, потом из потока форма. У неё часть методов в дизайнере (самописном) переопределена. Например на форму была кинута кнопка (TButton) с именем Button1, у которой метод OnClick был сохранён как @ButtonClick . А в скрипте была сделана процедура ButtonClick как TNotifyEvent.

Теперь при загрузке формы я через Reader.OnFindMethod, как самый простой путь, хочу вернуть адрес обработчика процедуры ButtonClick. Если не возможно указать адрес метода формы, пускай это будет адрес метода любого другого объекта. Но как его найти и указать? Какой именно метод необходимо указывать?

Помогите пожалуйста.

Из руководства разработчика я нашёл только про добавление формы, доступ к переменным и т.д. и т.п. Любая установка обработчиков событий описана только изнутри скрипта!!!

Комментарии

  • Lizard~Lizard~ Тольятти
    отредактировано 01:41
    Тоже озадачился подобной проблемой.
    В документаци решения не нашел. Похоже, что это сделать не представляется возможным. Скрипт не выполняется и невозможно получить адрес процедуры обработки события.
    У кого-нибудь есть мысль как присваивать обработчики события, описанные в скрипте, обьектам создаваемым в коде Delphi при загрузке сериализованных объектов?
    Пока приходит в голову совсем не оригинальные вариант, править скрипт перед выполнением или компиляцией и присваивать обработчики в коде FS.
  • отредактировано 01:41
    Я реализовал так. После чтения ресурса (создания формы), создаётся скрипт который заполняется присвоением событий форме и её копонентам и выполняется.
  • отредактировано December 2017

    uses
      TypInfo, fs_iinterpreter;
    
    procedure ConnectEvent(fsScript: TfsScript; MyObject: TMyClass);
    var
      v: TfsCustomVariable;
      e: TfsNotifyEvent;
      p: PPropInfo;
      m: TMethod;
    begin
      v := fsScript.Find('MyObjectValueChanged');
    
      if Assigned(v) then
      begin
        p := GetPropInfo(MyObject, 'OnValueChanged');
    
        e := TfsNotifyEvent.Create(MyObject, TfsProcVariable(v));
        fsScript.Add('', e);
    
        m.Code := e.GetMethod;
        m.Data := e;
          
        SetMethodProp(MyObject, p, m);
      end;
    end;
    

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.