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







プレビュー画面で開始ラベルを指定


プレビュー画面で印刷開始ラベルを指定する方式です.継承プレビューフォーム上にパネルを配置して,そこに本コンポーネントや各種コントロールを配置しています.
Delphi に付属の DBDEMOS を使用しています.郵便番号の前に「〒」のマークを,また宛名の後ろに「御中」の文字を追加しています.印刷関係クエリーは,以下の様に設定しています.


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


図1
メインフォーム
図2
継承プレビューフォーム
図3
印刷項目の設定
図4
実行結果
図5
ラベル

リスト2
メインフォームユニットのコード
unit MainFormUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TMainForm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  MainForm: TMainForm;

implementation

uses
  EnterPrevFormUnit;

{$R *.DFM}

//=============================================================================
//  ボタンをクリックしたらプレビューフォームを生成して表示
//  あらかじめEnterPrevFormというフォームを作成しておき,自動生成から外しておく
//=============================================================================
procedure TMainForm.Button1Click(Sender: TObject);
begin
  //選択可能なフォームにしてあるので生成する
  EnterPrevForm := TEnterPrevForm.Create(Self);
  try
    EnterPrevForm.ShowModal;
  finally
    EnterPrevForm.Release;
    EnterPrevForm := nil;
  end;
end;

end.


リスト3
継承プレビューフォームユニットのコード
unit EnterPrevFormUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ExtCtrls, ComCtrls, Buttons, ToolWin, StdCtrls, Db, DBTables, Spin, 
  plPrev, plTackPrev, PLPREVFRM;

type
  TEnterPrevForm = class(TplPrevForm)
    Panel1: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Query1: TQuery;
    Query1CustNo: TFloatField;
    Query1Company: TStringField;
    Query1Zip: TStringField;
    Query1Addr1: TStringField;
    Query1Phone: TStringField;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    plTackPrev1: TplTackPrev;
    procedure SpinEdit1Change(Sender: TObject);
    procedure SpinEdit2Change(Sender: TObject);
    procedure plTackPrev1FormShow(Sender: TObject);
    procedure plTackPrev1BeforePageDraw(Sneder: TObject; DataNo,
      Page: Integer);
    procedure FormCreate(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  EnterPrevForm: TEnterPrevForm;

implementation

{$R *.DFM}

//=============================================================================
//  このテストプログラムでは,plTackPrevのDataSetプロパティに,あらかじめ
//  Query1を設定しているが,プレビューフォームのCreate時に指定してもよい
//=============================================================================
procedure TEnterPrevForm.FormCreate(Sender: TObject);
begin
  //TplTackPrevのイベントではないのでinheritedが必要
  //このInheritedは継承元プレビューフォームのOnCreate
  inherited;
end;

//=============================================================================
//  TplTackPrevのOnFormShowイベント
//  フォーム表示開始で入力用Editの最大値等を設定
//  印刷開始ラベルの行列を指定して実行
//
//  イベント作成時に挿入されるinheritedは不要なので削除してある
//  このplTackPrev1FormShowはTplTackPrevのイベントなのでinheritedは不要
//============================================================================
procedure TEnterPrevForm.plTackPrev1FormShow(Sender: TObject);
begin
  //印刷開始ラベル行の最小値と最大値を制限し初期値を設定
  SpinEdit1.MinValue := 1;
  SpinEdit1.MaxValue := plTackPrev1.LabelRowCnt;
  SpinEdit1.Value    := 1;

  //印刷開始ラベル列の最小値と最大値を制限し初期値を設定
  SpinEdit2.MinValue := 1;
  SpinEdit2.MaxValue := plTackPrev1.LabelColCnt;
  SpinEdit2.Value    := 1;

  //印刷開始ラベルの行列を指定
  plTackPrev1.StartRow := SpinEdit1.Value;
  plTackPrev1.StartCol := SpinEdit2.Value;
  plTackPrev1.Title    := 'ヒサゴ GB1985の例';

  //このFormを表示するのてPreviewメソッドは不要
end;

//=============================================================================
//  TplTackPrevのOnBeforePageDrawイベント
//  各頁表示前のイベント
//  ラベルのサイズとラベルの総数をステータスバーに表示
//=============================================================================
procedure TEnterPrevForm.plTackPrev1BeforePageDraw(Sneder: TObject;
  DataNo,Page: Integer);
var
  LHorzSizeStr : string;
  LVertSizeStr : string;
  LText        : string;
begin
  LHorzSizeStr := '  横 ' + Format('%5.1f', [plTackPrev1.LabelWidth  / 10]) + ' mm';
  LVertSizeStr := '  縦 ' + Format('%5.1f', [plTackPrev1.LabelHeight / 10]) + ' mm';
  LText        := '   ラベル枚数 ' + IntToStr(plTackPrev1.LabelCount) + ' 枚';

  plTackPrev1.StatusBarText := '  ラベルサイズ' + LHorzSizeStr + LVertSizeStr + LText;
end;

//=============================================================================
//  印刷開始ラベル行を設定するSpinEditの値が変更となったら再表示
//=============================================================================
procedure TEnterPrevForm.SpinEdit1Change(Sender: TObject);
begin
  plTackPrev1.StartRow := SpinEdit1.Value;
  //現在の頁を表示
  plTackPrev1.Display(plTackPrev1.PageNumber);
end;

//=============================================================================
//  印刷開始ラベル列を設定するSpinEditの値が変更となったら再表示
//=============================================================================
procedure TEnterPrevForm.SpinEdit2Change(Sender: TObject);
begin
  plTackPrev1.StartCol := SpinEdit2.Value;
  //現在の頁を表示
  plTackPrev1.Display(plTackPrev1.PageNumber);
end;

end.