喫茶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;

↓ 実行結果

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


今,コンピュータの電源入れて,ここを読み...
そうか,もしかしたら,プリンタで印刷する時に,印刷できない領域,
これは,一般にオフセット値といいますが,その部分の大きさが,
プリンタによって違う,ということを知らないのかも知れません.

だとしたら,ちょっと悪いことしてしまいました.
まず,
「オフセットの値は,プリンタによって違うことがあるんですよ」
とレスすべきでしたね.
それと,メールの文章には,オフセットという用語を使用していませんから,
オフセットの説明もすべきでした.

もちろん,オンラインヘルプには書いてありますが,そのような方は,
読むわけないですからね.

いや,待てよ,こちらのアドバイスは無視するんだから,やっぱり意味ないか ?


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