Dripです。
白い騎士のお供の犬さん、こんにちは。
トルグボタン(へこみボタン)についてですが、やり方はいろいろあると思います。
Windows標準形式のボタンを使って処理する場合はnaznyarkさんが提示されたような、
APIを使うものが一般的です。
ただ、プログラムを行う上で覚えておきたいことは、自分で全て描画、処理すれば、
どんな特殊なタイプのいかなるボタンでも生成できてしまうことです。
例として以下のようなものがあります。
#module
#deffunc tlg_init int p1,int p2,int p3
max=p1
sx=p2
sy=p3
active=0
dim bx,p1
dim by,p1
dim bs,p1
sdim bstr,32,p1
gid=ginfo(2)
buffer 31,sx*2,sy
color 155,150,145:boxf 0,0,sx-1,sy
repeat sy-2,1
tmp=double(64)/sy*(-cnt)+240
color tmp,tmp,tmp
line 0,cnt,sx-2,cnt
loop
color 64,96,244:boxf sx,0,sx*2-1,sy
repeat sy-2,1
tmp=double(64)/sy*(-cnt)+255
color tmp,tmp,tmp
line sx,cnt,sx*2-2,cnt
loop
gsel gid
return
#deffunc tlg_button str tstr
id=-1
repeat max
if bs(cnt)=0:id=cnt:break
loop
if id<0:return(-1)
bx(id)=ginfo(22)
by(id)=ginfo(23)
bs(id)=1
bstr(id)=tstr
return(0)
#deffunc tlg_hit
repeat max
if bs(cnt)<1:continue
if bx(cnt)<mousex & by(cnt)<mousey:{ //横長になるので折った;
if bx(cnt)+sx>mousex & by(cnt)+sy>mousey:{
active=cnt
}
}
loop
return(active)
#deffunc tlg_view
gmode 0,sx,sy
repeat max
if bs(cnt)>0:{
pos bx(cnt),by(cnt)
if active=cnt:gcopy 31,sx,0:else:gcopy 31,0,0
color 48,32,30:pos bx(cnt)+4,by(cnt)+4:mes bstr(cnt)
}
loop
return
#global
font "MS ゴシック",12
tlg_init 8,64,20 //ボタンの最大数とサイズ
pos 10,10:tlg_button "タブ1" //ボタンを作る
pos 80,10:tlg_button "タブ2"
pos 150,10:tlg_button "タブ3"
tlg_view
onclick gosub *click
gosub *click
stop
*click
tlg_hit //ボタンが押されたか判定
tlg_view //ボタンを最新情報に更新
hsvcolor stat*32,32,255:boxf 10,40,400,300
color:pos 20,50:mes "ページ No. "+stat
return
APIやボタン制御命令に頼らなければ、どんなボタンでも作れるということも、
頭の片隅においておくようにすると良いと思います。
ではではがんばってください。^^