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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0521
k5342スクロールバーを設置したい5解決


k5342

リンク

2011/5/21(Sat) 18:45:32|NO.39319

毎度毎度、すいません。
http://hsp.tv/play/pforum.php?mode=all&num=38646
に引き続き、質問です。

現在、
「ソフトを起動」→「Dropbox公開フォルダの中のinfo.txt」をダウンロード→info.txtを解釈
→変数に各情報を代入→ソフト一覧を表示→「ソフトを選ぶ」→「ダウンロードしたいソフトをクリック」
→情報を表示(バージョン,名前など)→「ダウンロードボタンを押す」→変数に代入されていたリンク先のファイルをダウンロード
→ソフト一覧を表示(戻る)
という流れのアプリケーションを作っているところです。

で、現在、「ソフト一覧を表示」の部分で困っています。
ソフト一覧を表示するときに、画面にソフトの名前とボタンを表示しようと思っていたんですが、
画面に収まりきらないので、スクロールバーを表示させたいと思っています。

でも、ぐぐってもよく分からないのばかりでてきて進展がありません。

いま、GUI優先で作っているんですが...
;
softname="SoftNavi" build_no="開発版" ver_no="開発版" support_now="不明 (情報ファイル取得エラー)" os=sysinfo(0) split os,"Windows" if stat-1>=1:os_1="Windows" support_code="SNV-110001" ; split os,"ver",dst,os_no ; buffer 1000 gradf 0,0,200,100,1,$FFFFFF,$BBBBBB ; buffer 1001 gradf 0,0,200,100,1,$FFFFFF,$FFFFFF gradf 0,1,200,98,1,$,$ ; buffer 1002 ; gradf 0,0,750,550,1,$333333,$111111 ; gmode 3,,,70 gcopy 1000,0,0,200,100 ; color 0,0,0 gmode 4,,,256 pos 0,0:gcopy 1001,0,0,200,100 ; buffer 1003 gradf 0,0,200,100,1,$00bfee,$009dee ; buffer 1004 ; gradf 0,0,750,550,1,$333333,$111111 ; gmode 3,,,200 gcopy 1003,0,0,200,100 ; color 0,0,0 gmode 4,,,256 pos 0,0:gcopy 1001,0,0,200,100 ; buffer 2000,1000,1000 color 255,255,255 boxf ; screen 0,750,550 title ""+softname+"" ; repeat ; redraw 0 ; color 255,255,255 boxf ; gradf 0,0,750,550,1,$333333,$111111 ; if mode!0:gmode 3,,,60:pos 0,30:gcopy 1002,0,0,200,100:else:if mode=0:gmode 3,,,180:pos 0,30:gcopy 1004,0,0,200,100 if mode!1:gmode 3,,,60:pos 0,130-1:gcopy 1002,0,0,200,100:else:if mode=1:gmode 3,,,180:pos 0,130-1:gcopy 1004,0,0,200,100 if mode!2:gmode 3,,,60:pos 0,230-2:gcopy 1002,0,0,200,100:else:if mode=2:gmode 3,,,180:pos 0,230-2:gcopy 1004,0,0,200,100 ; gmode 3,,,180 if mousex<200&mousey<130&mousey>30:pos 0,30:if mode!0:gcopy 1002,0,0,200,100:else:if mode=0:gcopy 1004,0,0,200,100 if mousex<200&mousey<230-1&mousey>130-1:pos 0,130-1:if mode!1:gcopy 1002,0,0,200,100:else:if mode=1:gcopy 1004,0,0,200,100 :if mousex<200&mousey<330-2&mousey>230-2:pos 0,230-2:if mode!2:gcopy 1002,0,0,200,100:else:if mode=2:gcopy 1004,0,0,200,100 ; stick click_01,,1 if mousex<200&mousey<130&mousey>30&click_01=256:mode=0 if mousex<200&mousey<230-1&mousey>130-1&click_01=256:mode=1 if mousex<200&mousey<330-2&mousey>230-2&click_01=256:mode=2 ; font"tahoma",25,16 if os_no="6.1":font"メイリオ",25,0:else:font"tahoma",25,16 color 255,255,255 pos -1000,-1000:mes"Home" pos (200-ginfo_mesx)/2,30+(100-ginfo_mesy)/2:mes"Home" ; pos -1000,-1000:mes"Genre" pos (200-ginfo_mesx)/2,130-1+(100-ginfo_mesy)/2:mes"Genre" ; pos -1000,-1000:mes"About" pos (200-ginfo_mesx)/2,230-2+(100-ginfo_mesy)/2:mes"About" ; ; モードに応じた画面切り替え ; font"tahoma",27,16 color 180,180,180 if mode=0:pos 640,480:mes"Home" if mode=1:pos 640,480:mes"Genre" if mode=2{ color 255,255,255 font"tahoma",30,16 if os_no="6.1":font"メイリオ",30,0:else:font"MS P GOTHIC",30,16 color 20,20,20 pos 270,91:mes softname color 255,255,255 pos 270,90:mes softname ; font"MS P GOTHIC",13,16 if os_no="6.1":font"メイリオ",13,0:else:font"MS P GOTHIC",13,16 color 20,20,20 pos 290,171:mes"バージョン:" : pos 490,171:mes ver_no pos 290,191:mes"ビルド:" : pos 490,191:mes build_no pos 290,211:mes"著作権所有者:" : pos 490,211:mes "(C) 2011 K5342" pos 290,231:mes"OS:" : pos 490,231:mes ""+os+"\n("+os_1+")" pos 290,271:mes"サポート状況:" : pos 490,271:mes support_now pos 290,291:mes"サポートコード:" : pos 490,291:mes support_code : pos 491,291:mes support_code ; color 255,255,255 pos 290,170:mes"バージョン:" : pos 490,170:mes ver_no pos 290,190:mes"ビルド:" : pos 490,190:mes build_no pos 290,210:mes"著作権所有者:" : pos 490,210:mes "(C) 2011 K5342" pos 290,230:mes"OS:" : pos 490,230:mes ""+os+"\n("+os_1+")" pos 290,270:mes"サポート状況:" : pos 490,270:mes support_now pos 290,290:mes"サポートコード:" : pos 490,290:mes support_code : pos 491,290:mes support_code } ; gmode 3,,,50 pos 201,30:gcopy 2000,0,0,520,490 ; redraw 1 wait 1 loop

Homeボタンを押したとき(mode=0)の時に、ソフト一覧を表示しようと考えています。
で、試みたのですが画面に収まりきらないので、困っている次第であります。

上記のスクリプトを適当にいじくって、教えていただけると嬉しいです。



この記事に返信する


backdrop

リンク

2011/5/22(Sun) 00:01:02|NO.39327

あのさ、普通に考えてリストボックスじゃだめなの?そっちのほうが手っ取り早いしやりやすいはずだよ
選択されたらそのソフトの画像とか情報が表示されるよう考えてみ。



k5342

リンク

2011/5/22(Sun) 18:26:57|NO.39350

>>backdropさん
それ考えたんですが、使い勝手が悪かったのでスクロールバーを設置したいと思ったんですが...
いいほうほうはありますかね...



てれてれ

リンク

2011/5/22(Sun) 19:03:58|NO.39351


// 2005/12/14修正済み (Ver0.96) #module "scrlbar" //----------------------- #uselib "user32" #func GetWindowLongA "GetWindowLongA" int,int #func SetWindowLongA "SetWindowLongA" int,int,int #func ShowScrollBar "ShowScrollBar" int,int,int #func SetScrollInfo "SetScrollInfo" int,int,var,int #func SetScrollPos "SetScrollPos" int,int,int,int #func SetWindowPos "SetWindowPos" int,int,int,int,int,int,int //----------------------- // 水平 垂直スクロールバーを使えるようにする #deffunc ScrollBar oncmd gosub *WMSIZE, 5 oncmd gosub *SCROLL, $114 oncmd gosub *SCROLL, $115 si= 28, 31, 0,0,0,0,0 // SCROLLINFO構造体 wx.ginfo_sel= ginfo_sizex+ginfo_sx-ginfo_winx wy.ginfo_sel= ginfo_sizey+ginfo_sy-ginfo_winy ; WS_VSCROLL|WS_HSCROLL|WS_SIZEBOX GetWindowLongA hwnd,-16 : SetWindowLongA hwnd,-16,stat|$300000 GetWindowLongA hwnd,-16 SetWindowLongA hwnd,-16,stat+0x40000000-0x80000000 SetWindowPos hWnd, 0, 0, 0, 0, 0, $37 ; screen 0, bgscr用 return 1 *WMSIZE //ウィンドウサイズが変更された時の処理 sel=ginfo_sel: gsel ginfo_intid repeat 2 si.3= ginfo(26+cnt), ginfo(12+cnt), ginfo(8+cnt) SetScrollInfo hWnd, cnt, si, 1 loop groll ginfo_vx, ginfo_vy mref bm,67 : bm.20=ginfo_winx, ginfo_winy hHide= wx.ginfo_intid= ginfo_sizex ;gsel selを確実に実行させるため vHide= wy.ginfo_intid= ginfo_sizey wnd=hwnd : gsel sel ;何故かスクロールバーが描画されない環境があるため if hHide=1: ShowScrollBar wnd, 0, 0:else: SetWindowPos Wnd, 0,0,0,0,0,$37 if vHide=1: ShowScrollBar wnd, 1, 0:else: SetWindowPos Wnd, 0,0,0,0,0,$37 return 1 *SCROLL //スクロールバー操作時の処理 sel=ginfo_sel : gsel ginfo_intid m=iparam=$115 : nPos=ginfo(8+(m=1)) Code= wParam &$ffff repeat 1 if Code= 5 : nPos=wParam>>16&$ffff : break ;TB_THUMBTRACK if Code= 0 : nPos-4 : break ;TB_LINEUP if Code= 1 : nPos+4 : break if Code= 2 : nPos-32: break if Code= 3 : nPos+32 loop SetScrollPos hWnd, m, nPos, 1 if m : groll ginfo_vx, nPos :else: groll nPos, ginfo_vy gsel sel : return 1 #global ;----------------------- //StyleAdd ハンドル,スタイル,追加(0)or削除(1) (+2で 拡張ウィンドウスタイル) #uselib "user32.dll" #func global SetLong "SetWindowLongA" int, int, int #cfunc global GetLong "GetWindowLongA" int, int #func SetParent "SetParent" int,int #define global StyleAdd(%1, %2=0, %3=0)ujw=((%3)&2)*-2-16 :\ SetLong %1, ujw, GetLong(%1, ujw)|(%2)^((%3)&1)*(%2) #define 拡張 2 #define 削除 1 ;----------------------- ; softname="SoftNavi" build_no="開発版" ver_no="開発版" support_now="不明 (情報ファイル取得エラー)" os=sysinfo(0) split os,"Windows" if stat-1>=1:os_1="Windows" support_code="SNV-110001" ; split os,"ver",dst,os_no ; buffer 1000 gradf 0,0,200,100,1,$FFFFFF,$BBBBBB ; buffer 1001 gradf 0,0,200,100,1,$FFFFFF,$FFFFFF gradf 0,1,200,98,1,$,$ ; buffer 1002 ; gradf 0,0,750,550,1,$333333,$111111 ; gmode 3,,,70 gcopy 1000,0,0,200,100 ; color 0,0,0 gmode 4,,,256 pos 0,0:gcopy 1001,0,0,200,100 ; buffer 1003 gradf 0,0,200,100,1,$00bfee,$009dee ; buffer 1004 ; gradf 0,0,750,550,1,$333333,$111111 ; gmode 3,,,200 gcopy 1003,0,0,200,100 ; color 0,0,0 gmode 4,,,256 pos 0,0:gcopy 1001,0,0,200,100 ; buffer 2000,1000,1000 color 255,255,255 boxf ; screen 0,750,550 : Hw(0) = hwnd title ""+softname+"" Size = 15*2+13 SOFTLIST = "SOFTWARE(0)" repeat 200,1 SOFTLIST + "\nSOFTWARE("+cnt+")" : size+13 ; sizeはフォントサイズによって調整してください。 loop bgscr 1,520,limit(Size,490,$FFFFFF),2+4,201,30,520,490 : Hw(1) = hwnd gradf 0,0,750,limit(Size,490,$FFFFFF),1,$585858,$404040 ; グラデーションを適当に、 color 255,255,255 : font"MS P GOTHIC",13,16 pos 100,15 : mes SOFTLIST SetParent Hw(1),Hw(0) ScrollBar BM=-1 gsel 0 ; repeat ; redraw 0 ; color 255,255,255 boxf ; gradf 0,0,750,550,1,$333333,$111111 ; if mode!0:gmode 3,,,60:pos 0,30:gcopy 1002,0,0,200,100:else:if mode=0:gmode 3,,,180:pos 0,30:gcopy 1004,0,0,200,100 if mode!1:gmode 3,,,60:pos 0,130-1:gcopy 1002,0,0,200,100:else:if mode=1:gmode 3,,,180:pos 0,130-1:gcopy 1004,0,0,200,100 if mode!2:gmode 3,,,60:pos 0,230-2:gcopy 1002,0,0,200,100:else:if mode=2:gmode 3,,,180:pos 0,230-2:gcopy 1004,0,0,200,100 ; gmode 3,,,180 if mousex<200&mousey<130&mousey>30:pos 0,30:if mode!0:gcopy 1002,0,0,200,100:else:if mode=0:gcopy 1004,0,0,200,100 if mousex<200&mousey<230-1&mousey>130-1:pos 0,130-1:if mode!1:gcopy 1002,0,0,200,100:else:if mode=1:gcopy 1004,0,0,200,100 :if mousex<200&mousey<330-2&mousey>230-2:pos 0,230-2:if mode!2:gcopy 1002,0,0,200,100:else:if mode=2:gcopy 1004,0,0,200,100 ; stick click_01,,1 if mousex<200&mousey<130&mousey>30&click_01=256:mode=0 if mousex<200&mousey<230-1&mousey>130-1&click_01=256:mode=1 if mousex<200&mousey<330-2&mousey>230-2&click_01=256:mode=2 ; font"tahoma",25,16 if os_no="6.1":font"メイリオ",25,0:else:font"tahoma",25,16 color 255,255,255 pos -1000,-1000:mes"Home" pos (200-ginfo_mesx)/2,30+(100-ginfo_mesy)/2:mes"Home" ; pos -1000,-1000:mes"Genre" pos (200-ginfo_mesx)/2,130-1+(100-ginfo_mesy)/2:mes"Genre" ; pos -1000,-1000:mes"About" pos (200-ginfo_mesx)/2,230-2+(100-ginfo_mesy)/2:mes"About" ; ; モードに応じた画面切り替え ; font"tahoma",27,16 color 180,180,180 if BM != mode{ if mode = 0 : gsel 1,1 if mode != 0 : gsel 1,-1 gsel 0 } if mode=0:pos 640,480:mes"Home" if mode=1:pos 640,480:mes"Genre" if mode=2{ color 255,255,255 font"tahoma",30,16 if os_no="6.1":font"メイリオ",30,0:else:font"MS P GOTHIC",30,16 color 20,20,20 pos 270,91:mes softname color 255,255,255 pos 270,90:mes softname ; font"MS P GOTHIC",13,16 if os_no="6.1":font"メイリオ",13,0:else:font"MS P GOTHIC",13,16 color 20,20,20 pos 290,171:mes"バージョン:" : pos 490,171:mes ver_no pos 290,191:mes"ビルド:" : pos 490,191:mes build_no pos 290,211:mes"著作権所有者:" : pos 490,211:mes "(C) 2011 K5342" pos 290,231:mes"OS:" : pos 490,231:mes ""+os+"\n("+os_1+")" pos 290,271:mes"サポート状況:" : pos 490,271:mes support_now pos 290,291:mes"サポートコード:" : pos 490,291:mes support_code : pos 491,291:mes support_code ; color 255,255,255 pos 290,170:mes"バージョン:" : pos 490,170:mes ver_no pos 290,190:mes"ビルド:" : pos 490,190:mes build_no pos 290,210:mes"著作権所有者:" : pos 490,210:mes "(C) 2011 K5342" pos 290,230:mes"OS:" : pos 490,230:mes ""+os+"\n("+os_1+")" pos 290,270:mes"サポート状況:" : pos 490,270:mes support_now pos 290,290:mes"サポートコード:" : pos 490,290:mes support_code : pos 491,290:mes support_code } ; gmode 3,,,50 pos 201,30:gcopy 2000,0,0,520,490 ; redraw 1 wait 1 BM=mode loop
もっと効率的でスマートな方法があると思いますが、
私自身が基本を理解できていませんので、こんなものしかできませんでした。

予めメインのウィンドウとは別のウィンドウを用意しておき、
そのウィンドウにスクロールバーを設置しています。
スクロールバーについては、以下のURLのスクリプトをお借りしました。
http://quasiquote.org/hspwiki/%E3%82%A6%E3%82%A4%E3%83%B3%E3%83%89%E3%82%A6%E3%81%AB%E3%82%B9%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%AB%E3%83%90%E3%83%BC%E3%82%92%E4%BB%98%E3%81%91%E3%82%8B

modeが0になった時に、gsel 1,1でウィンドウを表示し、
modeが0以外となった時には、gsel 1,-1でウィンドウを非表示にしているだけです。



k5342

リンク

2011/5/25(Wed) 20:28:23|NO.39386

>>てれてれさん
なるほど...
ありがとうございます。

ところで、scrollbar という命令がありましたよね...?
アレを使って実現はできないのでしょうか...



k5342

リンク

2011/6/4(Sat) 17:27:46|NO.39537

もう...じぶんで作りました。
ご迷惑おかけしてすいませんでした...



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