Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2001年02月04日] [更新 2016年04月30日] Query 印刷コンポーネント
   
Query 印刷コンポーネント
テストプログラム DBDemos
動作確認等 Windows 7 U64(SP1) + Delphi XE(UP1) Pro







動作確認テスト


この後のテストプログラムでも使用している元のデータを印刷する例です.
全体で 20 頁以上ありますので,他のテストプログラムでは数頁分となるようにデータを選択しています.Delphi 付属の DBDEMOS を利用しています.
ここでは,TQuery しか使用していませが,データベース関連コントロール (コンポーネント) の設定は,通常の使用における設定と特に変りありません.本コンポーネントの Columns プロパティで印刷項目を設定し,印刷とプレビュー関係の設定をします.
  • 下図のようにコンポーネント類を配置
  • Query1 の DatabaseName プロパティを DBDEMOS に
  • Query1 の SQL プロパティを以下のようにする
  • 本コンポーネントの DataSet プロパティを Query1 とする
  • 本コンポーネントをダブルクリックして Columns プロパティの印刷項目を設定する

リスト1 
Query1 の SQL プロパティ
SELECT T2.CustNo,
       T4.Company,
       T3.Description, 
       T1.OrderNo, 
       T3.ListPrice, 
       T3.Cost,
       T1.Qty,
       T1.Qty*T3.Cost as Sales 
FROM   "Items.db" T1,
       "Orders.db" T2, 
       "Parts.db" T3, 
       "Customer.db" T4
WHERE  (T2.OrderNo = T1.OrderNo) AND 
       (T3.PartNo = T1.PartNo) AND 
       (T4.CustNo = T2.CustNo)
ORDER BY T2.CustNo, T3.Description


図1
設計時画面
図2
印刷項目
図3
プレビュー結果
  • Custom, Company の ContValuesPrint を False にして,同じ値の時は印刷しないようにしている

リスト2
テストプログラムのコード
各カラム幅や行高さはオブジェクトインスペクタで設定したのでこれだけ
unit DBDemosUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, plPrev, plQueryPrev, DB, DBTables;

type
  TForm1 = class(TForm)
    Query1: TQuery;
    plQueryPrev1: TplQueryPrev;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

uses
  Printers;

{$R *.DFM}

//=============================================================================
//  結果をプレビュー
//  オブジェクト・インスペクタで設定した内容でプレビュー
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  //設定ダイアログを表示して設定する場合
  plQueryPrev1.plSetPrinter.ShowSetupDialog;

  //ダイアログを表示しないで設定する場合
  //Orientationの使用には,usesにPrintersが必要
  //plQueryPrev1.plSetPrinter.Orientation := poLandscape;

  //印刷プレビュー開始
  plQueryPrev1.Preview;
end;

end.