[ top ] [ prev ] [ up ] [ next ]

Phi::PrevX

エックス (KYY06770@nifty.ne.jp)さんの Delphi 用のフリーコンポーネント PrevX の Apollo 移植版です。

元のソースは
nifty:FDELPHI/LIB/08/909
データ名:PrevX112.lzh 印刷プレビュー Ver 1.12

にあります。

注意
クラス名は PrevX ですが,ライブラリ名は prev です。
使うときは require 'prev' とします。
Phi::PrevX は, Delphi 5 用の印刷プレビュー コンポーネントです。

Phi::PrevX には以下の特徴があります。

印刷内容をプレビューすることができます。印刷内容とプレビュー内容は,ほぼ一致します。

プレビュー内容を拡大・縮小することができます。

内部にメタファイルを使用して効率的にプレビューイメージを記憶します。再描画が必要なときは自動で行われます。

QuickReport ほど複雑ではないので簡単に使用できます。

properties

canvas : Phi::Canvas
プレビュー内容を書き込むための描画領域です。

このキャンバスに書き込むためには, doc の中で記述する必要があります。

注意
この描画領域の座標系はピクセル単位となります。そのため,そのまま書き込むとプリンタの解像度の違いによって,印刷内容が異なってしまいます。そこで座標をミリからそれぞれのプリンタのピクセル単位に変換する必要があります。基本的なメソッドについては,自動で変換してくれるものを用意しているので,通常はそちらを使って下さい。用意されていないものを使用するには, xposypos を使用し,このキャンバスに書き込んで下さい。

同様な理由で canvas.pen を設定する場合は, pen_width を使用して設定してください。ただし,この場合は点線が使用できなくなる可能性があるので,その場合はそのまま 1 を代入して下さい。 (Windows95/98 では pen.width が 1 以外の場合,点線にできません。 )

zoom_scale : Fixnum
ズーム率を設定します。 100 でおおむね実寸に近くなります。最小 25 最大 200 です。

count : Fixnum
ページ数を取得します。

index : Fixnum
プレビューするページ番号を指定します。

range : Range = 1..9999
印刷するページ範囲を指定します。

title : String
印刷処理のタイトルを指定します。

height : Fixnum
page_height : Fixnum
印刷用紙の高さを取得します。 取得した値の単位は map_mode の値によって変わります。デフォルトでは 0.1mm 単位です。
読み込み専用です。 set_printer_mode で指定された用紙サイズ/用紙方向によって値が決まります。

width : Fixnum
page_width : Fixnum
印刷用紙の幅を取得します。 取得した値の単位は map_mode の値によって変わります。デフォルトでは 0.1mm 単位です。
読み込み専用です。 set_printer_mode で指定された用紙サイズ/用紙方向によって値が決まります。

margin_left : Fixnum
印刷の左マージンです。

注意
このプロパティの値は, xpos の中で加えられるだけで,実際にプリンタの設定を変更するわけではありません。

margin_top : Fixnum
印刷の上マージンです。

注意
このプロパティの値は, ypos の中で加えられるだけで,実際にプリンタの設定を変更するわけではありません。

map_mode : Fixnum (PrevMapModes) = PMM_HI
座標系の変換形式を設定します。

PMM_HI
0.1mm 単位
PMM_LO
1.0mm 単位

visible : Boolean
true ならコンポーネントを表示します。 false なら表示しません。

methods

doc { }
プレビューの前処理と後処理を行います。キャンバスに書き込む操作はこのブロックの中で行う必要があります。

new_page : nil
新しいページを作成します。 このメソッドを呼び出すと page_count の値を一つ増やし, canvas の設定をすべて初期化します。

print : nil
プレビュー内容を印刷することができます。 range のページ範囲を印刷します。

save(file_name : string) : nil
プレビュー内容をファイルに保存します。メタファイル形式で保存します。

xpos(x : Fixnum) : Fixnum
印字するX座標を論理単位 (mm) から,物理単位 (pixel) に変換します。 x の単位は, map_modePMM_HI の場合 0.1mm 単位, PMM_LO の場合 1.0mm 単位になります。

このメソッドは doc の中でないと正常に動作しません。

ypos(y : Fixnum) : Fixnum
印字するY座標を論理単位 (mm) から,物理単位 (pixel) に変換します。 y の単位は, map_modePMM_HI の場合 0.1mm 単位, PMM_LO の場合 1.0mm 単位になります。

このメソッドは doc の中でないと正常に動作しません。

pen_width(size : Fixnum) : Fixnum
印字するペンの幅をプリンタのピクセル単位で返します。

引数で渡す size は,線に微妙な幅を持たせるため, 10 倍の値を指定するようにしています。おおむね画面上の 0.1 ピクセル単位となります。

このメソッドは doc の中でないと正常に動作しません。

text_out(x, y : Fixnum; str : String)
文字列を出力します。

基本的には, Canvas のものと同じですが,座標の単位がすべて論理単位となります。

内部は,以下のようになっているだけです。
  procedure TPrevX.TextOut(const x, y: Integer; const str: string);
  begin
    Canvas.TextOut(XPos(x), YPos(y), str);
  end;
テキストのフォントには FixedSys のような固定フォントは使用しないで下さい。このようなフォントは大きさが固定なので,プレビュー時に拡大縮小しても大きさが変わりません。

move_to(x, y : Fixnum)
描画位置を移動します。

基本的には, Phi::Canvas のものと同じですが,座標の単位がすべて論理単位となります。

内部は,以下のようになっているだけです。
  procedure TPrevX.MoveTo(const x, y: Integer);
  begin
    Canvas.MoveTo(XPos(x), YPos(y));
  end;
line_to(x, y : Fixnum)
線を引きます。

基本的には, Phi::Canvas のものと同じですが,座標の単位がすべて論理単位となります。

内部は,以下のようになっているだけです。
  procedure TPrevX.LineTo(const x, y: Integer);
  begin
    Canvas.LineTo(XPos(x), YPos(y));
  end;
rectangle(x1, y1, x2, y2 : Fixnum)
長方形を描きます。

基本的には, Phi::Canvas のものと同じですが,座標の単位がすべて論理単位となります。

内部は,以下のようになっているだけです。
  procedure TPrevX.Rectangle(const x1, y1, x2, y2: Integer);
  begin
    Canvas.Rectangle(XPos(x1), YPos(y1), XPos(x2), YPos(y2));
  end;
round_rect(x1, y1, x2, y2, x3, y3 : Fixnum)
角の丸い長方形を描きます。

基本的には, Phi::Canvas のものと同じですが,座標の単位がすべて論理単位となります。

内部は,以下のようになっているだけです。
  procedure TPrevX.RoundRect(const x1, y1, x2, y2, x3, y3: Integer);
  begin
    Canvas.RoundRect(XPos(x1), YPos(y1), XPos(x2), YPos(y2), XPos(x3), YPos(y3));
  end;
ellipse(x1, y1, x2, y2, x3, y3 : Fixnum)
円・楕円を描きます。

基本的には, Phi::Canvas のものと同じですが,座標の単位がすべて論理単位となります。

内部は,以下のようになっているだけです。
  procedure TPrevX.Ellipse(const x1, y1, x2, y2: Integer);
  begin
    Canvas.Ellipse(XPos(x1), YPos(y1), XPos(x2), YPos(y2));
  end;
set_printer_mode(paper_size, orientation : Fixnum)
プリンタの設定を行います。

paper_size には用紙サイズを指定します。 これらの値は Win:module に定義されています。

DMPAPER_A3
A3
DMPAPER_A4
A4
DMPAPER_A5
A5

orientation には用紙の方向を指定します。 これらの値は Win:module に定義されています。

DMORIENT_PORTRAIT

DMORIENT_LANDSCAPE

event handlers

on_resize : nil
サイズが変更された場合に呼ばれます。

操作方法

プレビューしてみる

preview.rb

印刷してみる

print.rb
author: YOSHIDA Kazuhiro
[ top ] [ prev ] [ up ] [ next ]