ColumnFooter в FR3

отредактировано 17:17 Раздел: FastReport 3.0
Здравствуйте!
Знакомлюсь с FR. Очень приятный продукт. Но вот одну проблемку решить не могу.

Очень хочется, что-бы ColumnFooter после последнего MasterData отрисовывался не внизу страницы, а сразу после. Посмотрел в FR252 - тама работает, и вроде без дополнительного кодирования. Может чего не досмотрел?

Спасибо

Комментарии

  • отредактировано 17:17
    Вначале объявляешь переменную
    var
    LastTop:extended;

    На Masterdata1 в событии прописывешь
    procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
    begin
    LastTop:=MasterData1.Top;
    end;

    В Мемо1 (который лежит на MasterData1)
    procedure Memo1OnBeforePrint(Sender: TfrxComponent);
    begin
    Lasttop:=LastTop+Memo1.Height;
    end;

    В событии PageFooter1 для каждой Мемы прописываешь новую координату
    procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
    begin
    Memo2.Top:=Lasttop-PageFooter1.Top+2;
    Memo3.Top:=Lasttop-PageFooter1.Top+2;
    end;
    "2" - из за обрамления
    М.б. есть способ и полегче, только я пока не нашел ;)


  • отредактировано 17:17
    Вообще-то, по моему, надо бы подправить.
    В английских ньюсах уже было письмо на это тему.
    Без ответа ;)
  • отредактировано 17:17
    Вариант, который я ранее описал не "прокатывает". Долго возился и получился такой ниже описанный вариант. Конкретно я его делал для того чтобы в накладной (ТОРГ 12) PageFooter с итогами по странице подвигался вверх до строчек со значениями.

    // переменная содержащая верхнюю координату, ее где нибудь инициализировать 0 на всякий случай
    var LastTop:extended;
    var nbAllLines:integer; // В эту переменную нужно подставить количество строчек всего по накладной (вычислить)

    procedure MasterData1OnAfterPrint(Sender: TfrxComponent);
    begin
    Lasttop:=MasterData1.top+MasterData1.Height;
    // Ниже алгоритм нужен для того чтобы, если подвал накладной не влезает на страницу внизу то "форсировать" новую страницу и отобразить на ней хотя бы одну строчку из накладной
    if (nbAllLines-1=<Line#>)and(LastTop>=460) then
    begin
    Engine.NewPage;
    end;
    end;

    procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
    begin
    // Изменить текущую координату "движка"
    if lastTop<>0 then
    Engine.Cury:=Lasttop;
    end;

    Аналогично, наверное, можно применить и к ColumnFooter
  • отредактировано 17:17
    В 3.03 поправил.
  • отредактировано 17:17
    Да, второй ваиант с "движком", спасибо.
  • отредактировано 17:17
    SeregaG, спасибо за помощь.
    Получилось и с ColumnFooter-ом, только появилась одна доп проблемка. Если меняем "движок", то меняется не только расположение ColumnFooter, но и следующий за ним PageFooter съезжает вверх.

    Надеюсь в 3.03, где как я понял это исправили, все получится.

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

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