|
 |
|
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)の時に、ソフト一覧を表示しようと考えています。
で、試みたのですが画面に収まりきらないので、困っている次第であります。
上記のスクリプトを適当にいじくって、教えていただけると嬉しいです。

| |
|
2011/5/22(Sun) 00:01:02|NO.39327
あのさ、普通に考えてリストボックスじゃだめなの?そっちのほうが手っ取り早いしやりやすいはずだよ
選択されたらそのソフトの画像とか情報が表示されるよう考えてみ。
|
|
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でウィンドウを非表示にしているだけです。

| |
|
2011/5/25(Wed) 20:28:23|NO.39386
>>てれてれさん
なるほど...
ありがとうございます。
ところで、scrollbar という命令がありましたよね...?
アレを使って実現はできないのでしょうか...
|
|
2011/6/4(Sat) 17:27:46|NO.39537
もう...じぶんで作りました。
ご迷惑おかけしてすいませんでした...
|
|