Безопасность в Дельфи


Инструменты для печати TDBGrid


В этом обзоре рассматриваются компоненты, позволяющие быстро (без применения специальных генераторов отчетов) распечатать содержимое TDBGrid'а.

Примечание:
Во внимание не принимались особые "навороченные" Grid'ы (например компоненты EhLib v.1.56 ( сайт Torry) , ExDBGrid (сайт DelphiCity) и многие другие) , которые в частности могут печатать сами себя.
Нужен был именно компонент-связка, который печатает содержимое для любого наследника TDBGrid.

Использовались три компонента с сервера www.torry.ru.
Раздел VCL страница Grids -> Other и страница Print Vcl -> Print Tools.
Все компоненты тестировались в одинаковых условиях: Windows NT + Delphi 5
Название Print DBGrid v.1.0
URL Раздел VCL страница Grids -> Other
http://www.torry.ru/gridsother.htm
http://www.torry.ru/vcl/grids/other/oddataprn.zip
Распространение ShareWare, с исходными кодами
IDE Delphi 3 ; У меня работал в Delphi 5.

TDataPrintеr

Компонент TDataPrintеr настраивается на TDataSource.
Несмотря на то, что в описании от автора обещается печать набора данных ("Well here is a component that will print a DBGrid with any data in it. " ), никакой связки с визуальными компонентами не предлагается. Собственно и в названии компонента видно, что печататься будут данные, а не Grid. Так оно все и получилось :о) Оформление печати:
  • Вывод стандартного диалога (PrintDialog - настройка и выбор принтера) регулируется свойством PrintDialog:Boolean;
  • Основные детали отчета: заголовки колонок(Header) и сами данные (Body);
  • В качестве дополнительных деталей отчета предлагается Title(String) и Script(TStringList);

    Общий формат отчета:

    Title
    Script1
    Script2
    ...
    ScriptN
    HeaderColumn1HeaderColumn2 ...
    Column1Record1Column1Record2 ...
    ......
    Column1RecordMColumn1RecordM ...
    Никакой сетки не подразумевается.
  • Для всех элементов отчета (Header, Body, Title и Script) в отдельности настраиваются шрифты;
  • По желанию может автоматически выводится в шапке время печати(TimeStamp) и номер страницы.
Сами значения Title и Script задаются в run-time, при печати данных:
DataPrinter.Print( Title , Scipts );

К недостаткам можно отнести следующее:
Хотя автор и обещает, что печататься будут "любые данные" ("...with any data in it"), при печати memo-полей длина текста ограничена свойством DisplayWidth соответствующего поля и одной строкой, что несколько неудобно. И вывести на печать изображение из поля, содержащего графику мне тоже не удалось.
С точки зрения оформления - отсутствует возможность печати сетки. Но может это и не есть недостаток.

В качестве резюме:

Компонент очень прост в использовании. Наличие исходных текстов дает возможность довольно легко добавить в отчет некоторые детали оформления.
Так что для простых по функциональности и внешнему виду "быстрых" отчетов этот компонент подходит очень хорошо.

Название LPTGrd / LPTBGrd v.1.0
URL Раздел VCL страница Print VCL -> Print Tools
http://www.torry.ru/printtools.htm
http://www.torry.ru/vcl/print/printtools/lptgrd.zip
Распространение Коммерческий; Trial (work while IDE is running)
IDE Delphi 1,2,3 ; У меня работал в Delphi 5
Довольно интересный компонент. Настраивается на TDBGrid.
  • Предлагается режим Preview(свойство Destination), правда без реализации функции zoom.
  • Можно изменять параметры сетки (настраивать толщину и наличие горизнтальных и/или вертикальных линеек сетки).
  • Можно отдельно настроить цвета фона для заголовков колоноки для details (самих данных отчета).
  • В качестве дополнительных деталей отчета можно использовать Header, PageFooterCenter, PageFooterLeft и PageFooterRight. Для каждого элемента отчета (включая заголовки колонок и их содержимое) можно отдельно настраивать шрифты.
  • Нормально печатается графика.
  • Можно начинать печать не с первой страницы.
  • По желанию - вызывать (или не вызывать) стандартный Print Dialog для выбора принтера и настройки параметров печати.
Поля типа memo печатаются в одной строке, но назвать это недостатком нельзя, так как автор обещал напечатать TDBGrid, он и печатается :о) Но вот что мне показалось не совсем корректным в этом компоненте:
Несколько экспериментов с разными данными для этого компонента показали, что хотя и обещается печать грида, но для вывода названий полей используется поле TField.DisplayLabel и для ширины колонки отчета поле TField.DisplayWidth.
Логичнее (и удобнее !) было бы использовать в качестве названия колонки именно Columns.Title.Caption, а для ширины колонки Columns.Width. Вот тогда печатался бы как раз тот обещанный TDBGrid, который можно перестроить в run-time и напечатать так, как он и выглядит.
И еще, при использовании деталей PageFooterCenter, PageFooterLeft и PageFooterRight надо быть осторожнее, так как никаких ограничений на их ширину нет и никакого взаимодействия (внутренних проверок) между ними тоже нет. То есть, задав значения этих полей очень длинными, можно получить некрасивую картину из наложенных друг на друга строк.

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

Название QRByDataSet and TQRByGrid v.1.00
URL Раздел VCL страница Report -> Report Tools
http://www.torry.ru/reportdesigners.htm
http://www.torry.ru/vcl/reports/reportdesigners/reportds.zip
Распространение Свободный, с исходными кодами
IDE Delphi 3,4,5 ;
Поначалу меня порадовали эти компоненты. Довольно просты в применении и работают аккуратно. Как видно из названия один настраивается на TDataSet, другой на TDBGrid.
Для их использования обязательно должен быть установлен QuickReport, для формирования отчета для печати используется именно он.
Так как QuickReport есть в стандартной поставке Delphi, то недостатком это считать нельзя. Зато можно легко пользоваться режимом Preview с возможностью выбора и настройки принтера, ну и так далее.
К недостаткам можно отнести следующее:
  • Внешний вид отчета "зашит" в самом коде компонентов и никаких вариантов настройки оформления не предлагается.
    Выбор цветовой гаммы и шрифтов заботливо взяли на себя разработчики :о)
    С точки зрения простоты настройки лучше бы было устроить некую систему умолчаний, но все же разрешить самому программисту решить, как именно должен выглядеть его, пусть и очень простенький, отчет.
  • Компоненты берут заголовки для стобцов отчета из полей DisplayLabel. Это естественно для печати TDataSet, но почему же и при печати TDGgid названия заголовков тоже берутся оттуда, а не их полей Columns.Title.Caption? Если уж обещать напечатать RDBGrid, то на бумаге он должен быть очень похож на то, что видно на экране.
  • Не печатаются (просто игнорируются) поля типа Blob , ни memo-текст, ни графика.
И тем не менее компоненты очень просты в использовании, практически не требуют никаких настроек и для "быстрого" и простого отчета вполне годятся.
Название Print Record v.1.0
URL Раздел VCL страница Print VCL -> Print Tools
http://www.torry.ru/printtools.htm
http://www.torry.ru/vcl/print/printtools/printrec.zip
Распространение Свободный, исходные коды
IDE Delphi 2,3 ; У меня работал в Delphi 5
Этот компонент функционально довольно сильно отличается от предыдущих, но мне он понравился и я решила включить его в это обозрение ( вдруг кому-то понадобится именно такой вариант печати из Grid'а).
Так вот, компонент TPrintRecord печатает только одну, текущую запись того набора данных, который Вы ему укажете. Настраивается на TDataSource
В качестве дополнительных деталей отчета предлагается многострочный Header(TStringList), для которого можно отдельно настроить шрифт. В заголовке можно добавить картинку (например логотип).

Общий формат отчета таков:

<картинка>Header
header
...
и так несколько строк
Название поля №1: Содержание поля...
......
Название поля №n: Содержание поля...

В качестве резюме:

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

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

Елена Филиппова

Основная страница | Свитки | Сокровищница | Подземелье Магов | Hello, World! | Арсенальная башня |



Содержание  Назад  Вперед