Как управлять шириной заголовка отчета?

отредактировано 18:17 Раздел: FastReport 4.0
Строится кросс (TfrxCrossView), для странички задана бумага "бесконечной" ширины.
Реальная ширина, естественно, получается всякий раз разная.

Надо бы, чтобы надпись в заголовке выравнивалась по серединке.

Как вычислить реальную ширину кросс-отчета, чтобы, например, в скрипте задать нужный отступ?

Спасибо.

Комментарии

  • отредактировано December 2009
    написал:
    Надо бы, чтобы надпись в заголовке выравнивалась по серединке.
    Если предположить, что в отчете есть заголовок отчета ReportTitle1, на заголовке отчета есть мемо Memo1, то в Delphi это можно сделать так:
    (frxReport1.FindObject('ReportTitle1') as TfrxReportTitle).Stretched := true; // растягивание заголовка по ширине страницы
    (frxReport1.FindObject('Memo1') as TfrxMemoView).HAlign := haCenter;     // выравнивание текста по центру мемо
    (frxReport1.FindObject('Memo1') as TfrxMemoView).Align := baCenter;       // выравнивание мемо по центру заголовка
    

    В дизайнере еще проще. Нужно выставить для ReportTitle1 свойство Stretched равным true. Для Memo1 свойство HAlign равным haCenter, и свойство Align равным baCenter.
  • отредактировано 18:17
    Спасибо.

    На самом деле, вопрос сложнее.

    Например, нужно растягивать некоторые поля в заголовке в соответствии с реальной шириной бумаги.
    Слева на заголовке - картинка-логотип (не растягиваемый), правее от него - название отчета ("мемка", которую нужно разместить в рамке).

    Левая граница рамки фиксирована и должна находиться сразу за логотипом, а правая граница рамки должна быть выровнена по актуальной правой границе кросс-отчета.
    Т.е., нужно рассчитать и установить ширину этого поля.

    <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->
    [Логотип][<--- Название отчета (растянуть до правой границы кросса)--->]

    [<------------------- Кросс (переменной ширины)----------------------->]

    <!--fontc--></span><!--/fontc-->

    Хорошо бы (в т.ч.) иметь возможность задавать Ancors, как в дизайнере форм Delphi.

    Вопрос: как вычислить ширину кросс - отчета при формировании заголовка отчета?
  • отредактировано 18:17
    У объекта текст, который должен растягиваться установите Align=baWidth, HAlign=haCenter.
    Пример отчета из mainDemo приложен.
  • отредактировано 18:17
    1. Спасибо.

    2. Вопрос: как узнать ширину кросс - отчета? :)
  • отредактировано 18:17
    До построения - никак.

    Кросс сначала заполняется данными, потом вычисляются высота и ширина объектов, потом кросс выводится.

    Можно вычислить в скрипте
    Var
     Wd: extended = 0;
    
    procedure Cross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
    begin
      if RowIndex = 0 then
         Wd := Wd + Memo.Width;                    
    end;
    

    Но для хидера такой вариант будет работать только в 2-х проходном отчете, если на первом проходе сохранить ширину кросса.
    Только в Вашем случае смысла в этом не вижу, проще и быстрее сделать через Align(вместо двойного построения отчета).
  • отредактировано 18:17
    написал: »
    До построения - никак.

    Кросс сначала заполняется данными, потом вычисляются высота и ширина объектов, потом кросс выводится.

    Можно вычислить в скрипте
    Var
     Wd: extended = 0;
    
    procedure Cross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
    begin
      if RowIndex = 0 then
         Wd := Wd + Memo.Width;                    
    end;
    

    Но для хидера такой вариант будет работать только в 2-х проходном отчете, если на первом проходе сохранить ширину кросса.
    Только в Вашем случае смысла в этом не вижу, проще и быстрее сделать через Align(вместо двойного построения отчета).

    1. Ну, я так и делаю. Жалко, конечно, что сам TfrxCrossView "не знает" свою итоговую ширину (после построения, конечно).

    2. Через Align's никак. Отчет реально сложнее, чем упомянутые мной два примера.

    3. Спа-си-бо! :)

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

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