Отображение многострочного текста

       Вернемся к предыдущему примеру с рыбами. В таблице Biolife есть поле "Notes", которое содержит подробное описание каждой рыбы. Давайте модернизируем наш отчет, добавив в него это поле.

 

       На первый взгляд все просто: добавляем на бэнд с данными объект "Текст", подключаем его к полю "Notes" и устанавливаем размеры объекта - 8 х 2.5см. Запускаем отчет на выполнение и видим, что получилось не совсем то, чего мы ожидали:

 

clip0149

 

       Однако, FastReport всего лишь сделал то, что его просили сделать. Поле "Notes" содержит многострочный текст, размер которого может варьироваться. А наш объект "Текст", отображающий информацию из этого поля, имеет фиксированный размер. Вот некоторые строки и не влезли в объект и были обрезаны. Как поступить в данной ситуации?

 

       Можно, конечно, подобрать размеры объекта с запасом или уменьшить размер шрифта. Однако, это приведет к неэкономному использованию места на листе: одни рыбы имеют длинное описание, другие - короткое. В FastReport есть средства, позволяющие решить эту проблему.

 

       Речь идет о возможности бэнда подбирать свою высоту таким образом, чтобы уместить все имеющиеся в нем объекты. Для этого надо всего лишь включить свойство "Растягивание" (Stretch). Однако это не все - объект с длинным текстом и сам должен уметь растягиваться. Объект "Текст" умеет это делать.

 

       Объект может автоматически подбирать свою высоту или ширину, чтобы полностью уместить имеющийся в нем текст. Для этого служат свойства "Автоширина" (AutoWidth) и "Растягивание" (StretchMode). Свойство "Автоширина" подбирает ширину объекта таким образом, чтобы уместились все строки, без переносов слов. Этот режим удобен, когда объект содержит единственную строку текста. Свойство "Растягивание" позволяет подобрать высоту объекта так, чтобы поместился весь текст. Ширина объекта при этом не меняется. Это свойство является перечислением, и вы можете выбрать один из режимов в инспекторе объектов:

 

smDontStretch - не растягивать объект, значение по умолчанию;

smActualHeight - растянуть объект, чтобы уместился весь текст;

smMaxHeight - растянуть объект, чтобы его нижняя граница совпала с нижней границей бэнда, на котором находится объект. Этот режим мы рассмотрим чуть позже.

 

       Сейчас нас интересует свойство "Растягивание" объекта "Текст". Включите его в контекстном меню объекта, либо установите значение свойства StretchMode = smActualHeight. Также включите свойство "Растягивание" у бэнда. Запустим отчет и убедимся, что теперь все работает как надо.

 

_img108

 

       Как видим, при построении отчета FastReport заполняет объекты данными, растягивает объекты со включенной опцией "Растягивание" и потом подбирает высоту бэнда таким образом, чтобы уместить все объекты. Если опция "Растягивание" у бэнда отключена, то подбор высоты бэнда не производится, и бэнд выводится с той высотой, что была установлена в дизайнере. Если мы попробуем отключить эту опцию, мы увидим, что объекты с длинным текстом по-прежнему растягиваются, а бэнды - нет, что приводит к наложению текста. Ведь очередной бэнд выводится сразу после предыдущего.