обработка Onuserfunction в С++builder6

отредактировано 10:30 Раздел: FastReport 4.0
Вот мой обработчик:
Variant __fastcall Tfp_et2::frxReport1UserFunction(
const AnsiString MethodName, Variant &Params)
{

Variant vr_ = "12345";
if ( MethodName == "GETPAR" )
{
vr_ = "54321";
}
return vr_;

}
//

В тексте выззываю: ".... [GETPAR(1,2)].."

1. Почему выдает ошибку??
2. Как обратится к первому и второму параметру??

Комментарии

  • gpigpi
    отредактировано 10:30
    1. Ошибку выдавать не должно, если Вы добавили функцию с помощью AddFunction
    2. В руководстве разработчика есть пример (для Delphi)
    Для "божественного" (http://bash.im/quote/420225) будет примерно так
    {
    int i = 0;
    Variant vr_ = "12345";
    if ( MethodName == "GETPAR" )
    {
    if (VarArrayGet(Params, &i, 0) == 1) {
    vr_ = "par = 1";
    }
    else
    {vr_ = "par <> 1";}
    }
    return vr_;
    }
  • отредактировано 10:30
    gpi спасибо, - работает.

    Единственно, не пойму смысла в AddFunction для общего случая, например с 3-мя параметрами.
    И еще вопрос, а нельзя ли объявление функции делать в дизайнере??
    Т.е. в приложении не вызывать addfunction??
    Это было бы удобнее...

  • gpigpi
    отредактировано 10:30
    написал:
    Единственно, не пойму смысла в AddFunction для общего случая, например с 3-мя параметрами.
    Любую пользовательскую функцию нужно зарегистрировать независимо от количества параметров
    написал:
    И еще вопрос, а нельзя ли объявление функции делать в дизайнере??
    И еще вопрос, а нельзя ли объявление функции делать в дизайнере??
    В этом случае функция должна быть в скрипте отчёта. И обработчик OnUserFunction будет не нужен
  • отредактировано 10:30
    ->"Любую пользовательскую функцию нужно зарегистрировать независимо от количества параметров"
    А зачем?? Ведь мне в OnUserFunction нужно только имя и параметры....как это было в версии 2.x :) )

    Ну да ладно уж, но в таком случае удобнее было-бы ее регистрировать в дизайнере, чтобы не заморачиваться
    в приложении, потому как скрипт не имеет возможностей приложения.
  • gpigpi
    отредактировано 10:30
    Что означает "регистрировать в дизайнере"?
    написал:
    как это было в версии 2.x
    Я представляю, сколько нытья будет после выхода пятёрки. Многим будет нужно "как было в FR 4"
  • отредактировано 10:30
    ->Что означает "регистрировать в дизайнере"?

    Фукция, которая обрабатывается OnUserFunction фантомная,- имеет только имя и параметры и только в среде FR.
    Так зачем ее регистрировать из приложения??
    т.е. мне надо думать про ее описание для FR в приложении.
    (типа ... frxReport1->AddFunction( "function GETPAR( c1_: String; c2_: String ): String" );... )
    Вместо того, чтобы добавить такую-же строку в список юзерских функций во время конструирования отчета в дизайнере....
    да и большой плюс, что этот список будет хранится в файле отчета...

    Ну а если она будет описана и задействована в FR, а обработчика в приложении вдруг не будет, то и ладно.
    Можно вторым приоритетом вызывать такую-же из скрипта.


    -> Я представляю, сколько нытья будет после выхода пятёрки. Многим будет нужно "как было в FR 4"

    Поддержка старых версий - базовый принцип строительства ПО.
    Да и винда не была б в таком фаворе, если б вдруг отказалась от CMD:))



    Вот еще не разобрался с подключением датасетов.
    Старый FR автоматом показывал все доступные датасеты в приложении.
    теперь показываются тока собственные frxDBDataset...
    Что совсем не гуд.
    Те для каждого датасета должен ли я сбрасывать на форму frxDBDataset ????


  • gpigpi
    отредактировано 10:30
    написал:
    Вместо того, чтобы добавить такую-же строку в список юзерских функций во время конструирования отчета в дизайнере....
    Так после AddFunction описание пользовательской функции появится в runtime-дизайнере
    написал:
    Поддержка старых версий - базовый принцип строительства ПО.
    FR2, FR3-FR4 совершенно разные продукты. FR5, судя по презентации, тоже будет другим
    написал:
    Ну а если она будет описана и задействована в FR, а обработчика в приложении вдруг не будет, то и ладно.
    Можно вторым приоритетом вызывать такую-же из скрипта.
    Даже не представляю, как это можно реализовать, как это будет работать
    написал:
    теперь показываются тока собственные frxDBDataset...
    Да
    написал:
    Те для каждого датасета должен ли я сбрасывать на форму frxDBDataset ????
    Не обязательно. У меня в приложениях количество frxDBDataset - максимальное число датасетов, которое используется в отчётах. В моём случае - 3. Пользователь одновременно может сформировать один отчёт
  • отредактировано 10:30
    Вот я и говорю, что с каждой версией как-то "дитя без глазу"...

    Разве реализовать поддержку например старого варианта OnUserFunction
    или показать все доступные датасеты требует немерянной работы???

  • Stalker4Stalker4 123
    отредактировано 10:30
    написал:
    FR5, судя по презентации
    О какой презентации идет речь ? О той что была где то год-два назад в виде картинок или была какая то еще более новая презентация FR5 ?

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

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