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







各イベント類のテスト


各イベントの使用例です.データベース関係の設定は,前ページのテストと同じです.他の設定もイベント内のコード以外は全て同じです.


図1
プレビュー開始画面

図2
最終ページをプレビュー

リスト1
テストプログラムのコード
unit EventsUnit;

interface

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

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    Query1: TQuery;
    BitBtn1: TBitBtn;
    DBGrid1: TDBGrid;
    plDBGridPrev1: TplDBGridPrev;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure plDBGridPrev1ReportStart(Sender: TObject; var YPos: Integer);
    procedure plDBGridPrev1Header(Sender: TObject; Page, YPos: Integer);
    procedure plDBGridPrev1Footer(Sender: TObject; Page, YPos: Integer);
    procedure plDBGridPrev1BeforePrintCell(Sender: TObject; Rect: TRect;
      ACol, ARow, PageRow: Integer; var Text: String);
    procedure plDBGridPrev1BeforeView(Sender: TObject; Page: Integer);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


//=============================================================================
//  フォームを表示する時の処理
//  クエリをオープン
//
//  Query1のSQL文は以下の通り
//  select CustNo,Company,Zip,Addr1,Phone from customer
//=============================================================================
procedure TForm1.FormShow(Sender: TObject);
begin
  Query1.Open;
end;

//=============================================================================
//  フォームを閉じる時の処理
//  クエリをクローズ
//=============================================================================
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Query1.Close;
end;

//=============================================================================
//  オブジェクト・インスペクタで設定した内容でプレビュー
//=============================================================================
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  plDBGridPrev1.Preview;
end;

//=============================================================================
//  plDBGridPrevのOnReportStartイベント
//  DBGridの描画開始Y座標値を最初の頁だけ変更
//  回章用の捺印欄作成 
//=============================================================================
procedure TForm1.plDBGridPrev1ReportStart(Sender: TObject; var YPos: Integer);
var
  LXl    : Integer;
  LXr    : Integer;
  LYt    : Integer;
  LYb    : Integer;
  LCellW : Integer;
  LPosX  : Integer;
  i      : Integer;
begin
  //最初の頁だけ描画開始Y座標を480とする
  YPos := 480;

  //回章用の捺印欄を作成
  plDBGridPrev1.LineWidth(1);
  plDBGridPrev1.LineColor(clBlack);

  LCellW := 150;
  LXl := plDBGridPrev1.LeftMargin;
  LXr := plDBGridPrev1.LeftMargin + LCellW * 4;
  LYt := 180;
  LYb := 220;

  plDBGridPrev1.RectLine(LXl, LXr, LYt, LYb + 150);
  plDBGridPrev1.Line(LXl, LXr, LYb, LYb);
  for i := 1 to 4 do begin
    LPosX := LXl + (i - 1) * LCellW;
    plDBGridPrev1.Line(LPosX, LPosX, LYt, LYb + 150);
  end;

  //捺印欄の文字列
  plDBGridPrev1.FontHeight(30);
  plDBGridPrev1.TextRectCC(LXl, LXl + LCellW, LYt, LYb, '部  長');
  plDBGridPrev1.TextRectCC(LXl + LCellW, LXl + LCellW * 2, LYt, LYb, '課  長');
  plDBGridPrev1.TextRectCC(LXl + LCellW * 2, LXl + LCellW * 3, LYt, LYb, '係  長');
  plDBGridPrev1.TextRectCC(LXl + LCellW * 3, LXl + LCellW * 4, LYt, LYb, '担当者');
end;

//=============================================================================
//  plDBGridPrevのOnHeaderイベント
//=============================================================================
procedure TForm1.plDBGridPrev1Header(Sender: TObject; Page, YPos: Integer);
var
  LPosX : Integer;
begin
  plDBGridPrev1.FontHeight(50);
  plDBGridPrev1.FontColor(clBlue);
  plDBGridPrev1.FontName('MS Pゴシック');
  LPosX := plDBGridPrev1.PaperWidth div 2;

  plDBGridPrev1.TextOutCB(LPosX, YPos, 'DBGrid 印刷コンポーネント');
end;

//=============================================================================
//  plDBGridPrev1のOnFooterイベント 
//  Footer部分に頁番号と印刷日時を印刷
//=============================================================================
procedure TForm1.plDBGridPrev1Footer(Sender: TObject; Page, YPos: Integer);
var
  LDateStr : string;
  LTimeStr : string;
begin
  plDBGridPrev1.FontHeight(20);

  //表の右端に日時を印刷
  LDateStr := '印刷日付 : ' + DateToStr(Date);
  LTimeStr := '印刷時刻 : ' + TimeToStr(Time);
  plDBGridPrev1.TextOutRT(plDBGridPrev1.LeftMargin + plDBGridPrev1.PrintWidth,
                          YPos + 10,
                          LDateStr);
  plDBGridPrev1.TextOutRT(plDBGridPrev1.LeftMargin + plDBGridPrev1.PrintWidth,
                          YPos + 35,
                          LTimeStr);
end;

//=============================================================================
//  plDBGridPrev1のOnBeforePrintCellイベント
//  1行おきに行のセルの色を変更
//=============================================================================
procedure TForm1.plDBGridPrev1BeforePrintCell(Sender: TObject;
   Rect: TRect; ACol, ARow, PageRow: Integer; var Text: String);
begin
  if (PageRow mod 2) = 0 then begin
    plDBGridPrev1.BrushColor($00CBFEE2);
    plDBGridPrev1.Canvas.FillRect(Rect);
  end;
end;

//=============================================================================
//  plDBGridPrev1のOnBeforeViewイベント
//  頁番号を印刷
//  頁番号のPageCountはこのイベントでないと取得できない
//=============================================================================
procedure TForm1.plDBGridPrev1BeforeView(Sender:TObject; Page:Integer);
var
  LPageStr : string;
begin
  //文字のサイズ
  plDBGridPrev1.FontSize(10);

  //頁番号の文字列を作成して印刷
  LPageStr := IntToStr(Page) + '/' + IntToStr(plDBGridPrev1.PageCount);
  plDBGridPrev1.TextOutCC(plDBGridPrev1.PaperWidth div 2,
                          plDBGridPrev1.PaperHeight - plDBGridPrev1.BottomMargin + 50,
                          LPageStr);
end;

end.