Масштабирование отчёта
Нужна ваша помощь по следующему вопросу:
Необходимо масштабировать элементы отчёта зависимости от размеров бумаги (например, заново вычислять ширину колонок) чтобы при любых условиях отчёт выглядел одинаково.
Думаю, лучше всего это сделать при помощи скриптов. Проблема в том, что не понятно, какое событие вызвается при этом. Пробовал все события, но по-моему больше всего подходит OnBeforePrint, только оно работает лишь при вызове отчёта и если в окне Page Settings отметить Apply to All Pages. Конечно, есть выход - написать свой Page Settings, но хотелось бы всё-таки стандартными методами.
Fast-Report версии 3.07.
Необходимо масштабировать элементы отчёта зависимости от размеров бумаги (например, заново вычислять ширину колонок) чтобы при любых условиях отчёт выглядел одинаково.
Думаю, лучше всего это сделать при помощи скриптов. Проблема в том, что не понятно, какое событие вызвается при этом. Пробовал все события, но по-моему больше всего подходит OnBeforePrint, только оно работает лишь при вызове отчёта и если в окне Page Settings отметить Apply to All Pages. Конечно, есть выход - написать свой Page Settings, но хотелось бы всё-таки стандартными методами.
Fast-Report версии 3.07.
Комментарии
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 сопоставимы с его глючностью. А я посоветовал его купить нам на контору вот ща и имеюсь .
Народ, неужели всё так глючно и должно быть?