Получилась вышепоказанная шапка приблизительно следующим образом: в датасете было одно поле <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Х<!--fontc--></span><!--/fontc--> вместо полей <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->С5 - С10<!--fontc--></span><!--/fontc-->. Добавил эти поля, удалил поле <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Х<!--fontc--></span><!--/fontc-->, обновил <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->frxDataSet<!--fontc--></span><!--/fontc-->. В <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->frxRepot<!--fontc--></span><!--/fontc--> в <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab<!--fontc--></span><!--/fontc-->`е всё ещё находилось несуществующее поле <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Х<!--fontc--></span><!--/fontc--> ("Количество актов"). Я его "бахнул" и добавил <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->С5 - С10<!--fontc--></span><!--/fontc-->. Вот они и залезли под существующую шапку. Т.е. есть варианты (через ж...) сделать сложную шапку у <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab<!--fontc--></span><!--/fontc-->.
А почему разработчики не хотят сделать возможность делать сложные шапки у этого прекрасного элемента?
Вот что вышло (шапка усложнилась, но как это получилось?):
Объясните Ваше высказывание. Текущая шапка Вас устраивает?
Она и должна была получиться после следующих Ваших действий:
написал:
Получилась вышепоказанная шапка приблизительно следующим образом: в датасете было одно поле Х вместо полей С5 - С10. Добавил эти поля, удалил поле Х, обновил frxDataSet. В frxRepot в DBCrossTab`е всё ещё находилось несуществующее поле Х ("Количество актов"). Я его "бахнул" и добавил С5 - С10. Вот они и залезли под существующую шапку.
написал:
Т.е. есть варианты (через ж...) сделать сложную шапку у DBCrossTab.
Этот вариант и есть правильным
написал:
А почему разработчики не хотят сделать возможность делать сложные шапки у этого прекрасного элемента?
Почти, но... я же не буду каждый раз для этого добавлять в датасет фиктивные поля, чтобы получить сложную шапку. Сейчас я вообще убрал шапку <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab<!--fontc--></span><!--/fontc-->`а и сделал её в <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Header<!--fontc--></span><!--/fontc-->`е. Но теперь в коде нужно писать приравнивание ширины каждого заголовка строки и каждой ячейки к ширинам <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Memo<!--fontc--></span><!--/fontc--> в <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Header<!--fontc--></span><!--/fontc-->`е.
написал:
Этот вариант и есть правильным
По-моему, это вариант не есть правильным.
Это не из-за лени я предлагаю, а потому, чтобы ещё более универсальным сделать элемент.
написал:
Какой вариант Вы предлагаете?
Я предлагаю сделать ручное строительство шапки <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab<!--fontc--></span><!--/fontc-->`а как второй вариант после автоматического.
А как мне быть независимым от ширины каждого столбца в шапке?
Я управляю шириной строчных заголовков, а <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->ColumnHeader<!--fontc--></span><!--/fontc-->, всё равно держит ширину каждого столбца свою.
Спасибо.
В общем разбирался я разбирался. Убирал я галочки с ShowTitle, ShowCorner, ColumnHeader - ничего не помогает. Ширина RowHeader`ов как регулировалась, так и регулируется, а Corner`а не регулируется. Как убрать зависимость от ширины Corner?
Кстати, со сложной шапкой это я гнал: это Title там наверху, а я думал это сложная шапка.
Судя по вашей шапке, не понятно, зачем вам нужен именно DBCrossTab. Какие колонки у вас будут динамические? Может вам и не стоит заморачиваться с этим компонентом?
Судя по вашей шапке, не понятно, зачем вам нужен именно DBCrossTab. Какие колонки у вас будут динамические? Может вам и не стоит заморачиваться с этим компонентом?
Вам нужно использовать обычный TfrxMasterData и устанавливать границы мемо в скрипте
Просто положить все <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Memo <!--fontc--></span><!--/fontc-->на <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->MasterData<!--fontc--></span><!--/fontc-->? Но мне нужно, чтобы текст в растянутом на высоту листа <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Memo<!--fontc--></span><!--/fontc--> был по середине. А управление границами этого не даст.
Тогда Вам придётся заморачиваться со скриптом: либо выводить значение в средней ячейке на втором проходе, либо выводить мемо необходимой высоты, а последующие скрывать (тоже на втором проходе)
Ну, или ждать FR5. В нём обещают полноценное объединение ячеек
Ну, или ждать FR5. В нём обещают полноценное объединение ячеек
Да уже почти год все ожидают этого чуда. А делать нужно сейчас.
Значит в <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab<!--fontc--></span><!--/fontc--> никак не получится управлять шириной <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Corner<!--fontc--></span><!--/fontc-->`ов?
Если устроит, можно отключить AutoSize у кросса и использовать заголовки фиксированной ширины
Или сделать с вложенным отчётом без повторения значений на новой странице, или с мастердата со значениями в первой строке - вполне рабочий вариант. А если реализовывать все хотелки юзеров - тогда только скрипт
Скажите, пожалуйста, почему следующий код не отрабатывает (у <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab AutoSize = false<!--fontc--></span><!--/fontc-->):
procedure dbcCorner3OnBeforePrint(Sender: TfrxComponent);
begin
dbcCorner3.Width := Memo2.Width;
end;
procedure dbcCorner4OnBeforePrint(Sender: TfrxComponent);
begin
dbcCorner4.Width := Memo3.Width;
end;
qpi, огромное Вам спасибо! Всё работает. Я думал, что не работает, а уменьшению <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Corner<!--fontc--></span><!--/fontc-->`ов мешали <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Row<!--fontc--></span><!--/fontc-->`ы. Вот что в итоге сделал:
Но остался последний момент. Как можно управлять высотой строк в <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab<!--fontc--></span><!--/fontc-->`е при <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->ActualSize = false<!--fontc--></span><!--/fontc-->?
Очень странное дело: ширина ячеек таблицы со значениями не регулируется в событии <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->OnCalcWidth<!--fontc--></span><!--/fontc--> при реализованном выше методе <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrosstab1OnBeforePrint<!--fontc--></span><!--/fontc-->. Но если добавить две строки в последнее событие, то всё работает:
Почему не отрабатывает как положено в <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->OnCalcWidth<!--fontc--></span><!--/fontc-->? Или как узнать, что текст не влез полностью в поле?
Понятно. Спасибо.
А как подогнать высоту полей под текст, который не влазит? <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->StretchMode = smActualHeight<!--fontc--></span><!--/fontc--> не поможет:
<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->StretchMode = smMaxHeight<!--fontc--></span><!--/fontc-->: текст вообще куда-то исчезает в полях и заголовках.
Может есть какое-нибудь свойство типа <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->TextWidth<!--fontc--></span><!--/fontc-->?
Попробуйте на первом проходе в OnPrintCell определять максимальную высоту для каждой строки при помощи Memo.CalcHeight, а на втором проходе выставлять эту высоту в OnCalcHeight
Спасибо, qpi!
Событие <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTabOnPrintRowHeader<!--fontc--></span><!--/fontc--> происходит один раз для одной строки? Или несколько раз для одной строки в зависимости от количества уровней заголовков строк?
Комментарии
А почему разработчики не хотят сделать возможность делать сложные шапки у этого прекрасного элемента?
Она и должна была получиться после следующих Ваших действий: Этот вариант и есть правильным
Какой вариант Вы предлагаете?
Это не из-за лени я предлагаю, а потому, чтобы ещё более универсальным сделать элемент. Я предлагаю сделать ручное строительство шапки <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab<!--fontc--></span><!--/fontc-->`а как второй вариант после автоматического.
Я управляю шириной строчных заголовков, а <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->ColumnHeader<!--fontc--></span><!--/fontc-->, всё равно держит ширину каждого столбца свою.
Спасибо.
Кстати, со сложной шапкой это я гнал: это Title там наверху, а я думал это сложная шапка.
Ну, или ждать FR5. В нём обещают полноценное объединение ячеек
Значит в <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTab<!--fontc--></span><!--/fontc--> никак не получится управлять шириной <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->Corner<!--fontc--></span><!--/fontc-->`ов?
Или сделать с вложенным отчётом без повторения значений на новой странице, или с мастердата со значениями в первой строке - вполне рабочий вариант. А если реализовывать все хотелки юзеров - тогда только скрипт
А как подогнать высоту полей под текст, который не влазит? <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->StretchMode = smActualHeight<!--fontc--></span><!--/fontc--> не поможет:
<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->StretchMode = smMaxHeight<!--fontc--></span><!--/fontc-->: текст вообще куда-то исчезает в полях и заголовках.
Может есть какое-нибудь свойство типа <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->TextWidth<!--fontc--></span><!--/fontc-->?
Событие <!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->DBCrossTabOnPrintRowHeader<!--fontc--></span><!--/fontc--> происходит один раз для одной строки? Или несколько раз для одной строки в зависимости от количества уровней заголовков строк?
http://www.fast-report.com/en/forum/?p=/discussion/8117
У меня там была аналогичная проблема.