Delphi Programming / Object Pascal
[掲載 2002年01月01日] [更新 2016年04月29日] タックシール印刷コンポーネント |
タックシール印刷コンポーネント
テストプログラム Hagaki |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE(UP1) Pro |
はがきの宛名書きの例です.Delphi に付属の DBDEMOS を使用しています.
「用紙のタイプ」は stNoCut にして単票形式としています.切手の画像は埋め込み形式ですが,PrintOut プロパティを False にしているので印刷はしません. |
select CustNo,Company,Zip,Addr1,Phone from customer
|
図1
メインフォームの設計時画面 |
|
図2
印刷項目
- [切手の画像] は EXE 埋め込み形式で印刷はしない
|
|
図3
実行画面 |
unit HagakiUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, plPrev, plTackPrev, DB, DBTables, ExtCtrls, StdCtrls, Buttons;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
Query1: TQuery;
Query1CustNo: TFloatField;
Query1Company: TStringField;
Query1Zip: TStringField;
Query1Addr1: TStringField;
Query1Phone: TStringField;
Panel1: TPanel;
plTackPrev1: TplTackPrev;
procedure BitBtn1Click(Sender: TObject);
procedure plTackPrev1NoPrintDraw(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.BitBtn1Click(Sender: TObject);
begin
//単票形式とする
plTackPrev1.SealType := stNoCut;
//この用紙名はテストに使用したプリンタドライバ独自の名前
plTackPrev1.plSetPrinter.PaperName := 'ハガキ 100 x 148 mm';
plTackPrev1.Preview;
end;
//=============================================================================
// plTackPrev1のOnNoPrintDrawイベント処理
// このイベントに書いたコードはプレビューはするが印刷はしない
// 印刷可能な領域の外側にも描画可能
//=============================================================================
procedure TForm1.plTackPrev1NoPrintDraw(Sender: TObject; Page: Integer);
begin
//印刷可能領域の四角形を描画
plTackPrev1.Canvas.Pen.Width := 1;
plTackPrev1.Canvas.Pen.Color := clSilver;
plTackPrev1.Canvas.Pen.Style := psSolid;
plTackPrev1.Canvas.Rectangle(Rect(plTackPrev1.LeftOffset,
plTackPrev1.TopOffset ,
plTackPrev1.RightOffset,
plTackPrev1.BottomOffset));
end;
end.
DEVMODE 構造体の dmPaperSize メンバに以下の用紙サイズ番号の値があります.
これらはプリントサーバに登録されていますが,プリントサーバに登録されている用紙が全てのプリンタドライバで利用できるわけではありません.
プリントサーバに同じサイズの用紙が登録されていても,プリンタドライバによっては,独自の用紙サイズ番号と用紙名で登録しているものがあります.
以下の用紙サイズ等が使用できない場合は,該当するプリンタドライバで使用可能な用紙のリストから選択することになります.あるいは実行時にユーザ定義用紙として登録すれば使用できますが,プリンタドライバによっては,プリントサーバの用紙の削除ができない場合があります.
|
//日本のハガキサイズの用紙番号
DMPAPER_JAPANESE_POSTCARD
DMPAPER_JENV_CHOU4_ROTATED
//日本の長形4号封筒サイズの用紙番号
DMPAPER_JENV_CHOU4
DMPAPER_JENV_CHOU4_ROTATED
|