Вопросы по CrossTab

AM_AM_
отредактировано 15:07 Раздел: FastReport 3.0
1. Можно ли в CrossTab-е сдвинуть (н-р вправо) область всех элементов, не затрагивая заголовки строк и столбцов.
2. Как разместить CrossTab в произвольном месте страницы.

Комментарии

  • отредактировано 15:07
    1. Не понял, что имеется в виду.
    2. Пока никак - печать начинается с левого поля страницы.
  • отредактировано 15:07
    Казалось бы простейшая задача: "растянуть CrossTab по ширине страницы". Т.е. заранее известно, что число колонок и их ширина не будет заоблачной. При этом хотелось бы, чтобы кросс занимал всю ширину страницы, а не ее часть. Делаем скрипт:
    procedure DBCross1OnCalcWidth(ColumnIndex: Integer; ColumnValues: Variant; var Width: Extended);
    begin
      if Engine.FinalPass then Width:=
        (DBCross1.Width-GrandTotalWidth-DBCross1.Left)/DBCross1.ColCount;
    end;
    
    Для вычисления GrandTotalWidth используем:
    procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
    begin
      if (DBCross1.IsGrandTotalColumn(ColumnIndex)) and
        (GrandTotalWidth<Memo.Width) then GrandTotalWidth:=Memo.Width;
    end;
    
    В итоге результат лучше, чем по-умолчанию, но иногда колонка "итого по строке" все же "перескакивает" на другую страницу или не дотягивается до правого края.
    Приведенный выше код был получен в результате долгих экспериментов и мне не совсем понятно почему если не учитывать ширину заголовков строк, то результат получается более вменяемым, чем если их учитывать.

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

    Еще. Без ниже приведенного кода на больших кроссах некоторые строки налазят друг на друга/или выводятся высотой около 2. Как именно не могу сейчас сказать, т.к. сейчас нету времени визуально анализировать тот мусор, который лезет на экран/печать.
    procedure DBCross1OnCalcHeight(RowIndex: Integer; RowValues: Variant; var Height: Extended);
    begin
      Height:=MasterData1.Height;
    end;
    

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

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