QuickReport 2.0Copyright 1997 QuSoft ASFor updates please go to http://www.qusoft.noОбновления доступны на сервере: http://www.qusoft.noQuSoft ASFred Olsensgt. 1N-0152 OsloNorwayFax +47 22 41 74 91Doc rev 1.2Copyright 1997 NPS, перевод на русский язык 1. Введение 61.1. Предистория 61.2. Насчет QuickReport 72. Использование QuickReport 92.1. Первый отчет 92.1.1. Простой отчет 92.1.2. Другие типы секций 102.1.3. Получение данных 102.1.4. Фильтрация и сортировка данных 112.1.5. Добавление текста и полей данных 112.2. Создание отчетов 122.2.1. Разметка, единицы измерения и масштаб 122.2.2. Размер бумаги и границы 132.2.3. Выбор шрифта 142.2.4. Заголовок отчета и описание 142.2.5. Добавление секций 152.2.6. Размеры секций 172.2.7. Порядок печати секций 182.2.8. Выключение секций 182.2.9. Добавление печатных компонент к отчету 202.2.10. Насчет текстовых компонент 212.2.10.1. Автоматический размер 212.2.10.2. Перенос слов 212.2.10.3. Авто расширение 212.2.10.4. Размер 212.2.10.5. Стиль шрифта и цвет текста 212.2.10.6. Выравнивание 222.2.10.7. Выравнивание по секции 222.2.10.8. Цвет фона и прозрачность 222.2.10.9. Рамки 222.2.10.10. Разрешение и запрет 232.2.10.11. Печать статического текста 232.2.11. Печать из полей базы данных 232.2.11.1. Форматирование вывода 242.2.11.2. Печать мемо полей 242.2.11.3. Печать простых графических фигур 242.2.12. Печать графики 252.2.12.1. Статические изображения 252.2.12.2. Загрузка изображений в Runtime 252.2.12.3. Изображения, хранящие в таблицах 262.2.13. Печать RichText полей 262.3. Использование выражений 262.3.1. Создание выражений 272.3.1.1. Использование полей базы данных в выражениях 282.3.1.2. Использование строк в выражениях 282.3.1.3. Примеры выражений 292.3.2. Использование выражений 302.3.3. Размер стека 302.4. Создание групп 303. Расширенная техника 343.1. Создание отчетов из кода 343.1.1. Классы построителя отчетов (Report Builder) 343.1.2. Использование шаблонов с Report Builder 363.1.3. Нижний уровень 363.2. Использование QRPrinter 373.2.1. Пример создания задания на печать 374. Расширение QuickReport 384.1. Насчет дополнений к QuickReport 384.1.1. Печатные компоненты 384.1.2. Фильтры экспорта 384.1.3. Библиотеки функций 384.1.4. Редакторы отчетов 384.2. Написание печатных компонент 394.2.1. Пример компонента CheckBox 394.2.2. Компоненты, работающие с базами данных 404.3. Расширение интерпретатора выражений 414.3.1. Простые функции 415. Справочник по QuickReport 435.1. метод AddPrintable 435.2. Событие AfterPreview для TQuickRep 445.3. Событие AfterPrint для TQuickRep 445.4. Событие AfterPrint для секций 445.5. Свойство Alignment 455.6. Свойство AlignToBand 455.7. Свойство AlignToBottom 455.8. Свойство AllDataSets 465.9. Метод ApplySettings 465.10. Свойство AutoSize 475.11. Свойство AutoStretch 485.12. Свойство Available 495.13. Свойство BandList 495.14. Свойство Bands для TQRSubDetail 505.15. Свойство Bands 505.16. Свойство BandType 515.17. Событие BeforePrint для TQuickRep 525.18. Событие BeforePrint для Bands 525.19. Свойство Brush 535.20. Свойство Caption 535.21. Свойство Center 535.22. Свойство ChildBand 535.23. Свойство Color 545.24. Свойство ColumnTopPosition 545.25. Свойство Copies 545.26. Свойство CurrentColumn 555.27. Свойство CurrentX 555.28. Свойство CurrentY 555.29. Свойство Data 565.30. Свойство DataField 565.31. Свойство DataSet 565.32. Свойство DataSet для TQRDBText 575.33. Свойство Description 575.34. Свойство Designer 585.35. Свойство Device 585.36. Свойство Driver 585.37. Свойство Enabled 595.38. Свойство ExportFilter 605.39. Свойство Exporting 605.40. Метод ExportToFilter 615.41. Свойство Expression для TQRExpr 615.42. Свойство Expression для TQRGroup 615.43. Свойство Font 625.44. Свойство FooterBand 625.45. Свойство ForceNewColumn 625.46. Свойство ForceNewPage 635.47. Свойство HeaderBand 635.48. Свойство LeftOffset 635.49. Свойство Lines 645.50. Свойство Mask 645.51. Свойство Master для TQRChildBand 645.52. Свойство Master для TQRExpr 655.53. Метод NewColumn 655.54. Метод NewPage 665.55. Событие OnEndPage 665.56. Событие OnNeedData 675.57. Событие OnPreview 685.58. Событие OnStartPage 685.59. Свойство Options 685.60. Свойство Orientation 695.61. Свойство OutputBin 705.62. Свойство Page 705.63. Свойство PageNumber 715.64. Свойство PaperLength 715.65. Свойство PaperSize 725.66. Свойство PaperSizeSupported 725.67. Свойство PaperWidth 735.68. Свойство ParentFont 745.69. Свойство PixelsPerX 745.70. Свойство PixelsPerY 755.71. Метод Prepare 755.72. Метод Preview 765.73. Метод Print 765.74. Свойство Printer 765.75. Свойство PrinterSettings 765.76. Метод PrinterSetup 775.77. Метод PrintBackground 775.78. Свойство PrintIfEmpty 775.79. Свойство QRPrinter 785.80. Свойство RecordCount 785.81. Свойство RecordNumber 795.82. Свойство ReportTitle 795.83. Свойство ResetAfterPrint 805.84. Метод ResetPageFooterSize 805.85. Свойство ShowProgress 815.86. Свойство Stretch 815.87. Свойство Text 815.88. Класс TPrinterSettings 825.89. Класс TQRAboutBox 835.90. Компонент TQRBand 845.91. Компонент TQRChildBand 855.92. Компонент TQRDBImage 855.93. Компонент TQRDBText 875.94. Компонент TQRExpr 875.95. Компонент TQRImage 895.96. Компонент TQRLabel 905.97. Компонент TQRMemo 915.98. Компонент TQRShape 925.99. Тип TQRShapeType 925.100. Компонент TQRSubDetail 935.101. Компонент TQRSysData 935.102. Компонент TQuickRep 945.103. Свойство Transparent 965.104. Свойство Shape 975.105. Свойство Size для Bands 975.106. Свойство Units 985.107. Свойство WordWrap 985.108. Свойство Zoom 98Приложения 100A – Иерархия классов QuickReport 100B – Описание файлов 102C – Конвертирование из QuickReport 1 103Заказ QuickReport 2.0 Professional 104 ^ 1. Введение История создания и общая информация об QuickReport и его документации.1.1. Предистория Первоначально QuickReport был создан, как редактор отчета для небольшого проекта написанного на Delphi. Когда я сначала начал писать QuickReport, то целью было создание минимального редактора отчетов для небольшого проекта, написанного в Delphi. Но это скоро развилось в отдельный проект, предназначенный непосредственно для изучения Delphi VCL, написания собственных компонент, а также общее программирование Windows. По размышлению, что, возможно, это окажется полезным не только мне, я опубликовал очень раннюю версию на Интернете в июне 1995, как Freeware. По откликам от других Delphi разработчиков, я оказался не единственным, кто нуждался в подобном инструменте и так как в это время еще не было ничего аналогичного, то Я решил расширить его и выпустить как shareware.Красота QuickReport 1 в его простоте. Способность создавать почти любой тип отчет с помощью генератора отчета, состоящим менее чем 5.000 строк кода действительно показывает силу основного инструмента. QuickReport использует редактор форм Delphi, и доступ до баз данных Delphi для получения данные и даже позволяет Вам использовать код Delphi, чтобы непосредственно управлять отчетом во время его подготовки. Данный продукт понравился разработчикам из Borland, и они его включили в Delphi 2.0, как составную часть Delphi-32. Это привело к резкому увеличению количества пользователей, и QuickReport быстро достиг своих пределов. Вспомним, что он первоначально был разработан для выполнения простых задач и теперь почти перерос внутренний проект и структуру. Скоро стало ясно, что следующее поколение QuickReport требует полной переработки, но должен сохранить вложенные в него идеи, как QuickReport должен работать.Результат - то, что Вы имеете теперь, QuickReport 2.0. Это состоит из приблизительно 15.000 строк кода, но не добавляет намного больше к тому что делала версия 1. Это работает быстрее и имеет более мощные возможности, чем прежде и может быть далее расширено многими способами. Этот выпуск - только первый шаг по продвижению к еще более мощному, гибкому и удобному инструменту создания отчетов. Идеи и особенности следующего поколения QuickReport уже определены, так что будьте готовы к некоторым сюрпризам!Даже притом, что QuickReport был главным образом создан одним человеком, все имеются некоторые люди, кто заслуживает особую благодарность. Borland International оказал наибольшую помощь, специальная благодарность Диане, Дэнни и Чаку. Дэвиду Бернеда, автору TeeChart и Магне Нильсен из Vega Software, оказавшие огромную помощь в создании. Наконец благодарю все Delphi пользователей, кто поддержал QuickReport, присылая сообщения об ошибках и ободрительные слова.Алан Локерт^ 1.2. Насчет QuickReport QuickReport 2.0 включает следующие свойства:Основанный на группах генератор отчетов;Визуальное создание отчета;Подлинный Delphi VCL компонент, 100% написанный на Object Pascal;Чрезвычайно точное позиционирование данных в отчете;Совместимость с Delphi 1.0, 2.0 и 3.0;От 100 до 350 Кбайт памяти для производства печати, в зависимости от использованных свойств;Много поточность;Встроенный просмотр;Неограниченный размер отчета;Неограниченный размер для memo полей;Поддержка RichText формата;Отчет через любой BDE совместимый источник данных, включая ODBC;Печать любых данных, используя события;Неограниченное количество источников данных для master-Detail отчетов;Неограниченное количество групп;Составные отчеты; Создание дополнительных компонент для отчетов;Собственные процедуры просмотра;Расширяемость с помощью новых компонент подобных: Деловая графика, Штрих коды, дополнительные графические форматы и многое другое;Расширенный интерпретатор и генератор выражений;Мастер отчетов;Классы для создания отчетов;Полное управление принтером;Просмотры полностью совместимые с MDI и SDI, просмотр неограниченного количества отчетов одновременно;Экспорт отчетов в ASCII текст, comma delimited или HTML. Написание собственных дополнений и фильтров экспорта;Полный исходный текст;Используется Borland international и имеет поддержку от группы технической поддержки Borland.^ 2. Использование QuickReport Данная глава рассматривает, как создавать отчеты, как осуществлять их просмотр и печать из вашей программы.2.1. Первый отчет В данной главе краткое описание по созданию простого отчета. Большинство основных компонент QuickReport будут кратко рассмотрены в процессе создания отчета.^ 2.1.1. Простой отчет QuickReport это генератор отчетов, основанный на секциях (band). Ваш отчет состоит из секций с текстом и графическими компонентами внутри секции. Данные секции размножаются в процессе создания окончательного отчета, в зависимости от исходных данных. Простой отчет должен следующие компоненты, помещенные на форму.DataSet (TTable) ;QuickReport компонент подсоединенный к DataSet;Секцию Detail;Компонент TQRDBText в секции Detail. Для создания отчета выполните следующие шаги:Создайте новый проект;Поместите TTable компонент на форму. Выберите алиас DBDemos, как DatabaseName, Customer как TableName и установите Active в True;Поместите TQuickRep компонент на форму и установите свойство DataSet в Table1;Раскройте свойство Bands;Установите HasDetail в True. Эти Вы создали секцию Detail в отчете;Поместите TQRDBText компонент на секцию Detail, установите DataSet в Table1 и DataField в Company.Теперь есть все необходимые компоненты для создания отчета.Для просмотра отчета Вы можете щелкнуть правой кнопкой по компоненту TQuickRep и выбрать пункт Preview. Если вы все выполнили правильно, то вы увидите в окне просмотра готовый отчет.Сейчас вы имеете отчет, работающий в режиме проектирования (^ Design Time), для того, чтобы данный отчет работал в режиме runtime, выполните следующие шаги:Добавьте кнопку на вашу главную форму и установите ее свойство Caption в ‘Preview’;В обработчике события OnClick наберите следующий текст:QuickRep1.Preview;Запустите ваше приложение и нажмите кнопку Preview для просмотра отчета. Для печати отчета вместо метода Preview используйте метод Print.Так мы создали простой отчет. В следующих главах мы рассмотрим создание остальных типов отчетов.^ 2.1.2. Другие типы секций Важно знать типы секций и их использование. В свойстве Bands вы можете назначить одно из шести типов секций. Секции появятся в компоненте TQuickRep в порядке, в котором они будут печататься.Секции могут быть добавлены путем выбора из палитры компонент и помещением их на компонент TQuickRep. Вы должны позаботиться за установкой свойства BandType в необходимое значение. Так же хорошим тоном является задания значимого имени компоненту, например PageHeaderBand, DetailBand и так далее. Это выполняется автоматически, если вы добавляете секции с использованием свойства TQuickRep.Bands.В дополнение для создания групп и Master-Detail отчетов используются те же самые секции.^ 2.1.3. Получение данных QuickReport может получать данные от различных источников. Обычно вы присоединяете ваш отчет к Delphi компоненту DataSet, такому как TTable или TQuery. DataSet может находиться на той же самой форме, что и отчет, на другой форме или в модуле данных. Если DataSet не находится в форме отчета, то требуется добавить в раздел uses модуль формы или данных. Затем следует установить свойство DataSet компонента TQuickRep для связи с DataSet.DataSet должен быть активным во время печати отчета, в противном случае отчет не генерируется.^ 2.1.4. Фильтрация и сортировка данных QuickReport не имеет своих собственных средств для сортировки данных. Данные всегда печатаются в том порядке, в каком они поступают от источника данных. Для изменения порядка печати данных укажите индекс в компоненте TTable присоединенном к отчету. Если такого индекса не существует, то добавьте нужный или используйте компонент TQuery.При печати отчета с помощью компонента TQuery задайте порядок сортировки в запросе. Смотрите соответствующую документацию по написанию SQL запроса.Фильтрация данных может быть выполнена несколькими различными путями. Если вы печатаете с помощью компонента TTable и используете Delphi 2.0 или выше, то вы можете использовать свойство TTable.Filter для создания условий фильтрации. Не забудьте также становить свойство TTable.Filtered.Другое возможное решение – это использовать компонент ^ TQuery и указать условие Where для выбора условий фильтрации. Delphi позволяет создавать параметризированные запросы, которые позволяют просто управлять данным процессом. Смотрите документацию Delphi по данному вопросу.Третий возможный путь – это использовать событие BeforePrint вашей Detail секции для включения или выключения печати данной секции. Пример ниже показывает использования обработчика данного события.procedure TrepList.ReportDetailPrintEvent(Sender:TComponent; PrintBand : Boolean);begin PrintBand := CustomerTableCompany.Value > ‘H’;end;^ 2.1.5. Добавление текста и полей данных Для печати текста в отчете вы должны добавить печатные компоненты в ваш отчет. Имеется два основных компонента TQRLabel и TQRDBText.Компонент TQRLabel используется для печати статического текста, текста и чисел рассчитываемых во время генерации отчета. Для печати статического текста просто разместите компонент TQRLabel на соответствующей секции и укажите текст в свойстве Caption. Текст появится в соответствующей позиции секции и будет печататься всякий раз, как печатается данная секция.Вы можете изменить шрифт и цвет шрифта путем задания соответствующих свойств ^ Fonts. QuickReport поддерживает любые TrueType или PostScript шрифты.Вы можете изменить свойство Caption в любом обработчике во время генерации отчета. Таким образом вы можете делать вычисления или строковые операции напрямую в коде и печатать результат в отчете. Более подробная информация и примеры использование приведены далее в данном документе.Используя компонент TQRDBText, вы можете печатать информацию из полей базы данных. Разместите компонент в секции и свяжите его с источником данных. Затем выберите поле, которое вы желаете печатать.Вы можете также использовать компонент TQRExpr для печати статических или динамических данных и полей базы данных.2.2. Создание отчетов Первым шагом в создание отчета, является создание формы для размещения вашего компонента TQuickRep. Мы назовем данную форму, как «Форма отчета», так как это является просто контейнером для вашего отчета и никогда не показывается как форма для конечного пользователя. Данная форма будет фигурировать в менеджере проекта Delphi и поэтому требуется дать имя, которое однозначно идентифицирует данный отчет. Именуйте все подобные формы, начиная с букв «rep». Возможно, вы примените данное правило и для именования модуля.Второй шаг – это поместить компонент печати на форму. Так как вы уже имеете именованную форму, то хорошим тоном дать всем компонентам на форме имена аналогичные имени формы. Например, называть компонент TQuickRep везде как Report и тогда вы можете ссылаться repCustomerListing.Report, repSalesListing.Report и так далее.2.2.1. Разметка, единицы измерения и масштаб После размещения компонента TQuickRep на форме вы увидите разметку, позволяющую вам позиционировать ваша компоненты. Сетка показывается в текущих единицах TQuickRep. Это помогает позиционировать и устанавливать размеры очень с точностью 1/100 дюйма или 1/100 миллиметра. Вы можете выбрать единицы отображения, изменив свойство TQuickRep.Units. Разметка обновляется при изменении свойства.На большинстве мониторов возникают проблемы с просмотром всего размера компонента, так как это связано с текущим размером бумаги. Для получения четкого представления используйте свойство Zoom. Изменение данного свойства немедленно отображается в редакторе. Данное свойство также может использоваться для просмотра важных деталей или точного позиционирования компонента.2.2.2. Размер бумаги и границы Вы можете точно настаивать ваши страницы путем определения свойства Page компонента TQuickRep. Двойной щелчок по данному свойству разворачивает список подсвойств. Вы увидите все возможные свойства, которые управляют страницей. Все значения даются в выбранных единицах отображения. Выбранные границы показываются линиями из синих точек на компоненте TQuickRep. Ваши секции изменяются с учетом границ. Вы можете выбирать между portrait и landscape печатью (обычная и альбомная) и также можно включить/выключить показ разметки или линейки. Свойство PaperSize (размер бумаги) позволяет выбрать некоторые типовые размеры из следующего списка Letter, LetterSmall, Tabloid, Ledger, Legal, Statement, Executive, A3, A4, A4Small, A5, B4, B5, Folio, Quarto, qr10X14, qr11X17, Note, Env9, Env10, Env11, Env12, Env14, CSheet, DSheet, и Esheet Это значения определенные в Windows. Выбор размера бумаги автоматически отображается в свойствах PaperLength и PaperWidth. Вы также можете установить PaperSize в Custom и установить свойства PaperLength и PaperWidth в необходимое значение. Примечание: не все принтеры поддерживают все указанные размеры. Также многие принтеры не поддерживают тип Custom (пользовательский) или позволяют изменять размеры только в определенных границах.Если вы выбираете размер, не поддерживаемый принтером, то QuickReport автоматически переключается на размер по умолчанию, во время подготовки отчета. Размер по умолчанию устанавливается в настройках принтера.Некоторые принтеры имеют дополнительные размеры бумаги. Эти размеры не могут быть определенны в данной версии QuickReport, но вы можете создать пользовательский тип с теми же самыми размерами.Некоторые драйверы принтеров не позволяют устанавливать пользовательские размеры из приложения. Вы обязаны в данном случае выбрать пользовательский размер в драйвере принтера и определить бумагу. 2.2.3. Выбор шрифта Шрифт по умолчанию для отчета устанавливается в свойстве TQuickRep.Font. Двойной щелчок по свойству раскрывает список подсвойств, где вы можете выбрать шрифт, размер, атрибуты и цвет. Все шрифты, указанные здесь – это шрифты установленные в Windows (True Туре шрифты и некоторые PostScript шрифты, если установлена программа Adobe TypeManager).Вы можете использовать любые комбинации шрифтов, но рекомендуется использовать только True Туре и PostScript, если используется просмотр отчетов, так как системные шрифты доступны только для ограниченного количества типоразмеров и не могут нормально масштабироваться в просмотре. Некоторые игольчатые принтеры печатаю быстрее, если вы выбираете шрифт, который встроен в принтер, обычно называется принтерный шрифт. Эти шрифты не показываются в свойстве font, но могут быть использованы в runtime путем установки в программе соответствующего свойства.repCustomerListing.Report.Font.Name := 'CG TIMES';По умолчанию все компоненты отчета наследуют установки шрифта из отчета. Для некоторых компонент, у которых шрифт указывается явно или его свойство ParentFont установлено в False, не наследуют установки из отчета.Примечание: вы также можете переписать шрифт для любой секции.Для хорошей читабельности отчета не рекомендуется использовать много шрифтов, цветов и стилей в одном отчете.2.2.4. Заголовок отчета и описание Отчет может иметь как заголовок, так и описание. Данные свойства предназначены для идентификации и описания отчета в приложение. Обычно вы имеете систему меню со списком всех ваших отчетов и показываете описание, когда пользователь выбирает отчет. Пример использования можно найти в демонстрационном проекте. Заголовок отчета также можно напечатать с помощью компонента TQRSysData. 2.2.5. Добавление секций QuickReport является генератором отчетов, основанным на секциях, так что – это самая важная часть вашего отчета. Если вы не знакомы с подобными генераторами, то вы можете думать о секциях, как о полосках бумаги, на которые вы пишите свои данные и вклеиваете их на лист бумаги. Различные полоски могут быть заполнены различными данными и вклеены в различные места листа (отчета).Наиболее простой путь добавить секцию – это развернуть свойство TQuickRep.Bands в Инспекторе Объектов. Щелкните мышкой по значку «+» и развернет список секций.Все типы секция теперь видны и Инспектор Объектов показывает, используется секция или нет. Вы можете добавить или удалить секцию путем смены свойства с True на False и обратно. Когда секция создается подобным путем, то секция также получает название, подобное DetailBand1, PageHeaderBand1 и так далее. Тип секции также устанавливается автоматически.Вы также можете добавить секции путем выбора компоненты ^ TQRBand из палитры компонент и размещением ее на отчете. Но вы должны позаботиться о правильной установке типа секции и дать хорошее имя. Свойство Bands в Инспекторе Объектов, также отобразит ваши изменения. Типы секций также могут быть добавлены к отчету двумя путями: PageHeader «^ Заголовок страницы» Самая первая секция, печатается на всех страницах. Печать на первой странице зависит от свойства TQuickRep.Options.FirstPageHeader. Значение по умолчанию – не печатать на первой странице. Title «^ Секция заголовка»Первая секция, печатаемая в отчете (после самого первого заголовка страницы). Используется для печати заголовка, критерия выбора, даты и времени создания отчета и т.д. ColumnHeader «^ Заголовок колонок»Заголовок колонок печатается пред печатью самих колонок. В простом одно-колоночном отчете печатается один раз на листе, вслед за заголовком страницы (и заголовком на первом листе). Для многоколоночного отчета печатается один раз для каждой колонки. Наиболее часто используется для печати заголовков полей. Detail «Данные»Секция данных печатается для каждой строки данных вашего набора данных (DataSet). Это конечная самая важная часть вашего отчета и как правило занимает основное место в отчете. Обычно вы помещаете данные в секцию через компоненты, работающие с базами данных (data aware printable controls - TQRDBText и другие). Summary «Суммы»После секции данных вы можете напечатать итоговые данные. PageFooter «^ Подвал страницы»Последняя секция, печатаемая на каждом листе. Печать данной секции зависит от свойства TQuickRep.Options.LastPageFooter. По умолчанию не печатается на последней странице. Когда вы добавляете секции к отчету, они сортируются автоматически, в соответствии с порядком печати. Вы увидите, что секция PageHeader на самом верху, перед секцией Title, заголовок колонок и так далее. Несмотря на то, что можно вручную добавить секцию к отчету и установить ее свойство в SubDetail или GroupHeader - это может не отработать, так как данные типы секций резервированы для компонент TQRSubDetail и TQRGroup. Неверная установка данного типа может привести к неверной печати отчета.2.2.6. Размеры секций Секции получают свой горизонтальный размер автоматически. Для одно-колоночного отчета – это размер бумаги минус отступы. Единственный тип изменить размер секции – это изменить параметры отступов. Ширина некоторых секций зависит от свойства Page.Columns компоненты TQuickRep. Если вы создаете многоколоночный отчет (например: телефонный справочник), то ширина заголовка колонки, секции данных, заголовка группы и подвал группы настраиваются в зависимости от ширины отдельной колонки.Вы можете изменять вертикальный размер любой секции. Изменяется стандартным путем с помощью мышки. Если требуется более точная установка размера, то можно это сделать с помощью Инспектора Объектов свойство TQRBand.Size, размер устанавливается в текущих единицах измерения.В случае изменения размера с помощью Инспектора Объектов – обновление на экране не происходит, только в runtime, то свойство есть ведет себя как read-only.2.2.7. Порядок печати секций (Page header)Заголовок страницы (повторяется на каждой странице) (Title)Заголовок (на первой странице) (Column header)Заголовок колонки (повторяется для всех колонок) (Detail)Секция данных (повторяется для всех записей) (Summary)Итоги (на последней странице) (Page footer)Подвал (повторяется на каждой странице) Секции появляются в компоненте TQuickRep в соответствии с порядком печати. Тем не менее важно понимать почему это сделано так. Обычно секции печатаются в следующем порядке: Это немного отличается, если используются группы, но если вы знаете, данный порядок размещения, то остальное становится намного проще.2.2.8. Выключение секций Иногда требуется отключить печать секции, в зависимости от некоторых условий, или во время проектирования (design time) или во время исполнения (runtime). Во время проектирования установите свойство TQRBand.Enabled в значение False. Данное свойство также может быть установлено во время исполнения, до генерации отчета или в любом обработчике во время генерации отчета.Во время генерации отчета вы можете временно запретить печать секции в обработчике события BeforePrint. Данный обработчик получает var параметр PrintBand, который требуется установить в значение False, если не требуется печатать секцию – это действует только на одно событие, то есть когда в следующий раз вырабатывается данное событие, требуется повторная установка параметра. Данная особенность может использоваться для простой фильтрации данных:Procedure TrepCusList.RepDetailBeforePrint( Sender:TQRCustomBand; var PrintBand: Boolean);begin if CustTableTotalSales > 3000000 then PrintBand := True else PrintBand := False;end;Очень часто забывают, что данная проверка и установка параметра может быть сделана короче и быстрее следующим образом:procedure TrepCusList.RepDetailBeforePrint( Sender: TQRCustomBand; var PrintBand: Boolean);begin PrintBand := CustTableTotalSales > 3000000;end; Если вы выключаете печать подвала (page footer), то остается пустое пространство внизу страницы вместо заполнения данного пространства данными из секции Detail. Это случается, потому что QuickReport не может проверять размер подвала все время, что резко снизило бы быстродействие системы. Если вы запрещаете печать подвала, то вы должны также изменить и его размер, вызвав метод QuickRep.ResetPageFooterSize, что бы QuickReport мог правильно рассчитать размер страницы для данных.2.2.9. Добавление печатных компонент к отчету Для печати информации в отчете вы должны добавить печатные компоненты в ваши секции. В состав QuickReport включено много печатных компонент, но также возможно создать свои собственные или компоненты третьих сторон. В следующей таблице перечислены компоненты поставляемые с QuickReport: TQRLabel Для печати статического текста, соответствует TLabel для Delphi форм. Свойство Caption может быть изменено во время генерации отчета. TQRDBText Для печати данных из полей базы данных, подобно TDBText. Так же может использоваться для печати memo полей (blob fields). TQRExpr Интерпретатор выражений QuickReport. Смотри соответствующую главу. TQRSysData Используется для печати информации подобной Заголовок Отчета (report title), номер страницы (page number), дата и время. Примечание: некоторые из данных видов информации могут быть отпечатаны с помощью TQRExpr. TQRMemo Аналогичен TQRLabel, плюс возможность печати многострочного текста. Обычно используется для создания блоков текста. TQRRichText Для печати форматированного RichText текста. Может быть связан с компонентом RichEdit на форме, и печатать его содержимое. Доступен только для 32 битной версии Delphi 2.0 или 3.0. TQRDBRichText TQRRichText версия для баз данных. Доступен только для 32 битной версии Delphi 2.0 или 3.0. TQRShape Для печати квадратов, кругов, горизонтальных и вертикальных линий. Аналогичен TShape. TQRImage Для печати статических изображений. Может печатать BMP, WMF и ICO форматы. Аналогичен TImage. TQRDBImage TQRImage версия для баз данных. Извлекает изображение и blob полей, аналогичен TDBImage, для Delphi форм. 2.2.10. Насчет текстовых компонент Все текстовые печатные компоненты QuickReport имеют общую функциональность, которую они наследуют из базового класса. Если вы желаете получить более подробную информацию, то смотрите главу 4.1.1. Печатные компоненты.2.2.10.1. Автоматический размер Компоненты могут расширяться по горизонтали автоматически, что бы разместить весь текст или иметь фиксированный размер. В случае фиксированного размера, текст обрезается по границам заданного прямоугольника.2.2.10.2. Перенос слов Если установлено свойство AutoSize в значение True текст может занимать несколько строк при условии, что свойство WordWrap также установлено.2.2.10.3. Авто расширение При установке свойства WordWrap, компонент может расширяться вертикально, если текст не помещается в горизонтальных границах. Если компонент расширяется, то одновременно расширяется и соответствующая секция, при условии установки свойства CanExpand. Секция может расширяться на несколько страниц для печати длинного текста.Примечание: если компонент расширяется, то это не перемещает другие компоненты в той же секции вниз. Если вы имеете компоненты, положение которых зависит от других компонент, то вы должны поместить это на секцию типа child. Смотри главу 5.91. Компонент TQRChildBand для получения дополнительной информации.2.2.10.4. Размер Все печатные компоненты имеют свойство Size. Если свойство AutoSize не установлено, то вы можете задать компоненту точный размер. Позиция компонента рассчитывается относительно секции. Единицы измерения указываются в зависимости от выбранных в текущий момент времени единиц и задаются с высокой точностью.Если свойство AutoSize установлено, то вы также можете менять размеры с помощью мышки.2.2.10.5. Стиль шрифта и цвет текста Печатные текстовые компоненты могут иметь индивидуальные установки для шрифтов или наследовать их от владельца. Для наследования следует установить свойство ParentFont, а для индивидуальных установок сбросить и назначить параметры через свойство font.2.2.10.6. Выравнивание Компоненты могут выравнивать по левой, правой границе или по центру. Для компонент, у которых установлено свойство AutoSized расширение компонента происходит следующим образом: влево для выровненных вправо (right aligned text), вправо для выровненных влево (left aligned), в обе стороны для выровненных по центру (centered text).Для компонент, у которых свойство AutoSize сброшено, текст вписывается в установленные границы.2.2.10.7. Выравнивание по секции По умолчанию компоненты печатаются в позиции установленной во время проектирования. Иногда требуется выравнивать компоненты относительно секции, на которой компонент размещен. Возможно, вы пожелаете отцентрировать текст или выровнять по правой границе секции, например для номера страницы. Это достигается установкой свойства AlignToBand, в этом случае компонент выравнивается относительно секции вместо использования своих координат.2.2.10.8. Цвет фона и прозрачность Можно установить прозрачность текста (opaque) или наоборот. Если текст не является прозрачным, то свойство Color используется для прорисовки фона.2.2.10.9. Рамки Все текстовые компоненты могут иметь видимую рамку. 2.2.10.10. Разрешение и запрет Аналогично запрету печати секции вы можете запретить или разрешить печать текста путем установки свойства Enabled. Это можно сделать как во время проектирования, так и во время исполнения, перед генерацией отчета или во время генерации отчета в любом из обработчиков.. procedure repList.ReportDetailPrint(Sender: TObject; var PrintBand: Boolean);begin {Print negative values in red, positive in green, remove null value} if CustTableCredit.Value CreditLabel.Font.Color := clRed else CreditLabel.Font.Color := clGreen; if CustTableCredit.Value = 0 then CreditLabel.Enabled := False else CreditLabel.Enabled := True;end;2.2.10.11. Печать статического текста Статический текст, такой как заголовки, название колонок и полей обычно печатается с помощью компонента TQRLabel. Разместите компонент в секции и установите его свойство Caption. Текстовые метки меняю размер автоматически, с учетом установленных свойств.Если требуется печатать большой блок текста, то лучше использовать компонент ^ TQRMemo. Компонент не является связанным с базами данных и имеет свойство Lines для ввода текст. Текст также может быть загружен из потока во время проектирования или во время исполнения, с помощью методов Lines.LoadFromStream или Lines.LoadFromFile.2.2.11. Печать из полей базы данных Наиболее простой путь печатать поле из таблицы или запроса – это использовать компонент TQRDBText. Он работает аналогично компоненту TQRLabel, но вместо свойства Caption имеет свойства DataSet и FieldName. Данные свойства используются для связывания с любым полем. Все типы полей, которые поддержаны в Delphi могут быть использованы с данным компонентом, за исключением двоичных данных из blob полей. После выбора поля его имя показывается в редакторе, если ничего не выбрано, то ничего и не показывается. Уникальное свойство данного компонента – это то, что компонент может работать, даже если компонент данных (data controls) запрещен. TTable и TQuery имеет метод DisableControls, который запрещает обновление данных. Это используется для увеличения скорости работы программы. Но QuickReport может получать данные даже если компонент запрещен, этим вы можете увеличить скорость генерации отчета. Но будьте осторожны, некоторые Master-Detail связи не работают в данном случае. Поэтому данная возможность не должна использоваться в случае использования TQRSubDetail компонента.2.2.11.1. Форматирование вывода TQRDBText использует различные опции форматирования для полей. Если форматирование не назначено, то используется формат по умолчанию назначенный Delphi и текущие установки Windows. Используется для полей типа дата (date), время (time), денежные (currency) и с плавающей запятой.Для указания форматирования используется свойство Mask. Для различных типов полей маска работает по-разному. Цифровые поля, включая Integer и с плавающей запятой, денежные и BCD поля форматируются с помощью функции FormatFloat. Поля дат и времени с помощью функции FormatDateTime. Информация по данным функциям можно найти в документации по Delphi.2.2.11.2. Печать мемо полей Memo поля печатаются также как прочие поля с помощью TQRDBText. Вы можете назначить область печати, сбросив свойства AutoSize и AutoStretch и вручную назначить размеры. Только та часть текста, которая попадает в заданные границы, будет напечатана. Для расширения memo полей установите свойство AutoStretch. QuickReport сначала старается использовать размеры, которые вы назначили, затем старается расширить компонент и секцию. Если на странице не хватает места, то текст переносится на следующую страницу -колонку. В Delphi 1.0 memo поля не могут превышать размер в 64Kb, в Delphi 2.0 и 3.0 нет лимита на размер поля.2.2.11.3. Печать простых графических фигур Простые графические фигуры (Shape) часто используются для создания различных визуальных эффектов и улучшения внешнего вида отчета. Например рамки вокруг