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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0214
FON自作スクロールバー6解決


FON

リンク

2007/2/14(Wed) 07:45:08|NO.5677

自作スクロールバーを制作しています。
▲▼をクリック(長押しも可)することでスクロールできます。
以下のことを可能にする方法を教えてください。またはここをこうするともっとよくなる
みたいな改善点でもいいです。

1.スクロールバーのスクロールする■の部分を大きく(縦長)してスムーズに動かしたい。
2.スクロールバーをクリック&ドラッグで左の表示部分と連動させたい。
3.表示部分をクリックすると0〜27のアイテムの何番目が選ばれたか知りたい。

	screen 0,216,45*11
//スクロールバー描画(scrollbar-face-color)(scrollbar-arrow-color) color ,,255:boxf 198,0,214,17 color 255,255,255:pos 199,0:mes "▲" color ,,255:boxf 198,477,214,495 color 255,255,255:pos 199,476:mes "▼" //アイテム buffer 3,197,45 color:boxf 0,0,197,44 color 255,255,255:line 0,44,197,44 buffer 2,197,45*28 repeat 28 y=cnt*45:i=cnt pos 0,y gmode 0:gcopy 3,0,0,197,45 color 255,255,255:mes cnt i++ loop yy=0 repeat redraw 0 gsel 0,1 if yy<0:yy=0 if yy>((45*28)-(45*11)):yy=((45*28)-(45*11)) if((yy<=(45*28)-(45*11))&(0<=yy)):gmode 0:pos 0,0:gcopy 2,0,yy,197,45*28 //(scrollbar-track-color) color 200,200,200:boxf 198,18,214,476 //(scrollbar-face-color) color ,,255:boxf 198,(18+(yy/45)*26),214,((18*2)+((yy/45)*26)) redraw 1 //スクロールバークリック stick a,256 if((198<=mousex)&(mousex<=214)&(0<=mousey)&(mousey<=17)):if a=256:yy-45 if((198<=mousex)&(mousex<=214)&(477<=mousey)&(mousey<=495)):if a=256:yy+45 wait 10 loop stop



この記事に返信する


FON

リンク

2007/2/14(Wed) 09:53:43|NO.5679

1番目は自力で解決しました。
自分で書いたスクリプトなのに、時々、何やってるかわからなくなる…
	//(scrollbar-face-color)
color ,200,200:boxf 198,(18+(yy/45)*20),214,(18+119+((yy/45)*20))

(18+(yy/45)*20)

18は▲の場所の高さに+1したもの。yy=0の時、pos 198,18からという意味 (yy/45)は1回クリックするごとに±45で0〜17までの数が入る 20はスクロールバーの移動量で1回クリックすると20ドット移動する
(18+119+((yy/45)*20))
119はバーの大きさ、計算式は
ウィンドウの高さ-(▲の部分の高さ*2)-((yy/45)の最大値*移動量)
495 - (18*2) - (17*20)



英爺

リンク

2007/2/14(Wed) 13:15:49|NO.5684

FONさん、こんにちは。
多分、3バージョンになって、Screen作成時に動的にスクロールバーが作成されなくなって
しまったことで、自力で作成しようとしているのかな?って推測します。下記の内容を知っている
上で、それでも自力で作るつもりであれば別ですが、知らなかったら申し訳けないのでカキコして
おきます。

スクロールバーの作成については、去年に『HSP HELP CENTER』にて討議され、
「#module "scrlbar"」Ver 0.98β1が公開されています。
・スクロールバー/・ウィンドーの初期化対応/・マウスホイール対応

http://smile.poosan.net/perl-bin/hsp/ver3/hsp3.cgi?print+200511/05110003.txt

参考にしてみてください。



FON

リンク

2007/2/14(Wed) 13:50:06|NO.5685

英爺さん、どうもありがとうございます。
ぷまさんのところはよく拝見していますが、そのページは見てなかったです。

説明が足りなくてすいません。
ゲームで使用したいと思っているので、ゲームに合うスクロールバーを作れ
ないかと模索中です。



暇人

リンク

2007/2/14(Wed) 15:37:44|NO.5690

FONさん、こんにちは。
挙げられていた項目は可能になっていると思います。
	...
sel_item=-1;選択されたアイテムを入れる変数:-1は選択されていない状態 repeat gosub *draw_scr //スクロールバークリック stick a,256 if((198<=mousex)&(mousex<=214)){ if((0<=mousey)&(mousey<=17)):if a=256:yy-45 if((477<=mousey)&(mousey<=495)):if a=256:yy+45 //スクロールバーをクリック&ドラッグ if(((18+(yy/45)*20)<=mousey)&(mousey<=18+119+((yy/45)*20))){ cur_yy = mousey;クリックしたときの座標を保持 while a=256 if mousey-cur_yy>=20:cur_yy+20:yy+45:gosub *draw_scr if mousey-cur_yy<=-20:cur_yy-20:yy-45:gosub *draw_scr stick a,256 await 16 wend } // } //クリックされたアイテムをsel_itemに代入 if((0<=mousex)&(mousex<=197)){ if a=256 { for i,0,11 if(mousey<=i*45):_break next sel_item=yy/45+(i-1) } } // wait 10 loop stop *draw_scr ... return
描画部分(redraw 0 〜 redraw1)を*draw_scrとしています。



KIMU

リンク

2007/2/14(Wed) 16:57:42|NO.5691

暇人さんのと、ちょっと違う感じの


item=-1 repeat redraw 0 gsel 0,1 if yy<0:yy=0 if yy>((45*28)-(45*11)):yy=((45*28)-(45*11)) if((yy<=(45*28)-(45*11))&(0<=yy)):gmode 0:pos 0,0:gcopy 2,0,yy,197,45*28 //(scrollbar-track-color) color 200,200,200:boxf 198,18,214,476 //(scrollbar-face-color) buy=(18+(yy/45)*20) bdy=(119+buy) color ,200,200:boxf 198,buy,214,bdy redraw 1 //スクロールバークリック stick a,256 //クリックを離されたらバーを離す }else {クリック押されている間カウントしてmccnt=1でドラッグ以外のクリック(レスポンスを良くする為) if (a&256)=0 {scbf=0:mccnt=0}else{mccnt=(mccnt+1)\8} if (a&256)!abak {rclick=(a&256)>0}else{rclick=0} ;シングルクリック abak=a&256 if (198<=mousex) and (mousex<=214) and ((a&256)>0) or (scbf=1){ if (mousey>17) and (477>mousey) { if (buy<=mousey) and (bdy>=mousey) or (scbf=1){ if scbf=0 {buydif=buy-mousey :scbf=1} ;スクロールバーを摘む(バーとカーソル位置の差分を収得) yy=((mousey+buydif)/20)*45 ;スクロールバードラッグ }else{ if mccnt=1 { if ((bdy-60)>mousey) {yy-45*6}else{yy+45*6} ;バー上下外をクリック(1バー分スクロール) } } }else{ if mccnt=1 { if (45*11/2)>mousey {yy-45}else{yy+45} ;"▲""▼"クリック } } }else{ if (198>mousex) and rclick {item=(yy+mousey)/45} ;アイテム選択 } title "ITEM_NO( "+str(item)+" ) " await 15 loop stop



FON

リンク

2007/2/14(Wed) 19:52:05|NO.5694

暇人さん、KIMUさん、どうもありがとうございます。
みなさんすごいですね。たぶん、私が同じようなことをやると1ヶ月はかかってしまいそうです。
暇人さんのスクリプトは理解できました。どうもありがとうございました。
KIMUさんのスクリプトも理解できました。注釈がなかったら理解できなかったと思います。
どうもありがとうございました。

NO.5677の描画部分のスクリ修正しておきます。
	color ,,255:boxf 198,478,214,495
color 255,255,255:pos 199,477:mes "▼"

	//(scrollbar-track-color)
color 200,200,200:boxf 198,18,214,477



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