Работа с собственными функциями

отредактировано 23:40 Раздел: FastReport 4.0
Приветствую всех!

Решил набросать несколько собственных функций, форматирующих текст нужным мне образом, чтобы в отчете уже все красиво просмотреть.

Написал функции, в обработчике UserFunction добавил следующее:
function TfrmCustomPrintForm.frxReportUserFunction(const MethodName: string;
  var Params: Variant): Variant;
begin
  inherited;
  if MethodName = 'GetSummaToText' then
    Result := GetSummaToText(Params[0])
  else if MethodName = 'NumToStr' then
    Result := NumToStr(Params[0])
  else if MethodName = 'MonthToStrInGenitive' then
    Result := MonthToStrInGenitive(Params[0]);
end;


Далее при динамическом создании формы-потомка от TCustomPrintForm делаю следующее:
  frxReport.AddFunction('function NumToStr(s: string): string');
  frxReport.AddFunction('function GetSummaToText(r: Real): string');

  frxReport.AddFunction('function MonthToStrInGenitive(const Month: Byte): string', 'ctString', 'Месяц в родительном падеже');

Отчет формируется, но именно в тех Memo, где я попытался использовать свои функции результат пустой.

Вот пример использования:
[GetSummaToText(Sum(<qryGoods."SumPrice">, bndMaster))]

Не могу разобраться, почему пусто то. Вроде все правильно делаю. Помогите, пожалуйста.

Комментарии

  • Stalker4Stalker4 123
    отредактировано 23:40
    ProESM написал: »
    Приветствую всех!

    Решил набросать несколько собственных функций, форматирующих текст нужным мне образом, чтобы в отчете уже все красиво просмотреть.

    Написал функции, в обработчике UserFunction добавил следующее:

    Отчет формируется, но именно в тех Memo, где я попытался использовать свои функции результат пустой.

    Не могу разобраться, почему пусто то. Вроде все правильно делаю. Помогите, пожалуйста.
    Имена функций в обработчике frxReportUserFunction надо писать в верхнем регистре.
    То есть должно быть так:
    function TfrmCustomPrintForm.frxReportUserFunction(const MethodName: string;
      var Params: Variant): Variant;
    begin
    
     inherited;
    
     if MethodName = 'GETSUMMATOTEXT' then
       Result := GetSummaToText(Params[0])
     else 
     if MethodName = 'NUMTOSTR' then
       Result := NumToStr(Params[0])
     else 
     if MethodName = 'MONTHTOSTRINGENITIVE' then
       Result := MonthToStrInGenitive(Params[0]);
    
    end;
    

  • отредактировано 23:40
    Спасибо большое, Stalker4!

    Дай Бог тебе здоровья! Детям и внукам твоим!

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

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