как определить программно количество страниц

отредактировано 18:09 Раздел: FastReport 3.0
как определить программно количество страниц

Комментарии

  • gpigpi
    отредактировано 18:09
    В программе
    frxReport1.PrepareReport();
    ShowMessage(IntToStr(frxReport1.PreviewPages.Count));
    
    В скрипте - переменная TotalPages. Отчёт должен быть двухпроходным
  • отредактировано 18:09
    я программно создаю отчет, как мне узнать количество страниц после его выполнения?
  • gpigpi
    отредактировано 18:09
    А так разве не работает?
    frxReport1.PrepareReport();
    ShowMessage(IntToStr(frxReport1.PreviewPages.Count));
    
  • отредактировано 18:09
    спасибо получилось


    вот еще вопрос:

    вот картинка на ней должно быть все понятно

    http://slil.ru/22681999
  • LexLex
    отредактировано 18:09
    var
      MyLine: Integer;
    
    procedure Memo1OnBeforePrint(Sender: TfrxComponent);
    begin
      if Engine.FreeSpace < MasterData1.Height then
        MyLine := 1
      else
        MyLine := MyLine + 1;
    end;
    
    
    begin
      MyLine := 0;
    end.
    

    в самом Мемо1
    [MyLine]
  • отредактировано 18:09
    немного не так меня может поняли

    вопщем если поле с "1" переходит на следющую страницу то эта "1" повторяется на др. странице
  • LexLex
    отредактировано April 2006
    PrintOnNewPage = True у бенда "Заголовок данных"

    нето, теперь понял что надо
  • LexLex
    отредактировано April 2006
    вот что у меня получилось

    1. твою мемку с цифрой(Memo1) ложим на бенд Overlay и делаем его невидимым
    2. добовляем глобальные переменные
    var
    Reprinit: Boolean;
    SaveText: string;


    3. Добовляем следующие обработчики MasterData беднду
    procedure MasterData1OnAfterCalcHeight(Sender: TfrxComponent);
    var
      Y: Extended;
    begin
      if MasterData1.Height > Engine.FreeSpace then
      begin
        OverLay1.Height := Engine.FreeSpace;
        Memo1.Height := Engine.FreeSpace;
        Reprinit := True;
      end else
      begin
        OverLay1.Height := MasterData1.Height;
        Memo1.Height := MasterData1.Height;
        Y := Engine.CurY;
      end;
      Y := Engine.CurY;
      OverLay1.Visible := True;
      Engine.ShowBand(OverLay1);
      OverLay1.Visible := False;
      Engine.CurY := Y;
    end;
    
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    var
      Y: Extended;
      tmpSaveText: String;
    begin
      if Reprinit then
      begin
        OverLay1.Height := Engine.CurY;
        Memo1.Height := Engine.CurY;
        tmpSaveText := Memo1.Text;
        Memo1.Text := SaveText;
        Y := Engine.CurY;
        Engine.CurY := 0;
        OverLay1.Visible := True;
        Engine.ShowBand(OverLay1);
        OverLay1.Visible := False;
        Engine.CurY := Y;
        Memo1.Text := tmpSaveText;
        Reprinit := False;
      end;
    end;
    
    


    4.

    begin
    Reprinit := False; // на всякий случай ;)
    end.

    5. Доболяем обработчик для мемки с числом
    procedure Memo1OnAfterPrint(Sender: TfrxComponent);
    begin
      SaveText := Memo1.Text;
    end;
    

    вроде работает (не проверял если одна запись растяниться на больше чем 2 страницы скорее всего на сработает)


    проверил не работет в случае если
    1. одна запись растяниться на больше чем 2 страницы
    2. елси разрываеться полседняя запись

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

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