как узанть какой Tfrxreport вызвал Callmethod при подключении доп функций

отредактировано 04:05 Раздел: FastReport 4.0
День добрый
как узанть какой tfrxReport вызвал CallMethod при подключении доп функций

type
TFunctions = class(TfsRTTIModule)
private
function CallMethod(Instance: TObject; ClassType: TClass; const
MethodName: String; var Params: Variant): Variant;
public
constructor Create(AScript: TfsScript); override;
end;

function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: String; var Params: Variant): Variant;
begin
if MethodName = 'MYFUNC' then ??????????????????
end;
initialization
fsRTTIModules.Add(TFunctions);
end.

с Уважением Денис

Комментарии

  • mvbmvb Казань
    отредактировано 04:05
    denisww написал: »
    День добрый
    как узанть какой tfrxReport вызвал CallMethod при подключении доп функций

    а зачем? тебе всего лишь надо вернуть результат:
    function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
    const MethodName: String; var Params: Variant): Variant;
    begin
    if MethodName = 'MYFUNC' then
    Result := MyFunc(Params[0]);
    end;
    
  • отредактировано 04:05
    фунуции регистрируются в dll.
    Одновременно можно запускать несколько отчётов
    работают с обьектами
    хотелосьбы понимать кто вызвал функцию, чтобы отыскать обьект
  • mvbmvb Казань
    отредактировано 04:05
    как вариант: передавать указатель на экземпляр tfrxReport первым параметром функции
  • отредактировано October 2007
    Можно воспользоватся уже добавленным в RTTI модуле объектом Report, естественно ваш модуль должен подключатся после frxClass.
    if MethodName = 'MYFUNC' then
    begin
    Rep := TObject(Integer(Script.Find('Report').Value)) as TfrxReport;
    if Rep <> nil then
    ShowMessage(Rep.Name);

    Только при использовании DLL оператор as может не сработать, т.к. один и тот же класс используемый в двух модулях (приложение/длл) не будет идентичным, если собираетесь передавать объекты(ссылки) которые используются в приложении в ДЛЛ , то лучше использовать пакеты делфи, они автоматически управляют RTTI информацией о и классы будут идентичны (т.е. операторы as,is будут работать корректно).

    Или попробуйте так :

    if MethodName = 'MYFUNC' then
    begin
    if TObject(Integer(Script.Find('Report').Value)).ClassName = 'TfrxReport' then
    begin
    Rep := TfrxReport(Integer(Script.Find('Report').Value));
    ShowMessage(Rep.Name);
    end;

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

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