Проблема с объектом Engine

отредактировано January 2006 Раздел: FastReport 3.0
При попытке запихнуть код, содержащий ссылки на объект Engine (Engine.NewPage, Engine.ShowBand(Child1)) на событие OnBeforePrint в PageFooter или любой объект, на нем находящийся, и запуске отчета на выполнение происходит следующее:
- Если отчету назначен ДатаСет, то вылетает AV.
- Если датасета нету, то улетает дельфи. Сообщений о ошибке не вылетает. просто тихо и спокойно завершается процесс delphi32.exe.

Комментарии

  • отредактировано 06:36
    Получается бесконечный цикл. Не надо этого делать в PageFooter.
  • отредактировано January 2006
    ммм.. а тогда может подскажите, как такое можно сделать:

    у меня мастер дата переносится на вторую страницу, мне перед page-footer'ом и после конца master-data нужно вставить бенд с дополнительной строкой. Я бы сделал это в page_footer, но эта строка нужна впритык к masterdata, а не в конце (*исправлено*)страницы.
  • отредактировано 06:36
    ReportSummary не подходит?
  • отредактировано 06:36
    Report Summary печатается в конце отчета.. после MasterData, а строка мне нужна на первой странице. на месте обрыва MasterData
  • отредактировано 06:36
    Пробовал менять высоту PageFooter'а, чтобы подогнать его под размер свободного пространства. Но высота не меняется.
    procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
    begin
     PageFooter1.Height := Engine.FreeSpace;
    end;
    
  • gpigpi
    отредактировано 06:36
    К MasterData пристрой Child и в событии MasterDataOnBeforePrint управляй видимостью этого Child.
    Высоту PageFooter получается менять в событиях тех бэндов, которые печатаются до PageFooter
  • отредактировано 06:36
    А как мне определить в какой момент мастер-дата будет разорван для перехода на другую страницу?

    ( у меня KeepFooter = True);
  • gpigpi
    отредактировано 06:36
    в MasterData1OnBeforePrint:
    Child1.Visible:=Engine.FreeSpace<MasterData1.Height*2+Child1.Height;
  • отредактировано 06:36
    не работает. Основную проблему у меня создает большой футер. Раздел страницы должен происходить, если футер не умешается целиком на перый лист. и в этом случае часть (заголовок, и один или более рядов мастер-даты) должны переместится на второй лист. Для этого я использую MasterData.KeepFooter.

    Но, посколько FreeSpace на странице может быть довольно много (1/3) где-то то туда может поместится и чайлд и мастер.дата даже 2 раза.
  • gpigpi
    отредактировано 06:36
    Высота футера переменная? Если так, то на первом проходе определить высоту футера, а на втором - разбить страницу
    Child1.Visible:=(Engine.FinalPass) and (Engine.FreeSpace < MasterData1.Height*2+Child1.Height+Footer1.Height);
    Не знаю, как получится с Footer1.Height в выражении, приведённом выше.
    Если не будет корректно работать, то на первом проходе Footer1.Height нужно сохранить в переменной и
    Child1.Visible:=(Engine.FinalPass) and (Engine.FreeSpace < MasterData1.Height*2+Child1.Height+MyVariable);
  • отредактировано January 2006
    с этим не получилось. но получилось реализовать другим кодом..
     Child1.Visible := False;
      if (Engine.FreeSpace<Footer1.Height) then f := True;
      if (f) and (Engine.FreeSpace<MasterData1.Height*3) then Child1.Visible := True;
      if (f) and (<line#> = <RecordCount> -1) then Child1.Visible := True;
    

    f - boolean - глобальная.
    RecordCount - переменная в которой содержится полное кол-во рядов мастер-дата.

    Всем спасибо за помощь ;)

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

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