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

↓ 実行結果

[9838] Re:TplPrevで描画開始原点を移動返信 削除
2016/4/27 (水) 19:08:29 あだち
いいね!  ぽちっ×10(べき乗じゃ無いよ(笑))



[9839] Re2:TplPrevで描画開始原点を移動返信 削除
2016/4/27 (水) 19:41:01 Mr.XRAY
▼ あだちさん
> いいね!  ぽちっ×10(べき乗じゃ無いよ(笑))

えっ? べき乗じゃないの? べき乗だったら突っ込みいれようと思ったのに(笑)
かなりの票をいただいたので,近日中に作業に入りますか...

だたし,印刷可能な領域の左上を原点とするのは,公開するコンポだけです.
私が自分で使うのは,用紙の左上が原点のやつです (当然 !!)
既にご利用の方は,コードの修正が必要になりますからね.
では,お楽しみに.ホホホッ.


[9841] Re3:TplPrevで描画開始原点を移動返信 削除
2016/4/28 (木) 08:59:16 あだち
▼ Mr.XRAYさん
> ▼ あだちさん
> > いいね!  ぽちっ×10(べき乗じゃ無いよ(笑))
>
> えっ? べき乗じゃないの? べき乗だったら突っ込みいれようと思ったのに(笑)
> かなりの票をいただいたので,近日中に作業に入りますか...
>
> だたし,印刷可能な領域の左上を原点とするのは,公開するコンポだけです.
> 私が自分で使うのは,用紙の左上が原点のやつです (当然 !!)
> 既にご利用の方は,コードの修正が必要になりますからね.
> では,お楽しみに.ホホホッ.


あ、これ、"修正"について入れたのでなく

> そのような仕様にすることは,絶対と言っていいほどありません !!
> 帳票類を作成する際,用紙の上端から,あるいは左端からというように作成できる
> ようにしています.
> そんなことしたら,プリンタドライバによって,印刷位置が狂ってしまいます.


の意見に対してです。
紛らわしかったですね、すんませんm(__)m
最初の部分だけ読んで、共感して、ぽちっとしてしまいました。



[9842] Re4:TplPrevで描画開始原点を移動返信 削除
2016/4/28 (木) 12:45:41 Mr.XRAY
▼ あだちさん

> の意見に対してです。

そういう真面目な話は受け付けません ! (笑)


[9843] Re5:TplPrevで描画開始原点を移動返信 削除
2016/4/28 (木) 13:37:29 あだち
▼ Mr.XRAYさん
〜〜〜〜
> そういう真面目な話は受け付けません ! (笑)

えっ、そんな〜。

ここのサイト"居酒屋XRAY"に改名ならまじめな話しは辞めるけど(笑)


[9844] 居酒屋XRAY?返信 削除
2016/4/28 (木) 13:48:04 Mr.XRAY
▼ あだちさん

> ここのサイト"居酒屋XRAY"に改名ならまじめな話しは辞めるけど(笑)

あっ,これいいですね.
店の名前変えようかな.でも,リンクなんかも変えないと...
なんか,酔っ払いが増えそう ( <-- お前だろう !!)


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