[ 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 の中で記述する必要があります。
- 注意
-
この描画領域の座標系はピクセル単位となります。そのため,そのまま書き込むとプリンタの解像度の違いによって,印刷内容が異なってしまいます。そこで座標をミリからそれぞれのプリンタのピクセル単位に変換する必要があります。基本的なメソッドについては,自動で変換してくれるものを用意しているので,通常はそちらを使って下さい。用意されていないものを使用するには, xpos , ypos を使用し,このキャンバスに書き込んで下さい。
同様な理由で 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_mode が
PMM_HI
の場合 0.1mm 単位, PMM_LO
の場合 1.0mm 単位になります。
このメソッドは doc の中でないと正常に動作しません。
- ypos(y : Fixnum) : Fixnum
-
印字するY座標を論理単位 (mm) から,物理単位 (pixel) に変換します。 y の単位は, map_mode が
PMM_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
[ top ] [ prev ] [ up ] [ next ]