Delphi Programming / Object Pascal
[掲載 2001年01月06日] [更新 2016年04月30日] DBGrid 印刷コンポーネント |
DBGrid 印刷コンポーネント
テストプログラム Events |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE(UP1) Pro |
各イベントの使用例です.データベース関係の設定は,前ページのテストと同じです.他の設定もイベント内のコード以外は全て同じです. |
|
図1
プレビュー開始画面 |
|
図2
最終ページをプレビュー |
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.
|