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







はがきの宛名印刷


はがきの宛名書きの例です.Delphi に付属の DBDEMOS を使用しています.
「用紙のタイプ」は stNoCut にして単票形式としています.切手の画像は埋め込み形式ですが,PrintOut プロパティを False にしているので印刷はしません.


リスト1 
Query1 の SQL プロパティ
select CustNo,Company,Zip,Addr1,Phone from customer


図1
メインフォームの設計時画面
図2
印刷項目
  • [切手の画像] は EXE 埋め込み形式で印刷はしない
図3
実行画面

リスト2
テストプログラムのコード
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