Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Адаптация отчетов

01.01.2007

Обзор

Одной из больших проблем, с которой сталкиваются разработчики при создании отчетов, это адаптация. Что точно такое эта адаптация? Сначала, когда отчет создан, выполнение нормально происходит на одном конкретном компьютере, к которому подключено один или более принтеров. Когда отчет выполняет в жизни, вступают в действие такие факторы, размер бумаги, ориентация листа и непечатная область на разных принтерах. Во вторых, должен допускать некоторую гибкость в общей разработке и формате отчета.

Rave помогает преодолевать эти проблемы, давая доступ разработчику до конкретных свойств отчета. В этой главе, эти свойства объяснится подробно, и позволяют делать стандартный вид на различных платформах. На этом пути разработчик может сфокусироваться на создании отчета и меньше беспокоиться о преодолении сложностей распространения.

Отчеты также будут способны настроить форматы, основываясь  на внешних параметрах, переданных во время выполнения.

Свойство якоря (Anchors)

Большинство визуальных компонент имеет свойство Anchors. Это мощное средство определяет, как будет перемещаться при изменении размеров его родителя. Есть два значения якорей, один для горизонтали и один для вертикали. По умолчанию якоря установлены на верхний левый угол родителя. Что это значит, когда меняется размер родителя (например, компонент Section), компонент останется на том же самом расстоянии от левого, верхнего угла родителя. Два других значения якорей это Bottom и Right, они аналогичны по функциям (фиксируют правый, нижний угол родителя).

Параметр якоря Center фиксирует ребенка в центр родителя. Stretch поменяет размеры так, что стороны останутся на том же расстоянии от родителя. Stretch чаще всего используется, когда Вы хотите, чтобы компонент соответствовал ширине и высоте родителя. Две других специальных установки якоря, Resize и Spread используются для группы компонент. Resize пропорционально меняет размер компонент и промежутков между ними, при изменении родителя. Spread пропорционально меняет только промежутки между ними, (компоненты остаются того же размера) при изменении родителя. Бросьте компонент Section и поместите на нем несколько прямоугольников или текстовых компонент, измените значения этих компонент, что бы увидеть действие якорей.

Якоря могут быть использованы, чтобы создавать самонастраивающиеся отчеты, когда объединяются с другими возможностями отчета.  Представьте себе, что отчет может печататься, или в портретной, или в альбомной ориентации, или отчет может выполняться на разных размерах бумаги. Установка свойств якорей позволит отчету приспосабливаться к этим меняющимся условиям. Типичный табличный отчет, созданный компонентами Region; это Band, Text и DataText компоненты внутри каждой полосы. Если компонент Region устанавливает якорь в Stretch, по горизонтали и вертикали и все компоненты Text и DataText устанавливают якоря в Resize, отчет сможет подстроиться под эти установки.

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

Непечатная область принтера

Большинство принтеров имеют область, называемую как Непечатная область принтера. Это означает, что в данной области невозможна никакая печать, по причине фактических ограничений аппаратных средств (обычно, поскольку принтер использует эту область страницы, чтобы "захватывать" бумагу, при прохождении через ролики). Эти значения могут поколебаться от 0 (общее для матричных принтеров) до 1,5 дюймов. Чернильные принтеры обычно имеют большую нижнюю границу (и иногда 0 для верхней границы), большинство чернильных и лазерных принтеров имеют около 0,25 дюйма для левой и правой границ непечатной области.

Рамки с красными точками, на границах страницы, показывают непечатную область текущего выбранного принтера (или установленные предпочтения). Все между этими линиями и границами листа представляет непечатную область принтера, в которой вы должны избегать размещать компоненты. Проблема состоит в том, как узнать какой будет эта зона для назначенного принтера. Если отчет разработан с чрезвычайно большими границами этих полей, тогда лишком много пустого пространства будет занято на каждой странице.  Свойство WasteFit отвечает на эту общую проблему печати.

Страница имеет свойство, называемое WasteFit, которому можно назначить одно из двух значение, или true или false.

По умолчанию значение False. Установка в значение true заставляет страницу, подстраивать компоненты, размещенные на ней, так что бы они поместились в рабочей области принтера. Компоненты, размещенные на ней, масштабируются, что бы они поместились в рабочей области.

Тем не менее, этого недостаточно, что бы установка в WasteFit отработало для всех компонент автоматически. Подчиненные компоненты должны иметь свои собственные якоря, что бы они смогли также построиться при смене размеров страницы.

Когда это используется правильно, то это свойство становится мощной возможностью, позволяя разработанным отчетам автоматически приспосабливаться к различным принтерам.

Редактор якорей

Обычно, полосы отчетов, колонки, абзацы выравниваются к левому верхнему углу требуемой зоны. Это достаточно для большинства потребностей отчета.

Тем не менее, возможно Вы захотите управлять начальной или конечной позициями ваших компонент динамически. Это может быть двух колоночная секция, где левая колонка это компонент Memo, который изменяет высоту и правая колонка это компонент Text, который всегда занимает одну строку. Как сделать оба компонента плавающими и выровнять по низу формата? В Rave это делается с помощью свойства Anchor.

Что бы изменить стиль якоря зайдите в требуемый компонент и нажмите кнопку эллипса, это откроет редактор якорей, подобный одному из выше показанных. Это предоставляет метод для выбора стиля якоря данному компоненту, с помощью соответствующей вертикальной ил горизонтальной радио кнопок. Обратите внимание на представление появляющиеся ниже каждой. Выбор якоря имеет визуальную индикацию, что делает та или другая установка. Три другие установки Stretch, Resize, Spread немного сложны для объяснения, но образцы примеров также показывают на рисунке, сто каждая делает.

Важно заметить, что свойство Anchor применяется относительно родителя компонента. Так, если родителем является страница, то установки действуют относительно сторон страницы. Если родителем является секция, то установки действуют относительно сторон секции. Одним из путей визуально увидеть родство это посмотреть компоненту в дереве отчетов. Уровень выше и является родителем.

Следующие комбинации не ограничительные, но обычно спариваются следующим образом:

Выравнивание Left/Top
Выравнивание Right/Bottom
Выравнивание по обоим центрам
Оба Stretch
Оба Resize
Оба Spread