HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0501
白い騎士のお供の犬凹ボタン5解決


白い騎士のお供の犬

リンク

2006/5/1(Mon) 21:25:16|NO.554

クリックすると、へこんだ状態になって
そのボタンを複数置いてタブコントロールみたいに切り替えをしてみたいです。

参考になるスクリプトありませんか?

それと標準命令じゃ不可能ですか?



この記事に返信する


naznyark

リンク

2006/5/2(Tue) 02:08:45|NO.555

標準命令だけ版。
sendmsg 命令や oncmd 命令は標準命令といっても
使いこなすには HSP 以外の知識が必要になりますが。

cb=8; ボタンの数 dim oidCB, cb : dim hwndCB, cb repeat cb pos cnt*64, 0 : button "chk "+cnt, *push; 跳び先はダミー oidCB(cnt)=stat : hwndCB(cnt)=objinfo(stat, 2) loop oncmd gosub *on_wmcommand, 0x0111 selCB=-1 *push title "select "+selCB stop *on_wmcommand repeat cb if lparam=hwndCB(cnt) { sendmsg hwndCB(cnt), 0xF3, 4, 0 selCB=cnt } else { sendmsg hwndCB(cnt), 0xF3, 0, 0 } loop return
標準命令以外も使用版。user32.as を使用。

#include "user32.as" cb=8; ボタンの数 dim oidCB, cb : dim hwndCB, cb : dim stateCB, cb repeat cb pos cnt*64, 0 : chkbox "chk "+cnt, stateCB(cnt) oidCB(cnt)=stat : hwndCB(cnt)=objinfo(stat, 2) GetWindowLong hwndCB(cnt), -16 SetWindowLong hwndCB(cnt), -16, 0x50001009 loop oncmd gosub *on_wmcommand, 0x0111 f=1 : selCB=-1 repeat wait 3 if f : f=0 : title "select "+selCB loop stop *on_wmcommand repeat cb if lparam=hwndCB(cnt) : selCB=cnt : else : objprm oidCB(cnt), 0 loop f=1 return



774

リンク

2006/5/2(Tue) 09:26:31|NO.556

フラットボタンなタブコントロールのことかな?

だとしたら、
http://www.silkroad.ne.jp/sakura/ 
で配布されているstdlibのextabctl.asを使うか、

自分で↓とかでAPI勉強して作るしかないね。
http://yokohama.cool.ne.jp/chokuto/urawaza/tabctl1.html
CreateWindowEXするときのウィンドウスタイルに
TCS_BUTTONS $0100
TCS_FLATBUTTONS $0008
を追加するとフラットボタンになるよ

どちらにしても画面切り替えとかのために
ちょっとはAPIの知識が必要になるけど



Drip

リンク

2006/5/2(Tue) 10:52:21|NO.557

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やボタン制御命令に頼らなければ、どんなボタンでも作れるということも、
頭の片隅においておくようにすると良いと思います。
ではではがんばってください。^^



白い騎士のお供の犬

リンク

2006/5/2(Tue) 16:59:14|NO.563

naznyarkさん
 うお〜標準命令だけでもちゃんと動く!
 ボタンも凹むし! ありがとうございます

774さん
 APIはまだ未経験です・・・
 あの〜フラットボタンってなんですか・・・?

Dripさん
 たしかにそうだ・・・。
 プログラムはどうであれ、実際は画面に映った描画なんだしね・・・
 とても参考になります。



774

リンク

2006/5/3(Wed) 21:30:01|NO.589

フラットボタンなタブコントロールってこういう感じの奴ね
http://aploda.org/dl.php?mode=pass&file_id=0000002406



ONION software Copyright 1997-2023(c) All rights reserved.