Компонент TNormalReport

Вернуться к оглавлению

Этот невизуальный компонент предназначен для формирования печатных отчётов. По сравнению со своими аналогами, TNormalReport выигрывает в универсальности и простоте подготовки отчётов для программиста. Ключевое слово Normal (нормальный) отражает перпендикулярность подхода к программированию отчётов в сравнении с рассмотрением другими компонентами, предназначенными для этой цели, средств формирования отчётов как чего-то визуального, требующего сложной специальной терминологии, кропотливого процесса обучения... в результате которого научить(ся) все равно полностью не удаётся, и только опыт дальнейшего использования позволяет восполнить пробелы, но не в понимании, а скорее в умении совершать таинственные мантры, после чего есть шанс, что случится чудо, и станет работать как хотелось бы. А бывает ведь и так, что чуда не случается вообще, и приходится просто менять средство подготовки отчетов. В случае TNormalReport такой исход исключён - напечатать с ним можно всё, и так, как хочется (требуется), без шаманов и бубнов.

Всё, что нужно для работы с отчётами через TNormalReport - это знать конструкции языка программирования (Delphi). В обработчике события OnPrint прописывается код, который заполняет содержимое ячеек и в нужном порядке "печатает" их, вызывая методы TNormalReport.

Ячейки и линейки - это обычные визуальные компоненты, причём могут использоваться практически все типы оконных контролов, за исключением буквально одного только TRichEdit. Для упрощения печати и расширения возможностей форматирования текста, вместе с TNormalReport идут два визуальных компонента - TNormalBand (аналог панели) и TNormalLabel (аналог TLabel, произведенный от TNormalBand), которые уже имеют белый цвет фона и черный цвет шрифта, и предоставляют дополнительные возможности (рамки, переносы по словам, по слогам, по буквам, автоматическое вписывание в размер, вычисление желаемого размера и т.д.).

TNormalReport уже включает в себя форму предварительного просмотра (и прогресса печати), из которой может быть выполнена печать всего отчета, отдельной страницы или диапазона страниц. Имеется возможность допечатывания дополнительных полей на нескольких дополнительных проходах (например, для выдачи общего числа листов на каждом листе). В случае аккуратного использования предоставляемых возможностей скорость подготовки отчетов очень высокая (несколько страниц формата А4 в секунду). Количество страниц отчёта практически не ограничено (попадались и отчёты по несколько тысяч страниц - отрабатывало без проблем).

Компонент разрабатывался для Delphi 5, но работает так же и в Delphi 6, и должен работать в Delphi 7. В более поздних версиях Delphi и его клонов не тестировался. Для использования русских сообщений, меню, элементов формы предварительного просмотра, добавьте в опции проекта символ условной компиляции RUSSIAN_LANGUAGE (для добавления или изменения символов условной компиляции: Project | Options | Directories/Conditionals | Defines ).

 
TNormalReport TNormalBand TNormalLabel TfmNormalPreview

Подробное описание

 Компонент TNormalReport

Компонент TNormalReport является ключевым в этом наборе компонентов для подготовки печатных отчётов. В принципе, он может быть использован отдельно, без TNormalBand и TNormalLabel. Процедура подготовки печатного отчёта на этапе разработки состоит в следующем:

  1. Положить на форму компонент TNormalReport. Лучше всего для каждой разновидности печатного отчёта использовать одну отдельную форму Delphi (TForm), сделав её невидимой, и положить компонент TNormalReport на эту форму, присвоив ему удобное имя (например, NR).
  2. Положить на эту же форму (впрочем, не обязательно на эту же) некоторое количество визуальных компонентов, которые будут представлять собой печатаемые ячейки и группы ячеек (линейки, таблицы, изображения и проч.). Лучше всего для подготовки печати использовать предоставляемые компоненты TNormalBand и TNormalLabel, но это на усмотрение программиста.
  3. Для тех ячеек, которые будут содержать при печати фиксированную информацию, заполнить их в дизайнере формы. Для тех ячеек, значение которых меняется, требуется только оформить внешний вид, и, главное, присвоить удобные для ссылок на них из программного кода имена. Например, cell_Title, cell_DateFrom, cell_Subscriber1. Разумные имена должны иметь и панели, отправляемые на печать отдельными операторами, например, band_Title, band_Group, band_Data, и т.п.
  4. Настроить желаемые свойства TNormalReport (см. далее) и, главное -  назначить обработчик события OnPrint для компонента TNormalReport. В обработчике события OnPrint прописать код, который выполняет печать ячеек и линеек в нужном порядке. При этом могут быть использованы любые подходящие конструкции языка программирования. Например, циклы, условные ветвления, вызовы методов и т.д. Правила формирования печатных элементов:
  5. При необходимости печати номера листа, лучше всего назначить обработчик события OnNewPage, вызываемый, когда происходит переход на новую страницу (автоматически или в результате вызова метода NewPage).
  6. При необходимости печати общего числа листов в отчёте лучше всего зарезервировать на листе некоторую позицию, в которой будет выдаваться это число, и по окончании печати всех листов в том же обработчике OnPrint пройти еще раз по всем листам (присваивая свойству Page последовательно значения от 1 до PagesCount) и выполнить допечатку соответствующей ячейки в этой позиции (устанавливая позицию изменением свойств X и Y).
  7. В программном коде для печати отчёта выполнить следующие действия:

Свойства, события, методы класса TNormalReport, доступные в Инспекторе объектов и/или во время исполнения.

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

По поводу размеров. Все размеры контролов, являющихся ячейками, на родительской форме пересчитываются в размеры на принтере таким образом, что примерно 800 пикселей по ширине соответствует ширине листа формата A4.

Публикуемые свойства класса TNormalReport (свойства, которые могут быть изменены Инспектором объектов в режиме дизайна формы).
Имя свойства Тип Начальное
значение
Описание
DirectAcceptNewPage Boolean FALSE Устарело, не использовать (сохранилось для совместимости с ранее подготовленными отчётами)
DocumentName String   Используйте это свойство для того, чтобы дать документу имя. Это имя будет отображаться в списке заданий, отправленных на печать.
DoubleBufferedPreview Boolean FALSE Устанавливает свойство DoubleBuffered для формы предварительного просмотра. В настоящее время особой необходимости в использовании этого свойства нет.
ExactScalePrint Boolean TRUE Рекомендуется оставить значение по умолчанию (TRUE).
Name String    
Orientation TPrinterOrientation poPortrait Портретная или ландшафтная (poLandscape) ориентация бумаги.
PreviewScale TPreviewScale psFitWidth Способ масштабирования листов в форме предварительного просмотра. Варианты:
psFitPage - вписать всю страницу в форму,
psFitWidth - вписать по ширине,
psAsIs - не масштабировать.
SamePageCount Boolean TRUE Устарело, сохранено для совместимости с уже подготовленными отчётами.
ShowProgress Boolean TRUE Отображать прогресс операции, с возможностью ее отмены.
Tag Integer 0  
TwoStagePrinting Boolean FALSE В новых отчётах рекомендуется не использовать двухпроходную печать, а для выполнения второго и последующих проходов (с целью надпечатки, например, общего числа листов в отчёте), использовать свойства Page для присваивания номера листа и допечатывать всё, что требуется.

Публикуемые события класса TNormalReport (которые могут быть назначены или изменены Инспектором объектов в режиме дизайна формы).
Имя события Тип Описание
OnCreatePreviewForm TNotifyEvent Вызывается при создании формы предварительного просмотра. Может использоваться для тонкой настройки формы, для перемещения ее в нужное место экрана, для установки обработчиков событий и т.д. Подробности смотрите в описании формы предварительного просмотра TfmNormalPreview.
OnEndBand TNotifyEvent Вызывается при переходе на новую строку, либо когда такой переход происходит автоматически перед печатью очередной ячейки методом AddRight, либо всегда после печати методом AddBand, а так же при вызове метода NewLine.
OnNewLine TNotifyEvent В отличие от предыдущего события, вызывается только при автоматическом переходе на новую строку при последовательной печати ячеек методом AddRight. Может использоваться, например, для того, чтобы в начале строки, являющейся продолжением предыдущей, добавить пустое поле (либо печатая пустой прямоугольник, либо изменяя координату X).
OnNewPage TNotifyEvent Вызывается при переходе на новую страницу при автоматическом или прямом вызове метода NewPage. Может использоваться, например, для вывода номера листа, для допечатывания шапки таблицы в начале листа или выполнения других действий.
OnPrint TNotifyEvent Ключевое событие. Здесь следует прописывать процедуру заполнения и печати ячеек отчёта.
OnShowPreviewForm TNotifyEvent Вызывается при отображении формы предварительного просмотра. Так же может использоваться для дополнительной подстройки этой формы.

Свойства и методы времени исполнения класса TNormalReport, доступные из программы (секция PUBLIC).

Имя свойства / Объявление метода Тип Только чтение Начальное значение свойства Описание
procedure Clear;       Очистка отчета. Удаляются все подготовленные страницы. Обычно нет необходимости использовать в конечной программе. Как вариант использования: после печати отчёта в режиме Orientation = poLandscape, если правый край всех напечатанных линеек не превосходит заданной величины, стереть все листы, включить портретную ориентацию, и повторить формирование отчёта. Результат - экономия бумаги.
procedure ResetProgress;       Сброс прогресса (форма прогресса уничтожается, и далее прогресс подготовки не отображается). Обычно не требуется использовать в конечной программе.
PreviewForm TfmNormalPreview R/W   Возвращает (и позволяет установить) форму предварительного просмотра. Получение существующей формы просмотра может понадобиться для прямой модификации ее функциональности. Установка формы - это для ОЧЕНЬ продвинутых программистов, которые умеют наследовать формы и модифицировать их функциональность таким способом (устанавливаемая форма должна быть наследником класса TfmNormalPreview).
PagePixelsSize TSize R   Размер страницы в экранных пикселях.
PaperSize TPaperSize R/W psA4 Размер листа бумаги. Варианты: psA4, psA5, psA6, psA3, psLetter, psCustom. Последний вариант позволяет задать свой размер бумаги в миллиметрах через свойство CustomPaperSize.
CustomPaperSize TSize R/W (210, 270) Размер печатной страницы в миллиметрах.
Page Integer R/W   Номер текущей страницы от 1 и более, до PagesCount. Может использоваться для установки номера ранее подготовленной страницы для выполнения надпечатки на ней желаемых ячеек (которые нельзя было вывести при последовательной подготовке страниц, например, по той причине, что их значение еще не было известно на момент формирования листа).
PageWidth Integer R   Ширина страницы в миллиметрах, возвращенная стандартным компонентом TPrinter для текущего выбранного принтера.
PageHeight Integer R   Высота страницы в миллиметрах, возвращенная компонентом TPrinter для текущего выбранного принтера.
CurrentPage TMF R   Метафайл (в виде дескриптора контекста для рисования, типа HDC), на котором производится отображение текущей страницы. Для "продвинутых" программистов. Позволяет использовать изображать на странице "чего-душа-пожелает".
Printer TPrinter R/W       Возвращает экземпляр класса TPrinter, через который происходит связь с настройками принтера для печати документа. Для "продвинутых" программистов. Позволяет получить доступ к специфическим настройкам принтера.
    Присваивание данному свойству значения может использоваться для указания из программы конкретного принтера, если их в системе установлено несколько. Если это свойство не изменяется в коде, используется принтер по умолчанию (обычно этого достаточно, тем более что в форме предварительного просмотра пользователь может выбрать принтер самостоятельно).
PageTop Boolean R/W   Возвращает TRUE, когда "печатающая головка" находится в начале страницы. Сбрасывается в FALSE при переходе к следующей строке.
X Integer R/W   Текущая "экранная" координата по оси X. Управление этой величиной (вместе с Y) позволяет помещать следующую печатаемую ячейку в желаемую позицию на листе. Экранные координаты соответствуют размерам печатаемых контролов на форме в пикселях.
Y Integer R/W   Текущая вертикальная координата по оси Y (от 0 до размера страницы в "экранных" координатах).
Pages[ Idx: Integer ] TMF R   Доступ к уже подготовленным страницам (в виде дескрипторов контекстов для рисования, типа HDC), индекс в диапазоне от 0 до PagesCount-1.
Images[ Idx: Integer ] HEnhMetafile R   Доступ к уже подготовленным страницам (в виде дескрипторов метафайлов), индекс в диапазоне от 0 до PagesCount-1.
Cancelled Boolean R   Возвращает TRUE, если подготовка страниц была отменена пользователем путём нажатия на кнопку Отмена на форме прогресса печати. Следует в процессе выполнения долгого цикла подготовки страниц регулярно проверять это свойство, и завершать работу обработчика события, если оно установлено. Впрочем, если такая проверка отсутствует, на каждой странице компонент выполнит проверку сам и сформирует исключительную ситуацию для немедленного прекращения затянувшейся операции.
procedure Cancel( const Reason: String );       Отменяет печать (и подготовку страниц). Может быть вызван из любого кода в момент, когда подготавливается массив страниц или сама печать. В результате генерируется исключительная ситуация, и работа обработчика события OnPrint прекращается немедленно. Строка Reason передаётся обработчику исключительной ситуации.
LastX Integer R   Координата X перед печатью последней ячейки/линейки методами AddBand, AddRight, AddFooter. Т.к. позиция печати очередной ячейки/линейки может автоматически измениться перед ее печатью в результате автоматического перехода на новую строку или новую страницу, то выяснять координаты вывода ячейки/линейки следует после ее печати, используя данные свойства (если это требуется для каких-то целей, например, для запоминания позиции на листе для дальнейшей надпечатки).
LastY Integer R   Координата Y перед печатью последней ячейки/линейки методами AddBand, AddRight, AddFooter.
procedure AddBand( Band: TWinControl; BandLayout: TBandLayout = blLeft );       Добавляет линейку ("банд" или "банду"), т.е. фактически контрол, на страницу. Размещение линейки контролируется параметром BandLayout. В качестве банда рекомендуется использовать TNormalBand, хотя допускается любой TWinControl.
Обратите внимание на то, что при последовательной печати линеек, окруженных со всех сторон рамкой, в месте их состыковки будет наблюдаться удвоение рамки. Если требуется, как это обычно и бывает, чтобы линии всегда были одинаковой величины, управляйте координатой Y в своём коде. Например, выполните NR.Y := NR.Y - 1; сразу после печати линейки или перед печатью следующей линейки.
procedure AddFooter( Band: TWinControl; BandLayout: TBandLayout = blLeft );       Добавляет нижний колонтитул ("футер") внизу страницы. При добавлении нескольких нижних колонтитулов позиция Y2 для их вывода двигается снизу вверх (и слева направо). Изменение этой позиции не влияет на координату Y вывода обычных линеек, но уменьшает остаток размера страницы (HeightAvailable), так что при выводе обычных линеек и ячеек автоматический переход на следующую страницу произойдёт вовремя, и их наложение на нижние колонтитулы не произойдёт.
procedure AddRight(Band: TWinControl; AllowWrapBand: Boolean = TRUE);       Добавляет линейку или ячейку справа от текущей позиции. Данный метод следует использовать при формировании частей отчётов, для которых число и состав колонок является переменным, и заранее неизвестно, сколько именно колонок потребуется. При выводе каждой ячейки проверяется, что до правого края листа достаточно места, и если это не так, автоматически происходит предварительный переход на следующую строку. Если при этом требуется обеспечить в начале строки продолжения отступ или печать какого-то маркера продолжения строки, используйте обработчик события OnNewLine.
procedure NewPage;       Принудительный переход на новую страницу.
procedure NewLine;       Принудительный переход на новую строку. Следует использовать при печати ячеек или линеек методом AddRight (в других случаях переход на новую строку выполняется всегда, сразу после печати линейки).
Bottom Integer R   Нижняя координата страницы (в экранных пикселях). Для проверки оставшегося места на страницы лучше использовать метод HeightAvailable, т.к. он учитывает сразу и наличие напечатанных нижних колонтитулов.
PagesCount Integer R   Число напечатанных (подготовленных) страниц.
procedure PrintPages( Start, Count: Integer );       Данная процедура печатает на принтере заданный диапазон страниц (Start должен быть в диапазоне от 1 до PagesCount). Может применяться в случае, когда форма просмотра не используется, или для создания собственной формы предварительного просмотра.
procedure Print;       Начинает процедуру подготовки и печати отчёта без использования предпросмотра, сразу на принтере. Вызывается обработчик события OnPrint для подготовки страниц, затем все сформированные страницы отправляются на печать.
procedure Preview;       Начинает процедуру подготовки и печати отчёта с предварительным просмотром, но форма предварительного просмотра показывается немодально.
procedure PreviewModal;       Начинает процедуру подготовки страниц (вызывается OnPriint), после чего подготовленные страницы показываются в форме предварительного просмотра.
procedure Abort;       Немедленно отменяет процедуру печати. Для того, чтобы применение этого метода было возможно, печать либо должна быть запущена не модально, либо использоваться многопоточность, либо вызов должен делаться из самого обработчика события OnPrint (и других обработчиков).
Printing Boolean R   Возвращает TRUE, если сейчас выполняется процедура подготовки страниц (работает обработчик события OnPrint).
Stage Integer R   Стадия печати при двухпроходной схеме (значение 1 или 2). Рекомендуется более не использовать двухпроходную схему.
function HeightAvailable: Integer;       Остаток страницы в экранных пикселях по высоте. Может использоваться для определения того, войдёт или нет в лист одна или несколько указанных линеек (следует заполнить эти линейки, выставить их высоту, если она переменная, сложить их и сравнить со значением, возвращаемым функцией HeightAvailable). Обычно такая проверка нужна, чтобы в целях предотвращения отрыва итоговой строки для группы результатов выполнить принудительный переход на новую страницу вызовом NewPage.






 Компонент TNormalBand.

Компонент TNormalBand предназначен для оформления линеек и таблиц при печати на принтере. В этом смысле он выполняет роль панели, от корой и произведён. Но может использоваться и как отдельная ячейка при печати (если не требуется какое-то особенное форматирование текста и другие возможности TNormalLabel), а так же как обычный визуальный контрол на форме.

Внимание! Рекомендуется использовать при подготовке отчетов True Type шрифты, сразу устанавливая такие шрифты на создаваемой для отчета форме. Оптимальными вариантами являются шрифты Arial и Times New Roman, а так же в некоторых случаях - Courier New. Рекомендуется так же отрегулировать размер шрифта на форме, устанавливая значение Size = 10 (точек), если только печатный отчет не предполагается рассматривать с помощью лупы или микроскопа.

Свойства компонента TNormalBand, доступные из Инспектора объектов. Синим цветом отмечены свойства, аналогичные таким же из компонента TPanel. Те из них, чьё начальное значение отличается от такого для TPanel, выделены красным цветом в колонке значений. Свойства, смысл использования которых весьма мал или отсутствует при печати на принтере, отмечаются серым фоном в названии свойств. Полужирным шрифтом выделены ключевые свойства, события и методы.
 
Имя свойства или декларация метода Тип (свойства) Начальное значение Описание
Align TAlign alNone Выравнивания для линеек обычно требуется устанавливать только в случае, когда они сами вложены в другие линейки. При отправке линейки на печать свойство Align само по себе игнорируется, разве что его применение приводит к изменению размеров контрола (для панелей TNormalBand, вложенных в отправляемые на печать, действие свойства не изменяется).
Alignment TAlignment taCenter Выравнивание текста заголовка на линейке. Сам по себе компонент может использоваться как отдельная ячейка, разумеется.
Anchors TAnchors [akLeft, akTop] Якоря. Использование так же (как и для свойства Align) имеет обычно смысл при размещении линейки на родительской линейки в качестве вложенного контрола.
Autosize Boolean FALSE Автоматическое определение размера линейки - по размеру заголовка. Имеет смысл использовать только в том случае, когда линейка используется как отдельная ячейка.
BevelInner Boolean bvNone Придание границам 3D-вида обычно не используется при печати на принтере, т.к. при плохом качестве печати часто приводит к дополнительной грязи на бумаге и перерасходу порошка или чернил. Для оформления плоских рамок используйте свойство Frames.
BevelOuter Boolean bvNone
BevelWidth Integer 1
BiDiMode   bdLeft
BorderStyle   bsNone
BorderWidth Integer 1
Caption String   Текст в линейке. Обычно используется только в случае, когда линейка не содержит лежащих на ней ячеек (или подчинённых ячеек).
Color TColor clWhite Цвет фона, по умолчанию белый.
Constraints   [ ] Ограничения на изменение размеров.
Cursor TCursor crDefault Вообще, не имеет смысла для печати. Правда, TNormalBand никто не запрещает использовать и как обычный визуальный контрол, аналогичный панели.
DockSite      
DoubleBuffered Boolean FALSE При печати на принтере не имеет особого смысла. Однако, это свойство добавлено в опубликованные, так как в Delphi панель можно сделать буферизованной только своим кодом, поэтому просто используется возможность для одного из аналогов панели, помещённого на линейку компонентов, организовать такую настройку из дизайнера формы (когда TNormalBand используется как обычная визуальная панель).
DragCursor TCursor crDrag  
DragKind   dkDrag  
DragMode   dmManual  
Enabled Boolean TRUE Состояние Enabled влияет при печати на принтер только на внешний вид. Впрочем, в случае печати вряд ли может понабиться вид, соответствующий состоянию Enabled = FALSE.
Font TFont MS Sans Serif, 8,
Color = clBlack
 
Frames TFrames [ ] Рамки (сверху, снизу, слева и справа).
FrameWidth Integer 1 Толщина линий, используемых для изображения рамки - в экранных координатах.
FullRepaint Boolean TRUE  
Height Integer 41  
HelpContext Integer 0  
Hint String    
Left Integer    
Locked Boolean FALSE  
Name String    
ParentBiDiMode Boolean TRUE  
ParentColor Boolean FALSE  
ParentFont Boolean TRUE  
ParentShowHint Boolean TRUE  
PopupMenu      
ShowHint Boolean FALSE  
TabOrder Integer    
TabStop Boolean FALSE  
Tag Integer 0  
Top Integer    
Transparent Boolean FALSE Свойство прозрачности. Когда включено, фон не заливается цветом Color. При печати на принтере включение прозрачности фона может быть полезно для выполнения надпечаток поверх уже выведенных на лист ячеек.
UseDockManager Boolean TRUE  
Visible Boolean TRUE При печати данное свойство вообще не используется в случае, когда сам компонент отправляется на печать методом AddXXXX. Но оно имеет смысл для компонентов, лежащих на отправляемой на печать линейке: те, чьё свойство Visible = FALSE, в этом случае не отображаются.
Width Integer    
 

События компонента TNormalBand, доступные из Инспектора объектов.

Практически все события, кроме OnResize, бесполезны и обычно не используются, когда TNormalBand используется по прямому назначению - в качестве линейки для печати отчёта. Это все те же события, что для TPanel, и полезны только когда TNormalBand используется в качестве визуальной панели.

Свойства и методы компонента TNormalBand, доступные во время выполнения.

Новых методов, по сравнению с TPanel, нет, кроме следующей единственной функции.
 
Имя свойства или декларация метода Тип (свойства) Описание
function DesiredHeight: Integer;   Данная функция вычисляет желаемую высоту линейки (при неизменной ширине), учитывая все вложенные (и выровненные свойством Align) контролы. Особо учитывается размер контролов типа TNormalLabel и TNormalBand, для них вызывается аналогичная функция DesiredHeight.
 






Компонент TNormalLabel.

Это специальный компонент на базе TNormalBand, но по своим свойствам ближе к TLabel. Он максимально приспособлен к печати отчётов, имеет множество дополнительных параметров, позволяющих форматировать ячейки. Но может использоваться и как панель для размещения вложенных контролов. Разумеется, он может использоваться и как обычный визуальный контрол - но уже обогащённый новыми возможностями.

Свойства, события и методы класса TNormalLabel, доступные на этапе разработки (они так же доступны и во время исполнения). Поскольку TNormalLabel произведен непосредственно от TNormalBand, все свойства TNormalBand, описанные выше, справедливы и для TNormalLabel. Поэтому далее будут приведены описания в основном только новых свойств. Синим цветом отмечены свойства, аналогичные таким же из компонента TLabel.

Имя свойства / метода Тип Атрибуты
доступа
(для свойств)
Описание
Alignment TAlignment taCenter Выравнивание текста заголовка на линейке.
DiagonalSplit Char #0 Деление ячейки по диагонали. Если в качестве символа использована обратная косая черта '\', то ячейка делится линией из верхнего левого в правый нижний угол. Во всех остальных случаях рисуется противоположная диагональ. Деление ячейки по диагонали никак не влияет на форматирование текста. Если требуется в каждой половинке изобразить свою надпись, лучше всего форматированием текста добиться надписи только в одной части, затем наложить еще один TNormalLabel, в котором изобразить свою половину текста. Так как диагональное деление требуется обычно только для оформления угловых ячеек шапки таблицы, имеющей фиксированный текст, то имеющихся возможностей бывает достаточно.
FrameInflate Integer 0 Рамка рисуется с указанным отступом внутрь краёв контрола, т.е. предварительно к прямоугольнику применяется InflateRect( R, -FrameInflate, -FrameInflate );
FrameColor TColor clNone Цвет рамки. Данное свойство скорее не для вывода на печать, а как раз для тех случаев, когда TNormalLabel используется как визуальный контрол на форме.
FrameRadius Integer 0 Радиус скругленных уголков рамки. Свойство Frames в случае FrameRadius > 0 более не действует, и рамка рисуется со всех четырех сторон, при этом уголки скругляются (но свойство FrameWidth по-прежнему задёт толщину линии рамки).
Frames TFrames [ ] Рамки (сверху, снизу, слева и справа).
FrameStyle   fsSolid Стиль рамки. Варианты:
fsSolid - сплошная линия
fsDotted - точечная линия
fsNone - рамка отсутствует (даже если указаны все границы свойством Frames).
FrameWidth Integer 1 Толщина линий, используемых для изображения рамки - в экранных координатах.
InFontMinSize Integer 4 Минимальный размер шрифта, до которого может быть уменьшен шрифт при автоматическом вписывании текста в ячейку, при включённом свойстве InFontScale.
InFontScale Boolean FALSE При включении этого свойства, в случае, когда весь текст (Caption) ячейки не вмещается, процедура рисования автоматически пытается уменьшить размер шрифта, используемого для рисования текста - но не более чем до размера, определяемого свойством InFontMinSize.
InProportionalScale Boolean TRUE Для установленного свойства InScale, определяет будут ли соблюдаться пропорции при масштабировании текста.
InScale Boolean FALSE Другой способ вписывания текста, который весь не вмещается. Ячейка сначала рисуется на временном растровом рисунке в памяти, затем выводится в ячейку с масштабированием. Свойство InProportionalScale определяет, будут ли сохраняться пропорции при масштабировании (если нет, то текст может еще дополнительно вытягиваться по вертикали или горизонтали, стремясь занять весь прямоугольник контрола - в некоторых случаях это помогает повысить читабельность растянутого текста).
Layout   tlTop Выравнивание текста по вертикали
MarginBottom Integer 2 Отступ снизу Отступы от краёв до текста. В случае наличия рамки отступ от края рамки, с учётом ее толщины.
MarginLeft Integer 2 Отступ слева
MarginRight Integer 2 Отступ справа
MarginTop Integer 2 Отступ сверху
MouseTransparent Boolean FALSE Прозрачность для мыши. Данное свойство предназначено для случаев, когда TNormalLabel используется как визуальный контрол. Например, он может быть положен на любой другой контрол (кнопку) в качестве элемента, форматирующего текст. При этом мышь продолжает взаимодействовать с контролом-контейнером "насквозь" через TNormalLabel.
TextOrientation TTextOrientation toNormal Направление текста. Другие варианты:
to90ACW - текст повернут на 90 градусов против часовой стрелки (снизу вверх);
to90CW - текст повернут на 90 градусов по часовой стрелке (сверху вниз).
TextRotateViaBitmap Boolean FALSE Способ поворота и масштабирования. Значение TRUE - более быстрая отрисовка, используется рисование во временный битмап в памяти, с последующим поворотом или масштабированием этого битмапа, и с копированием содержимого результирующего битмапа на канву экрана или принтера. Этот способ достаточен, когда TNormalLabel используется как обычный визуальный контрол.

Значение FALSE - более качественная отрисовка. Сначала контрол изображается во временном метафайле, после чего этот метафайл отображается во временном битмапе в памяти, размеры которого в 10 раз больше, чем имеет контрол на экране (отображение с масштабированием). Затем этот увеличенный битмап поворачивается (или масштабируется), и результирующий битмап отображается на канву экрана или принтера с масштабированием вниз или вверх. В результате, при печати на принтере качество изображения получается выше, чем в случае TRUE.

Transparent Boolean FALSE Прозрачность. Данное свойство предназначено только для печати на принтере, действие заключается в том, что при отрисовке контрола опускается заполнение цветом фона. В результате, контрол может использоваться для надпечатки текста, рамки, диагонали поверх других нарисованных компонентов.
При использовании на форме в качестве визуального контрола НЕ РАБОТАЕТ!
Visible Boolean TRUE Видимость для использования как обычного визуального контрола. При выводе на печать игнорируется.
WordWrap Boolean TRUE Перенос текста по словам, при достижении конца строки.

WrapLetters Boolean FALSE Перенос текста по буквам, при достижении конца строки.
WrapSyllabel Boolean FALSE Перенос текста по слогам, при достижении конца строки.

События компонента TNormalLabel, доступные из Инспектора объектов.

По сравнению с предком TNormalBand, добавляются только события OnMouseEnter и OnMouseLeave. Они предназначены для случаев использования контрола в качестве обычного визуального элемента на форме.

Свойства и методы компонента TNormalLabel, доступные во время выполнения.

В дополнение к функции DesiredHeight, появляются дополнительно следующие методы:
 
Имя свойства или декларация метода Описание
function DesiredWidth: Integer; Желательная ширина контрола (с целью обеспечения того, чтобы весь текст вместился необрезанным). В случае WordWrap, WrapLetters или WrapSyllabels возвращается собственная ширина без изменений.
function ActualMarginLeft: Integer; Расстояние от края контрола до текста слева, справа, сверху, снизу. Учитывается наличие рамки с нужной стороны и её толщина.
function ActualMarginRight: Integer;
function ActualMarginTop: Integer;
function ActualMarginBottom: Integer;
function ActualFrameRadius: Integer; Окончательный радиус скругления уголков. Свойство FrameRadius исправляется до половины максимального размера стороны.
function ActualFrameColor: TColor; Окончательный цвет рамки. В случае, когда FrameColor = clNone (значение по умолчанию), возвращается цвет текста.






Форма предварительного просмотра TfmNormalPreview

Эта форма предназначена для отображения подготовленных к печати листов. Некоторые свойства этой формы могут быть настроены в дизайнере через свойства компонента TNormalReport. Прочие свойства могут быть исправлены только в назначенном обработчике TNormalReport..OnCreatePreviewForm и OnShowPreviewForm. Например, в этих обработчиках может быть подменён список пиктограмм для кнопок инструментальной линейки, назначены дополнительные обработчики событий или заменены существующие.


Свойства, события и методы класса TfmNormalPreview, доступные во время выполнения.

Имя свойства / Объявление метода Тип свойства Атрибуты
доступа
(для свойств)
Описание
CurrentPage Integer R/W Номер текущей страницы от 1 до общего числа страниц.
Report TObject R/W Ссылка на объект TNormalReport, вызвавший эту форму. Внимание: доступ для записи - только для внутреннего использования!
Printer TPrinter R Доступ к объекту принтера. Например, для вызова диалога настроек, или изменения свойств печати.
FitMode Integer R/W 0 - весь лист, 1 - вписать по ширине, 2 - без масштабирования
procedure Fit_Page(Sender: TObject);     Вписать всю страницу. Sender игнорируется.
procedure Fit_Width(Sender: TObject);     Вписать по ширине.
procedure As_Is(Sender: TObject);     Без масштабирования.
procedure Print_Page(Sender: TObject);     Отправляет на печать текущую страницу.
procedure Print_Setup(Sender: TObject);     Вызывает диалог настроек печати.
procedure First_Page(Sender: TObject);     Переход к первой странице.
procedure Prev_Page(Sender: TObject);     Переход к предыдущей странице.
procedure Last_Page(Sender: TObject);     Переход к последней странице.
procedure Next_Page(Sender: TObject);     Переход к следующей странице.
procedure Print_All_Close(Sender: TObject);     Печать всех страниц документа и закрытие формы предварительного просмотра. Если Sender = nil, то диалог настройки печати не вызывается.
procedure Vertical_Expand(Sender: TObject);     Увеличение размеров формы по вертикали до размеров рабочего стола.

 


(C) by Vladimir Kladov, 2000-2010