Как подключить свою функцию

отредактировано 02:54 Раздел: FastReport 4.0
Блин весь и-нет перерыл, нашел один пример и то он из FR2.7 в четвертом нифига не прокатывает...
Если у кого есть пример печати суммы прописью именно в четверке... буду ОЧЕНЬ благодарен!

Комментарии

  • gpigpi
    отредактировано 02:54
    При создании/показе формы:
    Report_3.AddFunction('function SummaPropis(summa: Double):String');
    
    Обработка пользовательской функции:
    function TMainForm.Report_3UserFunction(const MethodName: String;
      var Params: Variant): Variant;
    begin
         if MethodName='SUMMAPROPIS' then //имя функции в верхнем регистре
           begin
             if Params[0]<>null then
               Result := SummaPropis(Params[0])
             else
               Result := SummaPropis(0);
           end;
         end;
    
  • отредактировано 02:54
    спасибо огромное! Сработало! Гдеб мануал по fr4 скачать...
  • gpigpi
    отредактировано 02:54
    написал:
    Гдеб мануал по fr4 скачать...
    http://fast-report.com/ru/download/fast-re...4-download.html
  • отредактировано 02:54
    Прошерстил форум, но решения своей проблемы не нашел...
    FastReport 4.5 Pro, С++ Builder 5, Windows XP SP2.
    //main.cpp
    void __fastcall TfrmMain::FormShow(TObject *Sender)
    {
     frxrMain->AddFunction("AnsiString FormatPrice(double price)", "Дополнительные", "Форматирование цены");
    }
    //---------------------------------------------------------------------------
    Variant __fastcall TfrmMain::frxrMainUserFunction(
          const AnsiString MethodName, Variant &Params)
    {
     //if(AnsiCompareText("FORMATPRICE", Name)==0)
     if( MethodName == "FORMATPRICE" )
      return (Variant)FormatPrice( Params.GetElement(0) );
    }
    //---------------------------------------------------------------------------
    void __fastcall TfrmMain::btnReportClick(TObject *Sender)
    {
     const AnsiString asTable( asStartDir + "podtv.dbf" );
    
     if( conExportR->Connected) { dsExportR->Close(); conExportR->Close(); }
     OpenDBF( asTable );
    
     if( FileExists (asStartDir + "label.fr3") )
      {
       frxrMain->Script->Variables["APTEKA"]  = "Аптечный пункт №1 аптеки №150";
       frxrMain->LoadFromFile( asStartDir + "label.fr3", false );
       if( frxrMain->PrepareReport(true) ) frxrMain->ShowPreparedReport();
      }
    
     dsExportR->Close(); conExportR->Close();
    }
    //---------------------------------------------------------------------------
    
    //functions.cpp
    //---------------------------------------------------------------------------
    double Round1(double Argument, int Precision)
      {
      double div = 1.0;
      if(Precision >= 0) {
        while(Precision--)
         div *= 10.0;
       }
      else {
        while(Precision++)
         div /= 10.0;
       }  
      return floor(Argument * div + 0.5) / div;
      }
    //---------------------------------------------------------------------------
    AnsiString FormatPrice(double price)
    {
     double dRounfPrice = 0, dInt = 0, dFloat = 0;
    
     dRounfPrice = Round1(price, 2);
     dInt        = modf(dRounfPrice, &dFloat);
     
     return FloatToStr(dInt) + " руб. " + FloatToStr(dFloat) + " коп.";
    }
    //---------------------------------------------------------------------------
    
    Текст в Memo в отчете:
    [FormatPrice(<Labels."SENA">)]
    

    На строчке
    if( frxrMain->PrepareReport(true) ) frxrMain->ShowPreparedReport();
    
    получаю ошибку "Слишком много параметров". Поднял документация по FR3-4 - про пользовательские функции ни слова...
  • gpigpi
    отредактировано 02:54
    Попробуйте так
    void __fastcall TfrmMain::FormShow(TObject *Sender)
    {
    frxrMain->AddFunction("function FormatPrice(price: Extended): String", "Дополнительные", "Форматирование цены");
    }
    
  • отредактировано 02:54
    gpi, благодарю, заработало. Т.е. описание функции обязательно должно быть на Паскале?

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

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