Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Инструменты для печати TDBGrid

Оформил: DeeCo

В этом обзоре рассматриваются компоненты, позволяющие быстро (без применения специальных генераторов отчетов) распечатать содержимое 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
      HeaderColumn1 HeaderColumn2   ... Column1Record1 Column1Record2   ... ... ... Column1RecordM Column1RecordM   ...Никакой сетки не подразумевается.
  • Для всех элементов отчета (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 от  TLPTGrid
  • Предлагается режим 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 с возможностью выбора и настройки принтера, ну и так далее. Preview от TQRbyGrid

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

  • Компоненты берут заголовки для стобцов отчета из полей 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: Содержание поля...

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

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

 


К сожалению не нашлось такого компонента, применение которого бы полностью решило поставленную задачу, без переделки его исходного кода.
Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay