Пользовательская функция - передача параметра

Евгений ПришкоЕвгений Пришко Украина, Харьков
отредактировано 15:56 Раздел: FastReport 2.xx VCL
Доброго дня, уважаемые!
сегодня столкнулся с интересной ситуацией при написании своей функции.
поскольку она (функция) нужна в только в одно отчете, то решил не добавлять ее в общий набор, асделать через OnUserFunction.
в качестве параметров передавал следующее:
параметр 1 - цифра
параметр 2 - строка, результат выполнения функции [copy([датасет."поле"],1,столько-то)]
т.е. в скрипте это выглядело так
для бэнда уровня 1
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 2)])];
для бэнда уровня 2
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 4)])];
для бэнда уровня 3
memo :=[GetParentName(1,[copy([setRResult."hierarchy"],1, 6)])];

2,4,6 - это длина, которая зависит от уровня вложености бэнда

на входе в обработчик OnUserFunction значение второго параметра было равно [copy([setRResult."hierarchy"],1, 2)], т.е. функция не выполнялась

вопрос 1:
почему не выполнялось вычисление второго параметра?
варианты ответа:
1 мне надо пофиксить руки
2 где чего-то глючит
3 ваш вариант

вопрос 2:
что сделать, чтобы я получал значение выражения , а не само выражение ?

Комментарии

  • отредактировано December 2003
    написал:
    вопрос 1:
    почему не выполнялось вычисление второго параметра?

    Ты не поверишь, но при вызове твоей функции вообще не вычисляется значение ни первого, ни второго и не третьего (если он есть конечно) параметра ;) )
    написал:
    варианты ответа:
    1 мне надо пофиксить руки

    Хороший вариант ;) )
    написал:
    2 где чего-то глючит

    Наврядли ...
    написал:
    3 ваш вариант

    Вообще не плохобы почитать доку, ну раз руки уже пофиксены и до хелпа им уже не дотянуться, то приведу кусок кода прямо сюда:

    procedure frReportUserFunction(const Name: String; p1, p2, p3: Variant;
    var Val: Variant);
    var Param1:Integer;
    Param2:String;
    begin
    Param1:=frParser.Calc(p1);
    Param2:=frParser.Calc(p2);
    Val:=GetParentName(Param1,Param2);
    end
  • Евгений ПришкоЕвгений Пришко Украина, Харьков
    отредактировано 15:56
    не настолько все у меня плохо, чтобы я док не читал..... ;-)))
    вызывал я parser.calc(param2)...
    результат при param2 имеющем вид [copy([setRResult."hierarchy"],1, _2_)]
    (выделнная цифра меняется) всегда был 0
    а должна быть строка минимум из 2-символов

    так что, может руки и надо фиксить, но до законченного ламера мне (я недеюсь) далеко

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

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