Масштабирование отчёта

отредактировано January 2005 Раздел: FastReport 3.0
Нужна ваша помощь по следующему вопросу:
Необходимо масштабировать элементы отчёта зависимости от размеров бумаги (например, заново вычислять ширину колонок) чтобы при любых условиях отчёт выглядел одинаково.
Думаю, лучше всего это сделать при помощи скриптов. Проблема в том, что не понятно, какое событие вызвается при этом. Пробовал все события, но по-моему больше всего подходит OnBeforePrint, только оно работает лишь при вызове отчёта и если в окне Page Settings отметить Apply to All Pages. Конечно, есть выход - написать свой Page Settings, но хотелось бы всё-таки стандартными методами.
Fast-Report версии 3.07.

Комментарии

  • отредактировано 01:22
    Действительно. Вот кидаю в одну линию на ReportTitle-band четыре MemoView объекта, перечисляю справа-налево!!!:
    2 TSysMemoView (Time, Date) и 1 пустой (EMPTY c пробелами для разделения) TfrxMemoView, у всех AutoWidth = True и Align = baRight.
    Далее, на этом же уровне с ними один объект TfrxMemoView (MY_TITLE) для вывода текста передаваемого в отчёт из кода через переменную. У него AutoWidth=False, Align = baWidth.
    Т.е. при выводе отчёта по логике сначала формируется самое крайнее справа (TIME), настараивается его ширина, потом следующее (DATE) настраивается его ширина и он прижимается вправо к TIME полю, потом поле с пробелами также настраивается его ширина и оно прижимается вправо к DATE полю.
    Далее поле MY_TITLE растягивается на всю оставшуюся в строке область.
    Под строкой с этими объектами расположен ещё один TfrxMemoView (MY_TITLE_FLOW) для приёма текста не влазящего в MY_TITLE (MY_TITLE.FlowTo = MY_TITLE_FLOW), у него Align=baWidth (на весь бэнд) и конечно StretchMode=smActualHeight. Т.е. текст титлов начинается на строке с датой и временем и должен обтекать их и печататься ниже на весь бэнд.

    Теперь все глюки которые лезут в превьюшке:
    1. При первой прорисовке поле MY_TITLE остаётся того же размера, что и при проектировании отчёта, т.е. не растянута на оставшееся свободное место после вывода даты и времени в правом углу или наоборот не вжата в это свободное место и налазит на поле DATE. Если затереть область прорисовки, то всё на первый взгляд выглядит правильно. ;) Залез в исходники и если TfrxPreviewWorkspace.Paint вызывается первый раз, то зафигачил ещё вызов Windows.InvalidateRect(Parent.Handle, @r, True); Костыль конечно, но помогло.
    2. Нифига нормально не работает FlowTo у этого же MY_TITLE. Замечаю, что оно правильно работает для ширины заданной при проектировании отчёта, а т.к. ширина изменяется (растягивание или сжатие в оставшееся место после вывода DATE и TIME), то либо сжирает часть текста, либо наоборот остаётся дофига свободного места.
    3. И ещё одна пакость напоследок. При уменьшении ширины страницы, (т.е. опять же всё работает только для размеров которые были при проектировании) начинают перетусовываться (менять относительно друг друга положение) поля которые прижаты к правому краю, ну например, EMPTY, которое было прижато вправо между MY_TITLE и DATE вдруг прижимается к правому краю бэнда, потеснив TIME!!! Причём это происходит не только при изменении свойств страницы из превьюшки, но и из кода перед вызовом превьюшки.
    Короче, блин фуфло получается статическое ;) . Выход - пиши руками формирование всего отчёта из кода. ;) И то неизвестно как это потом глючить будет ;)

    P.S
    Возможности FastReporta сопоставимы с его глючностью. ;) А я посоветовал его купить нам на контору вот ща и имеюсь ;) .
    Народ, неужели всё так глючно и должно быть? ;)

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

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