喫茶XRAYトップページ

[スレッド全体
]

[9823] TplPrevで描画開始原点を移動返信 削除
2016/4/25 (月) 12:11:47 Mr.XRAY
>(画面の(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;

↓ 実行結果

[9831] Re:TplPrevで描画開始原点を移動返信 削除
2016/4/26 (火) 13:50:41 Mr.XRAY
> >(画面の(0,0)が,紙の印刷可能範囲の開始位置であれば分かりやすいかと...)
>
> そのような仕様にすることは,絶対と言っていいほどありません !!


考えてみれば,この態度はよくないですね.
コンポーネントも,サンプルプログラムも,皆さんの意見,要望等を考えて
改良や修正をしてきました.

『TplPrev では,印刷可能な領域の左上が描画の原点 (0, 0) となります.
用紙の左上からの位置は,プリンタ,あるいはプリンタドライバによって違います.
各自で調整してください』

とすべきなんでしょうね.きっと...
少し考えさせてください.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82