Как можно спозиционировать PageFooter?

отредактировано 07:44 Раздел: FastReport 3.0
Добрый день!

Не подскажет ли кто-нибудь как можно правильно спозиционировать подвал страницы? Когда страница полная, то проблем нет. А когда страница заполена не до конца, PageFooter всё равно печатается внизу страницы, отрываясь от данных (MasterData band). А как сделать так, чтобы на неполных страницах подвал "подтягивался" и печатался сразу под данными?

Премного благодарствую...

Комментарии

  • отредактировано 07:44
    Спасибо, сам нашёл ответ. Такой вопросик уже был примерно месяц назад ...
  • отредактировано 07:44
    Рано обрадовался: в подвале есть вычисляемые постраничные данные, при таком решении
    procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
    begin
        if Engine.FreeSpace<PageFooter1.Height+MasterData1.Height then
          Engine.ShowBand(PageFooter1);
    end;
    
    данные из последней строки данных на странице в постраничные суммы не попадают.
    А как сделать чтобы попадали???
  • gpigpi
    отредактировано 07:44
    var y: extended;                                  
    procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
    begin
         y:=Engine.CurY;                                
    end;
    
    procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
    begin
         Engine.CurY:=y;                              
    end;
    
  • отредактировано 07:44
    Спасибо, это прокатило! И есть ещё один вопросик:
    в подвале страницы надо прописью написать количество строк данных на странице. У меня в коде есть функция перевода числительных в строку:
    function  NumSpell ( num: LongInt; FirstCapital: boolean ) : string;
    
    я зарегистрировал её в отчёте:
       frReport.AddFunction('function NUMSPELL(num: LongInt; FirstCapital: boolean):string');
    
    , вставил обработчик
    function TFR3PrintForm.frReportUserFunction(const MethodName: String;
      var Params: Variant): Variant;
    begin
      if ( MethodName = 'NUMSPELL' ) then
        Result := NUMSPELL ( Params[0] , Params[1] );
    end;
    
    теперь если в Memo в BeforePrint ставлю
    Memo126.Memo[0] := NUMSPELL(10,False);, то выводится слово "десять", а
    если
    Memo126.Memo[0] := NUMSPELL(COUNT(MasterData1),False); или
    Memo126.Memo[0] := NUMSPELL(StrToInt(COUNT(MasterData1)),False);, то выводится сообщение о неправильном преобразовании variant.
    Так какой же тип данных возвращает COUNT? В описании написано, что агрегатные функции 'возвращают неформатированное числовое значение'. И как его передать в функцию, которая хочет LongInt?

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

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