Delphi Programming / Object Pascal
[掲載 2001年02月23日] [更新 2016年04月29日] タックシール印刷コンポーネント |
タックシール印刷コンポーネント
テストプログラム EnterPrev |
動作確認等 |
Windows 7 U64(SP1) + Delphi XE(UP1) Pro |
プレビュー画面で印刷開始ラベルを指定する方式です.継承プレビューフォーム上にパネルを配置して,そこに本コンポーネントや各種コントロールを配置しています.
Delphi に付属の DBDEMOS を使用しています.郵便番号の前に「〒」のマークを,また宛名の後ろに「御中」の文字を追加しています.印刷関係クエリーは,以下の様に設定しています. |
select CustNo,Company,Zip,Addr1,Phone from customer
|
図1
メインフォーム |
|
図2
継承プレビューフォーム |
|
図3
印刷項目の設定 |
|
図4
実行結果 |
|
図5
ラベル |
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.
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.
|