>(画面の(0,0)が,紙の印刷可能範囲の開始位置であれば分かりやすいかと...)
そのような仕様にすることは,絶対と言っていいほどありません !!
帳票類を作成する際,用紙の上端から,あるいは左端からというように作成できる
ようにしています.
そんなことしたら,プリンタドライバによって,印刷位置が狂ってしまいます.
TplPrev コンポは,プリンタドライバに関係なく,印刷の DPI (インチ当たりのドット数)
を意識しないで,0.1 mm 単位で印刷コードが書けるのが特徴なのですから.
印刷可能な領域の左上を原点 (0, 0) にしたいのであれば,
例えば,以下のようにできます.
//=============================================================================
// 用紙の印刷可能領域の左上を原点(0,0)とする方法
//
// 新規のプロジェクトに
// TButtonと拙作のTplPrevコンポを配置
//
// poLandscape等の定数名の使用にはusesにPrintersが必要
//
// 動作確認 Widnows 7 U64(SP1) + Delphi XE(UP1) Pro
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
LOffsetX : Integer;
LOffsetY : Integer;
LLeft : Integer;
LTop : Integer;
LWidth : Integer;
LHeight : Integer;
LRect : TRect;
begin
//用紙の設定をA4縦方向の印刷とする
plPrev1.plSetPrinter.PaperNumber := DMPAPER_A4;
plPrev1.plSetPrinter.Orientation := poPortrait;
//印刷用のコードを書く
plPrev1.BeginDoc;
try
//------------------------------------------------------------------------
// 描画原点移動のために追加した部分
//------------------------------------------------------------------------
//描画原点を描画可能の左上にするためのオフセット値
//プリンタには物理的な誤差があるので少し値を調整
//プリンタドライバによって調整する必要あり
//用紙トレイへの用紙のセット状態と描画する内容にもよる
LOffsetX := plPrev1.LeftOffset + 2;
LOffsetY := plPrev1.TopOffset + 2;
//これ以降は,用紙の描画可能領域の左上が(0, 0)となる
SetViewPortOrgEx(plPrev1.Canvas.Handle, LOffsetX, LOffsetY, nil);
//印刷の時も描画原点の移動が必要
//これがないと用紙の左上が原点として印刷される
plPrev1.PrintOffsetX := LOffsetX;
plPrev1.PrintOffsetY := LOffsetY;
//------- 描画原点移動のために追加した部分はここまで ------------------
LLeft := 0;
LTop := 0;
LWidth := 1000;
LHeight := 700;
LRect := Rect(LLeft, LTop, LLeft + LWidth, LTop + LHeight);
//上の座標設定値で四角形を描画
plPrev1.Canvas.Pen.Color := clBlue;
plPrev1.Canvas.Pen.Width := 70;
plPrev1.Canvas.Rectangle(LRect);
//線の描画は,線の太さの半分であることを確認するための描画
//少し右と下に移動して,半分の太さで四角形を描画
OffsetRect(LRect, 250, 250);
plPrev1.Canvas.Pen.Width := plPrev1.Canvas.Pen.Width div 2;
plPrev1.Canvas.Rectangle(LRect);
finally
plPrev1.EndDoc;
end;
//プレビュー表示開始
plPrev1.ShowModal;
end;
↓ 実行結果
|