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 で使われる。
- 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 の領域
source は Phi::Canvas#copy_mode の値を使って copy される。
draw(x, y, graphic) : nil
graphic を座標 ( x , y ) に描画する。
draw は Phi::Graphic#draw を呼び出す。
graphic は Phi::Bitmap , Phi::Icon , Phi::Metafile のいずれかである。 graphic が Phi::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 を使う。
graphic は Phi::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 がキャンバスに描画できないようにする。
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]