2.07.組み込み関数4

以下の追加の組み込み関数が存在します(文字列一括操作等)。

戻り値のない関数は、式の中では使えません。


setstrimg() 文字に画像を割り付けます。(戻り値なし)

disstrimg() 画像文字割付を削除します。(戻り値なし)

strmake() 文字列を作成して返します。

strovr() 文字列を上書きして返します。

txtmake() 文字列配列を一括作成します。(戻り値なし)

txtdraw() 文字列配列の内容を一括描画します。(戻り値なし)

txtdrawimg() 文字列配列の内容を一括描画します。

ただし 文字に割り付けた画像を描画します。(戻り値なし)

txtovr() 文字列配列に文字列配列を上書きします。(戻り値なし)

txtreplace() 文字列配列の内容を文字列単位で一括置換します。(戻り値なし)

txtreplace2() 文字列配列の内容を文字単位で一括置換します。(戻り値なし)

txtpset() 文字列配列に文字で点を描画します。(戻り値なし)

txtline() 文字列配列に文字でラインを描画します。(戻り値なし)

txtbox() 文字列配列に文字で四角を描画します。(戻り値なし)

txtfbox() 文字列配列に文字で四角の塗りつぶしを描画します。(戻り値なし)

txtcircle() 文字列配列に文字で円を描画します。(戻り値なし)

txtfcircle() 文字列配列に文字で円の塗りつぶしを描画します。(戻り値なし)

txtpoly() 文字列配列に文字で多角形を描画します。(戻り値なし)

txtfpoly() 文字列配列に文字で多角形の塗りつぶしを描画します。(戻り値なし)

txtpget() 文字列配列の1点の文字を取得します。

txtbchk() 文字列配列の四角領域の文字をチェックします。

txtbchk2() 画面上の座標範囲を指定して、txtbchk()を実行します。

txtbchk2pt() txtbchk2()と同様の処理を行い、ヒットした座標と文字をすべて返します。


2.7.1.組み込み関数4の詳細


--

setstrimg(no,ch,img,offx,offy)

割付グループ番号noの文字chに Image変数 imgの画像を割り付けます。

割付グループ番号noには数値を指定します(割付グループを切り換える必要がなければ0を指定ください)。

文字chは1文字のみ有効です。

例えば、setstrimg(0,"#",img) は 文字#に画像imgを割り付けます。

割り付け後は、文字#をtxtdrawimg()で表示すると、画像imgが表示されます。

また、offx,offyには、画像の表示位置をずらすためのオフセット値を指定します(単位:px)。

例えば、setstrimg(0,"#",img,-2,-4) として

txtdrawimg()で文字#を表示すると、x座標を2ピクセル、y座標を4ピクセルだけ

左上方向にずらした位置に画像imgが表示されます。

offx,offyは 省略可能です。

省略した場合には、offx=0,offy=0を指定したことになります。


(v15.00から引数にnoが追加になりました。このため、過去との互換性がなくなっています)


(戻り値なし)


--

disstrimg(no)

割付グループ番号noの画像文字割付をすべて削除します。


(v15.00から文字chではなく割付グループ番号noを指定するようになりました。

このため、過去との互換性がなくなっています)


(戻り値なし)


--

strmake(st,count)

文字列stをcount文字だけ繰り返した文字列を返します。

例えば、ret=strmake("0123",10) は ret="0123012301" となります。


--

strovr(st1,i,st2,option)

文字列st1の位置iに文字列st2を上書きして返します。

このとき、返す文字列の長さはst1の長さとなります(はみ出した部分はカットされます)。

位置iは1文字目を0として数えます。

例えば、ret=strovr("0123456789",7,"abcde") は ret="0123456abc" となります。

また 例えば、ret=strovr("0123456789",-2,"abcde") は ret="cde3456789" となります。

また、optionに値を指定すると 以下の動作となります。

=0:上書き

=1:半角/全角スペース以外を上書き

=2:半角/全角スペースのみ上書き

optionは省略可能です。省略した場合には0を指定したことになります。


--

txtmake(a1,a2,a3,st,count)

文字列配列を一括作成します。

文字列配列a1の添字a2~a3の要素に 文字列stをcount文字だけ繰り返した文字列を代入します。

例えば、txtmake(bg,0,3,"abc",5) は、

bg[0]="abcab"

bg[1]="abcab"

bg[2]="abcab"

bg[3]="abcab"

となります。

(戻り値なし)


--

txtdraw(a1,a2,a3,x,y,anc)

文字列配列の内容を一括描画します。

文字列配列a1の添字a2~a3の内容を、座標(x,y)を左上とする位置に一括描画します。

(xとyを省略した場合には、x=0,y=0として描画します)

ancには 右寄せ,左寄せ等のアンカーを指定します。

(アンカーについては組み込み定数を参照)

現状、使用できるアンカーは水平方向のみです。

ancに0を指定または省略した場合には、左寄せを指定したことになります。

例えば、txtdraw(bg,0,3,0,0,0) は、

bg[0]="01234"

bg[1]="-----"

bg[2]="+++++"

bg[3]="====="

であれば、

01234

-----

+++++

=====

の4行を画面に表示します。

(戻り値なし)


--

txtdrawimg(a1,a2,a3,x,y,w,h,anc,no)

文字列配列の内容を一括描画します。

文字列配列a1の添字a2~a3の内容を、座標(x,y)を左上とする位置に一括描画します。

ただしこのとき setstrimg()で文字に割り付けた画像を表示します。

文字に割り付けた画像がない場合には、何も表示しません。

wとhには、1文字あたりの画像の表示サイズを指定します(単位:px)。

ancには 右寄せ,左寄せ等のアンカーを指定します。

(アンカーについては組み込み定数を参照)

現状、使用できるアンカーは水平方向のみです。

ancに0を指定または省略した場合には、左寄せを指定したことになります。

noにはsetstrimgで指定した割付グループ番号を指定します。

noを省略すると0を指定したことになります。

例えば、

bg[0]="-----"

bg[1]="-#-#-"

bg[2]="--#--"

bg[3]="-#-#-"

であれば、

makeimg(img,12,12)

trgt(img)

col(0x00FF00)

farc(0,0,12,12)

trgt(off)

setstrimg(0,"#",img)

txtdrawimg(bg,0,3,0,0,12,12,0,0)

とすると、#の位置に緑色の円(サイズは 幅12px 高さ12px)を表示します。

注意点として、本命令は表示する画像が多くなるほど 処理時間がかかります。


(v15.00から省略可能引数のnoが追加になりました)


(戻り値なし)


--

txtovr(a1,a2,a3,x,y,b1,b2,b3,option)

文字列配列に文字列配列を上書きします。

文字列配列a1の添字a2~a3の要素内の 座標(x,y)の位置に

文字列配列b1の添字b2~b3の要素を上書きします。

(文字列配列a1をはみ出した部分は カットされます)

xは1文字目を0として数えます。

yは配列a1の添字と同じ値を指定します。

例えば、txtovr(bg,0,4,2,2,mychr,0,2) は、

bg[0]="-----"

bg[1]="-----"

bg[2]="-----"

bg[3]="-----"

bg[4]="-----"

mychr[0]="ABC"

mychr[1]="DEF"

mychr[2]="GHI"

であれば、

bg[0]="-----"

bg[1]="-----"

bg[2]="--ABC"

bg[3]="--DEF"

bg[4]="--GHI"

となります。

また、optionに値を指定すると 以下の動作となります。

=0:上書き

=1:半角/全角スペース以外を上書き

=2:半角/全角スペースのみ上書き

optionは省略可能です。省略した場合には0を指定したことになります。

(戻り値なし)


--

txtreplace(a1,a2,a3,st1,st2)

文字列配列の内容を文字列単位で一括置換します。

文字列配列a1の添字a2~a3の要素内から、

文字列st1をすべて探して、文字列st2に一括置換します。

文字列st1と文字列st2は、同じ長さである必要があります。

例えば、txtreplace(bg,0,4,"*","#") は、

bg[0]="-----"

bg[1]="-*-*-"

bg[2]="--*--"

bg[3]="-*-*-"

bg[4]="-----"

であれば、

bg[0]="-----"

bg[1]="-#-#-"

bg[2]="--#--"

bg[3]="-#-#-"

bg[4]="-----"

となります。

(戻り値なし)


--

txtreplace2(a1,a2,a3,st1,st2)

文字列配列の内容を文字単位で一括置換します。

文字列配列a1の添字a2~a3の要素内から、

文字列st1のいずれかの文字を見つけると、文字列st2の対応する文字にすべて置換します。

文字列st1と文字列st2は、同じ長さである必要があります。

例えば、txtreplace2(bg,0,4,"123","ABC") は、

bg[0]="-----"

bg[1]="-1-1-"

bg[2]="--2--"

bg[3]="-3-3-"

bg[4]="-----"

であれば、

bg[0]="-----"

bg[1]="-A-A-"

bg[2]="--B--"

bg[3]="-C-C-"

bg[4]="-----"

となります。

(戻り値なし)


--

txtpset(a1,a2,a3,x,y,st)

文字列配列に文字で点を描画します。

文字列配列a1の添字a2~a3の要素内の 座標(x,y)の位置に文字列stを描画します。

xは1文字目を0として数えます。

yは配列の添字と同じ値を指定します。

例えば、txtpset(bg,0,3,2,2,"#") は、

bg[0]="-----"

bg[1]="-----"

bg[2]="-----"

bg[3]="-----"

であれば、

bg[0]="-----"

bg[1]="-----"

bg[2]="--#--"

bg[3]="-----"

となります。

また、stに複数文字を指定すると、複数文字表示されます。

(文字列配列a1をはみ出した部分は カットされます)

すなわち、txtpset(bg,0,3,2,2,"abcde") は、

bg[0]="-----"

bg[1]="-----"

bg[2]="--abc"

bg[3]="-----"

となります。

(戻り値なし)


--

txtline(a1,a2,a3,x1,y1,x2,y2,st)

文字列配列に文字でラインを描画します。

文字列配列a1の添字a2~a3の要素内の

座標(x1,y1)から(x2,y2)までのライン上に 文字列stを描画します。

x1,x2は1文字目を0として数えます。

y1,y2は配列の添字と同じ値を指定します。

例えば、txtline(bg,0,3,0,0,4,2,"#") は、

bg[0]="-----"

bg[1]="-----"

bg[2]="-----"

bg[3]="-----"

であれば、

bg[0]="#----"

bg[1]="-##--"

bg[2]="---##"

bg[3]="-----"

となります。

(戻り値なし)


--

txtbox(a1,a2,a3,x1,y1,x2,y2,st)

文字列配列に文字で四角を描画します。

文字列配列a1の添字a2~a3の要素内の

座標(x1,y1)を左上とし(x2,y2)を右下とする四角形の辺に 文字列stを描画します。

x1,x2は1文字目を0として数えます。

y1,y2は配列の添字と同じ値を指定します。

例えば、txtbox(bg,0,3,0,1,3,3,"#") は、

bg[0]="-----"

bg[1]="-----"

bg[2]="-----"

bg[3]="-----"

であれば、

bg[0]="-----"

bg[1]="####-"

bg[2]="#--#-"

bg[3]="####-"

となります。

(戻り値なし)


txtfbox(a1,a2,a3,x1,y1,x2,y2,st)

文字列配列に文字で四角の塗りつぶしを描画します。

文字列配列a1の添字a2~a3の要素内の

座標(x1,y1)を左上とし(x2,y2)を右下とする四角形の辺と内部に 文字列stを描画します。

x1,x2は1文字目を0として数えます。

y1,y2は配列の添字と同じ値を指定します。

例えば、txtfbox(bg,0,3,0,1,3,3,"#") は、

bg[0]="-----"

bg[1]="-----"

bg[2]="-----"

bg[3]="-----"

であれば、

bg[0]="-----"

bg[1]="####-"

bg[2]="####-"

bg[3]="####-"

となります。

(戻り値なし)


--

txtcircle(a1,a2,a3,x0,y0,r,a,b,st)

文字列配列に文字で円を描画します(現状 あまりきれいな円は描けません)。

文字列配列a1の添字a2~a3の要素内の

(a*a)*(x-x0)*(x-x0) + (b*b)*(y-y0)*(y-y0) = r*r で表される円周に 文字列stを描画します。

x0は1文字目を0として数えます。

y0は配列の添字と同じ値を指定します。

rは円の半径になります。

aはx方向の縮小倍率になります。aが1より小さい場合は 1(等倍)を指定したことになります。

bはy方向の縮小倍率になります。bが1より小さい場合は 1(等倍)を指定したことになります。

例えば、txtcircle(bg,0,7,4,4,5,1,2,"#") は、

bg[0]="----------"

bg[1]="----------"

bg[2]="----------"

bg[3]="----------"

bg[4]="----------"

bg[5]="----------"

bg[6]="----------"

bg[7]="----------"

であれば、

bg[0]="----------"

bg[1]="----------"

bg[2]="--#####---"

bg[3]="##-----##-"

bg[4]="#-------#-"

bg[5]="##-----##-"

bg[6]="--#####---"

bg[7]="----------"

となります。

(戻り値なし)


--

txtfcircle(a1,a2,a3,x0,y0,r,a,b,st)

文字列配列に文字で円の塗りつぶしを描画します(現状 あまりきれいな円は描けません)。

文字列配列a1の添字a2~a3の要素内の

(a*a)*(x-x0)*(x-x0) + (b*b)*(y-y0)*(y-y0) = r*r で表される円周とその内部に 文字列stを描画します。

x0は1文字目を0として数えます。

y0は配列の添字と同じ値を指定します。

rは円の半径になります。

aはx方向の縮小倍率になります。aが1より小さい場合は 1(等倍)を指定したことになります。

bはy方向の縮小倍率になります。bが1より小さい場合は 1(等倍)を指定したことになります。

例えば、txtfcircle(bg,0,7,4,4,5,1,2,"#") は、

bg[0]="----------"

bg[1]="----------"

bg[2]="----------"

bg[3]="----------"

bg[4]="----------"

bg[5]="----------"

bg[6]="----------"

bg[7]="----------"

であれば、

bg[0]="----------"

bg[1]="----------"

bg[2]="--#####---"

bg[3]="#########-"

bg[4]="#########-"

bg[5]="#########-"

bg[6]="--#####---"

bg[7]="----------"

となります。

(戻り値なし)


--

txtpoly(a1,a2,a3,x,y,b1,b2,st,flg)

文字列配列に文字で多角形を描画します。

文字列配列a1の添字a2~a3の要素内の

配列変数x,y(添字b1~b2)で表現される多角形のライン上に 文字列stを描画します。

xには、多角形の頂点のx座標を格納した配列変数名を指定します。

yには、多角形の頂点のy座標を格納した配列変数名を指定します。

(x,yには[ ]をつけないで配列変数名だけを指定します)

b1には配列変数x,yの添字の最小値を指定します。

b2には配列変数x,yの添字の最大値を指定します。

x座標は1文字目を0として数えます。

y座標は文字列配列a1の添字と同じ値を指定します。

flgには、多角形を閉じるかどうかを指定します。

flgに0を指定すると、多角形を閉じます(デフォルト動作)。

flgに0以外を指定すると、多角形を閉じません(折れ線の描画になります)。

flgは省略可能です。省略した場合には0を指定したことになります。

例えば、txtpoly(bg,0,5,x,y,0,2,"#",0) は、

x[0]=4

y[0]=0

x[1]=0

y[1]=4

x[2]=8

y[2]=4

bg[0]="----------"

bg[1]="----------"

bg[2]="----------"

bg[3]="----------"

bg[4]="----------"

bg[5]="----------"

であれば、

bg[0]="----#-----"

bg[1]="---#-#----"

bg[2]="--#---#---"

bg[3]="-#-----#--"

bg[4]="#########-"

bg[5]="----------"

となります。

(戻り値なし)


--

txtfpoly(a1,a2,a3,x,y,b1,b2,st)

文字列配列に文字で多角形の塗りつぶしを描画します。

文字列配列a1の添字a2~a3の要素内の

配列変数x,y(添字b1~b2)で表現される多角形の辺とその内部に 文字列stを描画します。

xには、多角形の頂点のx座標を格納した配列変数名を指定します。

yには、多角形の頂点のy座標を格納した配列変数名を指定します。

(x,yには[ ]をつけないで配列変数名だけを指定します)

b1には配列変数x,yの添字の最小値を指定します。

b2には配列変数x,yの添字の最大値を指定します。

x座標は1文字目を0として数えます。

y座標は文字列配列a1の添字と同じ値を指定します。

例えば、txtfpoly(bg,0,5,x,y,0,2,"#") は、

x[0]=4

y[0]=0

x[1]=0

y[1]=4

x[2]=8

y[2]=4

bg[0]="----------"

bg[1]="----------"

bg[2]="----------"

bg[3]="----------"

bg[4]="----------"

bg[5]="----------"

であれば、

bg[0]="----#-----"

bg[1]="---###----"

bg[2]="--#####---"

bg[3]="-#######--"

bg[4]="#########-"

bg[5]="----------"

となります。

(戻り値なし)


--

txtpget(a1,a2,a3,x,y)

文字列配列の1点の文字を取得します。

文字列配列a1の添字a2~a3の要素内の 座標(x,y)の位置の文字を返します。

xは1文字目を0として数えます。

yは配列の添字と同じ値を指定します。

例えば、ret=txtpget(bg,0,3,2,2) は、

bg[0]="12345"

bg[1]="67890"

bg[2]="abcde"

bg[3]="fghij"

であれば、

ret="c"

となります。


--

txtbchk(a1,a2,a3,x1,y1,x2,y2,st)

文字列配列の四角領域の文字をチェックします。

文字列配列a1の添字a2~a3の要素内の

座標(x1,y1)を左上とし(x2,y2)を右下とする四角形の領域内に

文字列stに含まれる文字が1個でも存在すれば 1を返します。

1個も存在しなければ 0を返します。

x1,x2は1文字目を0として数えます。

y1,y2は配列の添字と同じ値を指定します。

例えば、ret=txtbchk(bg,0,3,2,2,3,3,"abcde") は、

bg[0]="-----"

bg[1]="-----"

bg[2]="---e-"

bg[3]="-----"

であれば、

ret=1

となります。


--

txtbchk2(a1,a2,a3,x1,y1,x2,y2,st,chw,chh,offx,offy,anc)

画面上の座標範囲 (x1,y1)-(x2,y2) (単位:px) を指定して、

txtbchk()を実行します。戻り値は1か0になります。

具体的には、画面上の座標範囲 (x1,y1)-(x2,y2) (単位:px) を、

文字列配列の四角形領域に変換してから、txtbchk()を実行します。

chwとchhには1文字の幅と高さを指定します(単位:px)。

offxとoffyには、画面上のオフセット座標を指定します(単位:px)。

offx,offyは 省略可能です。

省略した場合には、offx=0,offy=0を指定したことになります。

ancには、画面上の右寄せ,左寄せ等のアンカーを指定します。

(アンカーについては組み込み定数を参照)

現状、使用できるアンカーは水平方向のみです。

ancに0を指定または省略した場合には、左寄せを指定したことになります。

例えば、

bg[0]="-----"

bg[1]="-----"

bg[2]="---e-"

bg[3]="-----"

sw=stwide("0")

sh=sthigh

ret=txtbchk2(bg,0,3,sw*2,sh*2,sw*3+1,sh*3+1,"abcde",sw,sh,0,0,0)

を実行すると、

ret=1

となります。


--

txtbchk2pt(a1,a2,a3,x1,y1,x2,y2,st,chw,chh,offx,offy,anc,sortmode)

txtbchk2()と同様の処理を行いますが、戻り値として、ヒットした座標と文字をすべて返します。

戻り値は、"1,2,a" のように、ヒットしたX座標(単位:文字),Y座標(単位:文字),文字を、

カンマ区切りで並べた文字列になります。

また、複数の座標がヒットした場合には、"1,2,a,3,4,b" のようにさらにカンマ区切りで追加されます。

sortmode には、複数の座標がヒットした場合のソート方法を、番号で指定します。

0を指定すると、昇順でY座標優先でソートした結果が返ります。

1を指定すると、昇順でX座標優先でソートした結果が返ります。

2を指定すると、降順でY座標優先でソートした結果が返ります。

3を指定すると、降順でX座標優先でソートした結果が返ります。

例えば、

bg[0]="-----"

bg[1]="-----"

bg[2]="--ab-"

bg[3]="--de-"

sw=stwide("0")

sh=sthigh

ret=txtbchk2pt(bg,0,3,sw*2,sh*2,sw*3+1,sh*3+1,"abcde",sw,sh,0,0,0,0)

を実行すると、

ret="2,2,a,3,2,b,2,3,d,3,3,e"

となります。


(2018-2-14)