Отображение многострочного текста
Вернемся к предыдущему примеру с рыбами. В таблице Biolife есть поле "Notes", которое содержит подробное описание каждой рыбы. Давайте модернизируем наш отчет, добавив в него это поле.
На первый взгляд все просто: добавляем на бэнд с данными объект "Текст", подключаем его к полю "Notes" и устанавливаем размеры объекта - 8 х 2.5см. Запускаем отчет на выполнение и видим, что получилось не совсем то, чего мы ожидали:
Однако, FastReport всего лишь сделал то, что его просили сделать. Поле "Notes" содержит многострочный текст, размер которого может варьироваться. А наш объект "Текст", отображающий информацию из этого поля, имеет фиксированный размер. Вот некоторые строки и не влезли в объект и были обрезаны. Как поступить в данной ситуации?
Можно, конечно, подобрать размеры объекта с запасом или уменьшить размер шрифта. Однако, это приведет к неэкономному использованию места на листе: одни рыбы имеют длинное описание, другие - короткое. В FastReport есть средства, позволяющие решить эту проблему.
Речь идет о возможности бэнда подбирать свою высоту таким образом, чтобы уместить все имеющиеся в нем объекты. Для этого надо всего лишь включить свойство "Растягивание" (Stretch
). Однако это не все - объект с длинным текстом и сам должен уметь растягиваться. Объект "Текст" умеет это делать.
Объект может автоматически подбирать свою высоту или ширину, чтобы полностью уместить имеющийся в нем текст. Для этого служат свойства "Автоширина" (AutoWidth
) и "Растягивание" (StretchMode
).
- Свойство "Автоширина" подбирает ширину объекта таким образом, чтобы уместились все строки, без переносов слов. Этот режим удобен, когда объект содержит единственную строку текста.
- Свойство "Растягивание" позволяет подобрать высоту объекта так, чтобы поместился весь текст. Ширина объекта при этом не меняется. Это свойство является перечислением, и вы можете выбрать один из режимов в инспекторе объектов:
smDontStretch
- не растягивать объект, значение по умолчанию;
smActualHeight
- растянуть объект, чтобы уместился весь текст;
smMaxHeight
- растянуть объект, чтобы его нижняя граница совпала с нижней границей бэнда, на котором находится объект. Этот режим мы рассмотрим чуть позже.
Сейчас нас интересует свойство "Растягивание" объекта "Текст". Включите его в контекстном меню объекта, либо установите значение свойства StretchMode
= smActualHeight. Также включите свойство "Растягивание" у бэнда. Запустим отчет и убедимся, что теперь все работает как надо.
Как видим, при построении отчета FastReport заполняет объекты данными, растягивает объекты со включенной опцией "Растягивание" и потом подбирает высоту бэнда таким образом, чтобы уместить все объекты. Если опция "Растягивание" у бэнда отключена, то подбор высоты бэнда не производится, и бэнд выводится с той высотой, что была установлена в дизайнере. Если мы попробуем отключить эту опцию, мы увидим, что объекты с длинным текстом по-прежнему растягиваются, а бэнды - нет, что приводит к наложению текста. Ведь очередной бэнд выводится сразу после предыдущего.