いろいろな図形



HSPの描画命令だけでは出来ないようなユニークな形の図形をAPIのGDIを使って描く事が出来ます。

弓形

弓形を表示する関数はChord関数です。

Chord
デバイスコンテキストハンドル,
楕円に外接する長方形の左上隅の X 座標,
楕円に外接する長方形の左上隅の Y 座標,
楕円に外接する長方形の右下隅の X 座標,
楕円に外接する長方形の右下隅の Y 座標,
楕円弧の始点の X 座標,
楕円弧の始点の Y 座標,
楕円弧の終点の X 座標,
楕円弧の終点の Y 座標

複数行に渡って書きましたが、以上が詳細です。
弓形とはつまり、円の弧とその両端を線で結んだものです。

;弓形の描画
#include "llmod.as"

#module

#deffunc chord int,int,int,int,int,int,int,int
	mref l,0	;楕円に外接する長方形の左上隅の X 座標
	mref t,1	;楕円に外接する長方形の左上隅の Y 座標
	mref r,2	;楕円に外接する長方形の右下隅の X 座標
	mref b,3	;楕円に外接する長方形の右下隅の Y 座標
	mref sx,4	;楕円弧の始点の X 座標
	mref sy,5	;楕円弧の始点の Y 座標
	mref ex,6	;楕円弧の終点の X 座標
	mref ey,7	;楕円弧の終点の Y 座標
	mref bmscr,67

	prm=bmscr.4,bmscr.36
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにブラシを設定
	holgbrush=dllret@

	prm=bmscr.4,bmscr.37
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにペンを設定
	holgpen=dllret@

	prm=bmscr.4,l,t,r,b,sx,sy,ex,ey
	dllproc "Chord",prm,9,D_GDI	;弓形の描画

	prm=bmscr.4,holgbrush
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のブラシを戻す

	prm=bmscr.4,holgpen
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のペンを戻す
return

#global

	color 255
	chord 0,0,200,200,0,0,200,200
	redraw	;再描画しないと表示されない
	stop

以上のスクリプトを実行すると、円形を斜めに切った図形が表示されます。

ペンを設定しないと枠が、ブラシを設定しないと内部が白色で描画されます。これはこれ以降の全ての図形描画関数に共通です。

楕円形

楕円形を表示する関数はEllipse関数です。

Ellipse
デバイスコンテキストハンドル,
楕円に外接する長方形の左上隅の X 座標,
楕円に外接する長方形の左上隅の Y 座標,
楕円に外接する長方形の右下隅の X 座標,
楕円に外接する長方形の右下隅の Y 座標

楕円形となっていますが、正確な円を描く事も出来ます。

;楕円形の描画
#include "llmod.as"

#module

#deffunc ellipse int,int,int,int
	mref l,0	;楕円に外接する長方形の左上隅の X 座標
	mref t,1	;楕円に外接する長方形の左上隅の Y 座標
	mref r,2	;楕円に外接する長方形の右下隅の X 座標
	mref b,3	;楕円に外接する長方形の右下隅の Y 座標
	mref bmscr,67

	prm=bmscr.4,bmscr.36
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにブラシを設定
	holgbrush=dllret@

	prm=bmscr.4,bmscr.37
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにペンを設定
	holgpen=dllret@

	prm=bmscr.4,l,t,r,b
	dllproc "Ellipse",prm,5,D_GDI	;楕円形の描画

	prm=bmscr.4,holgbrush
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のブラシを戻す

	prm=bmscr.4,holgpen
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のペンを戻す
return

#global

	color 255
	ellipse 0,0,200,100
	redraw	;再描画しないと表示されない
	stop

指定した領域に外接する円が描画されます。

扇形

扇形を表示する関数はPie関数です。

Pie
デバイスコンテキストハンドル,
楕円に外接する長方形の左上隅の X 座標,
楕円に外接する長方形の左上隅の Y 座標,
楕円に外接する長方形の右下隅の X 座標,
楕円に外接する長方形の右下隅の Y 座標,
楕円弧の始点の X 座標,
楕円弧の始点の Y 座標,
楕円弧の終点の X 座標,
楕円弧の終点の Y 座標

Chord関数と全く引数が同じです。

;扇形の描画
#include "llmod.as"

#module

#deffunc pie int,int,int,int,int,int,int,int
	mref l,0	;楕円に外接する長方形の左上隅の X 座標
	mref t,1	;楕円に外接する長方形の左上隅の Y 座標
	mref r,2	;楕円に外接する長方形の右下隅の X 座標
	mref b,3	;楕円に外接する長方形の右下隅の Y 座標
	mref sx,4	;楕円弧の始点の X 座標
	mref sy,5	;楕円弧の始点の Y 座標
	mref ex,6	;楕円弧の終点の X 座標
	mref ey,7	;楕円弧の終点の Y 座標
	mref bmscr,67

	prm=bmscr.4,bmscr.36
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにブラシを設定
	holgbrush=dllret@

	prm=bmscr.4,bmscr.37
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにペンを設定
	holgpen=dllret@

	prm=bmscr.4,l,t,r,b,sx,sy,ex,ey
	dllproc "Pie",prm,9,D_GDI	;扇形の描画

	prm=bmscr.4,holgbrush
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のブラシを戻す

	prm=bmscr.4,holgpen
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のペンを戻す
return

#global

	color 255
	pie 0,0,200,200,0,0,200,100
	redraw	;再描画しないと表示されない
	stop

扇形は、円の弧と、弧の両端から円の中心への線を引いたものです。

角の丸い四角形

角の丸い四角形を表示する関数はRoundRect関数です。

RoundRect
デバイスコンテキストハンドル,
長方形の左上隅の X 座標,
長方形の左上隅の Y 座標,
長方形の右下隅の X 座標,
長方形の右下隅の Y 座標,
角の丸みの幅,
角の丸みの高さ

;角の丸い四角形の描画
#include "llmod.as"

#module

#deffunc roundrect int,int,int,int,int,int
	mref l,0	;長方形の左上隅の X 座標
	mref t,1	;長方形の左上隅の Y 座標
	mref r,2	;長方形の右下隅の X 座標
	mref b,3	;長方形の右下隅の Y 座標
	mref sx,4	;角の丸みの幅
	mref sy,5	;角の丸みの高さ
	mref bmscr,67

	prm=bmscr.4,bmscr.36
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにブラシを設定
	holgbrush=dllret@

	prm=bmscr.4,bmscr.37
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにペンを設定
	holgpen=dllret@

	prm=bmscr.4,l,t,r,b,sx,sy
	dllproc "RoundRect",prm,7,D_GDI	;角の丸い四角形の描画

	prm=bmscr.4,holgbrush
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のブラシを戻す

	prm=bmscr.4,holgpen
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のペンを戻す
return

#global

	color 255
	roundrect 0,0,200,200,100,100
	redraw	;再描画しないと表示されない
	stop

角の丸みを長方形領域と同じ大きさにすると円形になります。

多角形

多角形を表示する関数はPolygon関数です。

Polygon
デバイスコンテキストハンドル,
頂点座標が格納されているPOINTAPI構造体配列ポインタ,
頂点の個数

POINTAPI構造体
.0 x座標
.1 y座標

POINTAPI構造体はxとyだけなので配列で指定する場合も、

pointapi=x,y,x,y,x,y,x,y

という感じで指定できます。

;多角形の描画
#include "llmod.as"

#module

#deffunc polygon val,int
	mref p,48	;頂点座標配列
	mref n,1	;頂点の数
	mref bmscr,67

	prm=bmscr.4,bmscr.36
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにブラシを設定
	holgbrush=dllret@

	prm=bmscr.4,bmscr.37
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストにペンを設定
	holgpen=dllret@

	getptr pp,p
	prm=bmscr.4,pp,n
	dllproc "Polygon",prm,3,D_GDI	;多角形の描画

	prm=bmscr.4,holgbrush
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のブラシを戻す

	prm=bmscr.4,holgpen
	dllproc "SelectObject",prm,2,D_GDI	;デバイスコンテキストに元のペンを戻す
return

#global

	color 255
	p=0,0,50,100,0,200,100,150,200,200,150,100,200,0,100,50
	polygon p,8
	redraw	;再描画しないと表示されない
	stop

以上のスクリプトを実行すると、手裏剣のような図形が描かれます。


戻る