名前 題名 ▼ 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; > > ↓ 実行結果 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link