Create  Edit  Diff  Phillro Industries  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

Phi::Canvas

Phi::Canvas

super class

Object

class methods

new : Phi::Canvas

properties

brush : Phi::Brush

図形と背景を塗りつぶすのに使う brush

canvas_orientation : Fixnum

CO_LEFT_TO_RIGHT
CO_RIGHT_TO_LEFT

clip_rect : Phi::Rect

クリッピングする長方形の境界

copy_mode : Fixnum

graphic image をどのように copy するか

Phi::Canvas#copy_rect , Phi::Canvas#draw で使われる。

  1. copy_rect , #draw で使われる。

image を合成するとか,異なる copy_mode で複数の image を結合して bitmap の一部を透過させるといった効果を表現できる。

CM_BLACKNESS
キャンバス上のコピー先の四角形を黒色で塗りつぶす
CM_DST_INVERT
キャンバス上のイメージを反転して,ソースを無視する
CM_MERGE_COPY
AND 論理演算子を使ってキャンバス上のイメージとコピー元のビットマップを結合する
CM_MERGE_PAINT
反転したコピー元ビットマップとキャンバス上のイメージを OR 論理演算子を使って結合する
CM_NOT_SRC_COPY
反転したコピー元ビットマップをキャンバスにコピーする
CM_NOT_SRC_ERASE
OR 論理演算子を使ってキャンバス上のイメージとコピー元のビットマップを結合して,その結果を反転する
CM_PAT_COPY
コピー元の模様をキャンバスにコピーする
CM_PAT_INVERT
XOR 論理演算子を使ってコピー元の模様とキャンバス上のイメージを結合する
CM_PAT_PAINT
反転したコピー元ビットマップとその模様を OR 論理演算子を使って結合する。この演算結果とキャンバス上のイメージを OR 論理演算子を使って結合する
CM_SRC_AND
キャンバス上のイメージとコピー元のビットマップを AND 論理演算子を使って結合する
CM_SRC_COPY
コピー元のビットマップをキャンバスにコピーする
CM_SRC_ERASE
キャンバス上のイメージを反転し,その結果とコピー元ビットマップを AND 論理演算子を使って結合する
CM_SRC_INVERT
キャンバス上のイメージとコピー元のビットマップを XOR 論理演算子を使って結合する
CM_SRC_PAINT
キャンバス上のイメージとコピー元ビットマップのピクセルを OR 論理演算子を使って結合する
CM_WHITENESS
キャンバス上のコピー先の四角形を白色で塗りつぶす

font : Phi::Font

テキストを書くときに使う font

lock_count : Fixnum

ロックされた回数

pen : Phi::Pen

線と縁の描画に使う pen

pen_pos : Phi::Point

Phi::Canvas#pen の現在の描画位置

self[x, y] : Fixnum

Phi::Canvas#clip_rect の pixel

text_flags : Fixnum

テキストの書き方

Phi::Canvas#text_out または Phi::Canvas#text_rect を呼び出したときにテキストを描画する方法を指定できる。

以下の定数を組み合わせて作る。

ETO_CLIPPED
指定された長方形内に収まるテキストだけが表示される。このフラグは Phi::Canvas#text_rect の呼び出し時に自動的に追加される。 Phi::Canvas#text_out を使ってテキストを書いているときは,描画境界が Phi::Canvas#text_extent で指定されるため,このフラグは有効ではない
ETO_OPAQUE
テキストを不透明な背景色で描画する。このフラグを使うと,処理速度は改善されるが,テキスト長方形の背後のイメージを透かして見ることはできない
ETO_RTLREADING
テキスト文字列を右から左に表示する。これは, Windows の中東バージョンのみで使うことができる。 , 中東では,テキストを右から左に書く。これはたいてい, Phi::Canvas#canvas_orientation の CO_RIGHT_TO_LEFT と組み合わせて使う
ETO_GLYPH_INDEX
テキストは, Windows GDI によって直接解析される文字配置コードから構成される。グリフインデックス付けは TrueType? フォントのみに適用されるが,フラグをほかのフォントと使って GDI が言語処理なしでテキスト文字列を直接処理すべきであることを示せる。詳細については, Windows GDI のドキュメントを参照のこと
ETO_IGNORELANGUAGE
これは,ドキュメントで解説されていない Microsoft フラグ。情報が提供されたときに Microsoft のドキュメントの更新内容をチェックのこと
ETO_NUMERICSLOCAL
これは,ドキュメントで解説されていない Microsoft フラグ。情報を利用可能になったときに Microsoft のドキュメントの更新内容をチェックのこと
ETO_NUMERICSLATIN
これは,ドキュメントで解説されていない Microsoft フラグ。情報を利用可能になったときに Microsoft のドキュメントの更新内容をチェックのこと

methods

arc(x1, y1, x2, y2, x3, y3, x4, y4) : nil

arc(rect, x3, y3, x4, y4) : nil

指定した四角形と境を接する楕円の縁にそって弧を描画する。

弧は,座標 ( x1 , y1 ) および ( x2 , y2 ) と境界を接する楕円の一部である。

弧は,楕円の縁にそって始点から終点まで反時計回りに描画される。

始点は,楕円の中心点と座標 ( x3 , y3 ) によって指定される線と楕円との交点である。

終点は,楕円の中心点と座標 ( x4 , y4 ) によって指定される線と楕円との交点である。

Phi::Canvas#pen で描画される。

chord(x1, y1, x2, y2, x3, y3, x4, y4) : nil

chord(rect, x3, y3, x4, y4) : nil

線と楕円の交点で表現される弓形を描画する。

弓形は,座標 ( x1 , y1 ) および ( x2 , y2 ) と境界を接する楕円の一部で構成される。楕円は,座標 ( x3 , y3 ) および ( x4 , y4 ) を通る線により分割される。線と楕円との交点を (x3', y3') および (x4', y4') とすると,弓形は (x3', y3') から始まり,反時計回りに楕円にそって (x4', y4') を通り,まっすぐ (x3', y3') に戻る。

弓形の縁は Phi::Canvas#pen で描画され,内部は Phi::Canvas#brush で塗りつぶされる。

copy_rect(dest, canvas, source) : nil

self の image の一部を canvas に copy する。

rect
Phi::Rect: image が copy される self 上の領域
canvas
Phi::Canvas: copy 元 image が存在する canvas
source
Phi::Rect: canvas の領域

sourcePhi::Canvas#copy_mode の値を使って copy される。

draw(x, y, graphic) : nil

graphic を座標 ( x , y ) に描画する。

draw は Phi::Graphic#draw を呼び出す。

graphicPhi::Bitmap , Phi::Icon , Phi::Metafile のいずれかである。 graphicPhi::Bitmap オブジェクトの場合, Phi::Canvas#copy_mode の値を使って描画される。

draw_focus_rect(rect) : nil

focus を受け取ったことを示すのに使うスタイルで四角形を描画する。 control が focus を取得または喪失したときに呼び出す。

draw_focus_rect は XOR 関数を使うので,同じ四角形を指定して呼び出すと四角形は消える。

rect の領域をスクロールするには, draw_focus_rect を呼び出して四角形を消し,領域をスクロールしてから draw_focus_rect を呼び出して四角形を新しい位置に描画する。

Phi::DBGrid#on_draw_column_cell イベントでフォーカスがあるセルにフォーカスがあることを示すために draw_focus_rect を使用した例。

 def do_on_draw_column_cell(sender, rect, col, column, state)
   canvas = @grid.canvas
   if column.field.data_type == RDB::FT_GRAPHIC
     @bmp ||= Phi::Bitmap.new
     @bmp.assign( column.field )
     canvas.stretch_draw( rect, @bmp )
   else
     canvas.brush.color = color if selected?
     canvas.text_rect( rect, rect.left, rect.top, column.field.to_s )
   end
   if state.include? Phi::GD_FOCUSED
     canvas.draw_focus_rect(rect)  ## 点線で囲む
   end
 end

ellipse(x1, y1, x2, y2) : nil

ellipse(rect) : nil

alias draw_oval

外接長方形で定義される楕円をキャンバスに描画する。外接長方形が正方形の場合は,円が描画される。楕円のアウトラインは Phi::Canvas#pen の値を使って描画され,内部は Phi::Canvas#brush の値を使って塗りつぶされる。

fill_rect(rect) : nil

キャンバス上の指定した四角形を Phi::Canvas#brush で塗りつぶす。四角形の左と上の端は領域に含まれるが,右と下の端は含まれない。

rect
Phi::Rect:

flood_fill(x, y, color, fill_style) : nil

座標 ( x , y ) から color で指定する色境界まで Phi::Canvas#brush で塗りつぶす。

fill_style
color の領域を塗りつぶすか, color 以外の領域を塗りつぶすか
FS_SURFACE
color 以外の色に達するまで, color の色を持つすべての領域を塗りつぶす。
FS_BORDER
color の色に達するまで, color 以外の色を持つすべての領域を塗りつぶす。

Phi::Canvas#self[] を使うと, FS_SURFACE の fill_style を使うときに,座標 ( x , y ) の色の正確な値を取得できる。同様に, fill_style が FS_BORDER のときは,境界の座標が分かっている場合に, Phi::Canvas#self[] を使って境界色の正確な値を取得できる。

frame_rect(rect) : nil

長方形を描画する。

rect の周囲に 1 ピクセル幅の境界線を描画できる。 frame_rect は, rect の内部を Phi::Canvas#brush の模様で塗りつぶさない。

line_to(x, y) : nil

Phi::Canvas#pen_pos で指定される位置から,座標 ( x , y ) まで線を引き, Phi::Canvas#pen_pos を ( x , y ) に設定する。

move_to(x, y) : nil

Phi::Canvas#pen_pos を座標 ( x , y ) に変更する。

pie(x1, y1, x2, y2, x3, y3, x4, y4) : nil

pie(rect, x3, y3, x4, y4) : nil

キャンバス上の四角形 ( x1 , y1 ) と ( x2 , y2 ) に外接する楕円の扇形を描画する。

扇形は,座標 ( x1 , y1 ) と ( x2 , y2 ) で形成される長方形と外接する楕円によって定義される。描画される扇形の形は,楕円の中心から始まって座標 ( x3 , y3 ) と ( x4 , y4 ) を通過する 2 つの線で決まる。

輪郭は Phi::Canvas#pen で描画され,内部は Phi::Canvas#brush で塗りつぶされる。

poly_bezier(points) : nil

ベジェ曲線を描画する。

points で指定したエンドポイントおよびコントロールポイントを使って,立体ベジェ曲線を描画する。

最初の曲線は,最初の点と 4 番目の点を結んで描画され, 2 番目と 3 番目の点はコントロールポイントとして使われる。

シーケンスで後続する各曲線は,必ずさらに 3 個の点を必要とする。

先行する曲線の終点は,次の曲線の始点として,次の 2 個の点はコントロールポイントとして, 3 番目の点が終点として使われる。

現行のペンを使って線を描画する。

points
array of Point:

poly_bezier_to(points) : nil

ベジェ曲線を描画し, Phi::Canvas#pen_pos の値を更新する。

points で指定したエンドポイントおよびコントロールポイントを使って,立体ベジェ曲線を描画する。

最初の曲線は,最初の点と 4 番目の点を結んで描画され, 2 番目と 3 番目の点はコントロールポイントとして使われる。

シーケンスで後続する各曲線は,必ずさらに 3 個の点を必要とする。

先行する曲線の終点は次の曲線の始点として,次の 2 個の点はコントロールポイントとして, 3 番目の点が終点として使われる。

現行のペンを使って線を描画し, Phi::Canvas#pen_pos の値を最後のエンドポイントの値に更新する。

points
array of Point:

polygon(points) : nil

与えられた点を結んでキャンバス上に一連の線を描画してから,最後の点から最初の点へ線を描画して閉じた図形にする。

Phi::Canvas#pen の値を使ってキャンバス上に閉じた多角形を描画できる。図形が完成すると, Phi::Canvas#brush の値を使ってその図形を塗りつぶす。

キャンバスに多角形を塗りつぶさずに描画するには, Phi::Canvas#polyline を使って,最後に始点をもう一度指定する。

polyline(points) : nil

現在のペンを使って, points で渡された個々の点を結んでキャンバス上に連続線を描画する。

polyline を呼び出すと,キャンバス上の各点を結ぶことができる。点が 2 つしかない場合は 1 本だけ線を引くことになる。最初の点の値で Phi::Canvas#move_to を呼び出して,連続する各点で Phi::Canvas#line_to を繰り返し呼び出せば, polyline を使うのと同じである。 polyline は line_to とは違って Phi::Canvas#pen_pos の値は変更しない。

rectangle(x1, y1, x2, y2) : nil

rectangle(rect) : nil

alias draw_rect

rectangle を呼び出すと, Phi::Canvas#pen を使って長方形を描画して,その図形を Phi::Canvas#brush で塗りつぶすことができる。長方形の座標は 4 つの point かひとつの rect で指定できる。

現在のペンで境界を描画しないで長方形部分を塗りつぶすには Phi::Canvas#fill_rect を使う。長方形部分を塗りつぶさずに外枠を描画するには Phi::Canvas#frame_rect か Phi::Canvas#polygon を使う。角の丸い長方形を描画するには Phi::Canvas#round_rect を使う。

round_rect(x1, y1, x2, y2, x3, y3) : nil

角の丸い長方形をキャンバス上に描画する。

角の丸い長方形を Phi::Canvas#pen で描画して,その図形を Phi::Canvas#brush で塗りつぶすことができる。長方形の端は座標 ( x1 , y1 ), ( x2 , y1 ), ( x2 , y2 ), ( x1 , y2 ) で定義されるが,その角は丸く削られる。丸く削れらた角の曲率は,幅 x3 ,高さ y3 の楕円の曲率と一致する。

楕円を描画するには Phi::Canvas#ellipse を使う。正方形を描画するには Phi::Canvas#rectangle を使う。

stretch_draw(rect, graphic) : nil

rect で指定した四角形の中に収まるように graphic を描画する。

stretch_draw は Phi::Graphic#draw を呼び出す。

graphic は image の四角形への収め方を指定する。これにより, image の伸縮率や縦横比が変更される場合もある。

graphic を実際の size で描画するには, stretch_draw ではなく Phi::Canvas#draw を使う。

graphicPhi::Bitmap , Phi::Icon , Phi::Metafile のいずれかである。 graphic が Bitmap object の場合, bitmap は Phi::Canvas#copy_mode の値を使って描画される。

rect
Phi::Rect:
graphic
Phi::Graphic:

text_extent(text) : Size

Phi::Canvas#font で描画された文字列の幅と高さをピクセル数で返す。

text_width(text) : Fixnum

Phi::Canvas#font で描画された文字列の幅をピクセル単位で返す。 text_extent?#cx と同じ。

text
String:

text_height(text) : Fixnum

Phi::Canvas#font で描画された文字列の高さをピクセル単位で返す。 text_extent?#cy と同じ。

text
String:

text_rect(rect, x, y, text) : nil

四角形にクリッピングして文字列を書き込む。

四角形の外にはみ出してしまう文字列部分はクリッピングされ,画面上には表示されない。

rect
Phi::Rect: クリッピングする四角形
x, y
Fixnum: テキストの左上隅の位置
text
String: 書き込む文字列

text_out(x, y, text) : nil

キャンバス上に文字列を描画して, Phi::Canvas#pen_pos の値を文字列の最後の値に更新する。

lock { ... }

他の Delphi Thread がキャンバスに描画できないようにする。

Last modified:2004/12/02 16:15:13
Keyword(s):
References:[Phi-Classes] [Phi-Constants] [Phi::Bitmap] [Phi::Canvas] [Phi::Form] [Phi::Image] [Phi::Label] [Phi::ListBox] [Phi::Metafile] [Phi::Pen] [Phi::Picture] [Phi::PrevX] [RDB::DBGrid]