|
|
2013/6/22(Sat) 19:13:36|NO.55159
hspでスタートメニューのようなものを作っているのですが、
スタートメニューのポップアップ?のようなものの作り方がよくわかりません
それと背景を消さないでメニューを作りたいです。
知っている方がいましたら教えてください。
↓ここまでできました
picload "背景"
buffer 4 ;ウィンドウID 1番
picload "ボタン画像" ;画像ファイル読み込み
gmode 4, 40, 54 ;コピー 104x70
gsel 0
objsize 40, 54
objimage 4, , , 40, , 54 * 3
; 配置
pos 50,40
button gosub "", *push
stop
*push
mes "osimasita"//ここにスタートボタンのポップアップを出したい
return
|
|
2013/6/22(Sat) 19:44:51|NO.55160
そのスクリプトをコピー・ペーストして実行しても、背景やボタンの画像が読み込めずエラーになるので簡単に実行できず検証しにくいので、回答がつきにくくなります。
picloadの代わりにboxfで塗りつぶすとかしておいて、そのまま実行できるようにしたほうがいいかと思います。
また、ポップアップとかメニューとかが、具体的にどんなものを作りたいのかよくわかりません。具体的にどうしたいのかを書くと求める回答が来ると思います。
例えばスタートボタンのポップアップメニューを描画命令を使って自分で描くなら、ポップアップを消したときに背景を戻すには背景をもう一度塗り直す必要があります。子ウィンドウを使うなど高度な方法もありますが。
よく右クリックすると出るようなポップアップメニューがいいなら、 http://lhsp.s206.xrea.com/ というサイトに詳しく載っています。
いずれにせよ、もっと詳しく質問しましょう。
|
|
2013/6/23(Sun) 10:02:53|NO.55175
遅れてすいません。
スクリプト書き直したのがこれです。↓
tvfolder@ = dir_exe+"\\hsptv\\"
picload tvfolder+"sozai4.jpg"
buffer 4 ;ウィンドウID 1番
picload tvfolder@+"bgtex.bmp" ;画像ファイル読み込み
gmode 4, 40, 54 ;コピー 104x70
gsel 0
objsize 40, 54
objimage 4, , , 40, , 54 * 3
; 配置
pos 50,40
button gosub "", *push
stop
*push
mes "osimasita"//ここにスタートボタンのポップアップを出したい
return
作りたいものというのは、Windowsディスクトップの左下にあるスタートボタンみたいなものです。
ボタンを押すとメニューが出てきて、もう一度押すと、メニューが消えるようにしたいです。
|
|
2013/6/23(Sun) 13:36:34|NO.55178
メニューの具体的な実現方法は特に考えていないということですね。方法をいくつか紹介します。
デザインにこだわらないなら右クリックで出るようなポップアップメニューが手軽ですが、これはスタートボタン以外のところをクリックしても消えるという問題があります。
他には、次のようにboxfなどを使ってメニューを描画する方法があります。 open_flag=0
tvfolder@ = dir_exe+"\\hsptv\\"
buffer 1 //背景はバッファに読み込んでおく
picload tvfolder+"sozai4.jpg"
screen_width=ginfo(12):screen_height=ginfo(13) //ウィンドウの大きさを決める
screen 0,screen_width,screen_height
pos 0,0
gcopy 1,0,0,screen_width,screen_height
buffer 4 ;ウィンドウID 1番
picload tvfolder@+"bgtex.bmp" ;画像ファイル読み込み
gmode 4, 40, 54 ;コピー 104x70
gsel 0
objsize 40, 54
objimage 4, , , 40, , 54 * 3
; 配置
pos 50,40
button gosub "", *push
stop
*push
if open_flag=0{
//まだ開いていないので開く
color 224,224,224
boxf 50,94,200,200
color
pos 60,100
mes "メニュー"
open_flag=1
}else{
//すでに開いているので閉じる
pos 0,0
gcopy 1,0,0,screen_width,screen_height
open_flag=0
}
return これだと開いたり閉じたりしたときに描画しなおしたりしないといけないのでやや面倒です。子ウィンドウを使う少し高度な方法をとると多少緩和されます。
|
|
2013/6/23(Sun) 15:38:26|NO.55182
個ウィンドウを使うやりかたの例です。
WinAPIを、意識的に新たに、一つ使うことになります。
APIを使ったことがあればいいのですが、ない場合は、必要に応じて軽く勉強してください。
(基本これをパクればいい)
APIには他にもいろいろ便利なものがあるので、頭の片隅に置いておくと便利です。
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/▽追加コード▽_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;< 各種WinAPI使用準備 >
#uselib "user32.dll"
#func SetParent "SetParent" int,int
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/△追加コード△_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/▽あなたのコード▽_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
hwnd_window(0) = hwnd ;0番ウィンドウのウィンドウハンドルを取得
tvfolder@ = dir_exe+"\\hsptv\\"
picload tvfolder+"sozai4.jpg"
buffer 4 ;ウィンドウID 1番
picload tvfolder@+"bgtex.bmp" ;画像ファイル読み込み
gmode 4, 40, 54 ;コピー 104x70
gsel 0
objsize 40, 54
objimage 4, , , 40, , 54 * 3
; 配置
pos 50,40
button gosub "", *push
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/△あなたのコード△_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/▽追加コード▽_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
; < 状況フラグの設定 >
flg_IsMenuOpen = 0 ;メニューの開閉状態フラグ。(0,1) = (閉,開)
; < 各種データの設定 >
; この辺の数は好きなように決めればいい。
num_item = 5 ;項目の数
height_item = 30 ;項目一つ当たりの高さ
width_item = 150 ;〃 幅
tag_item(0) = "メモ帳","ペイント","コンソール","電卓","エクスプローラ" ;項目名リスト
; < メニュー用のウィンドウを作成 >
; < ボタンの背景画像用 >
buffer 2,width_item*3,height_item*num_item,0
color 235,235,235 : boxf 0,0,width_item,height_item*num_item ;ボタン通常時
color 50,50,255 : boxf width_item,0,width_item*2,height_item*num_item ;押し下げ時
color 100,100,255 : boxf width_item*2,0,width_item*3,height_item*num_item ;マウスオーバー時
font msgothic,20,1+16
color 0,0,0
;(項目名の描画)
repeat 3 ;横に3回
cnt1 = cnt ;第一階層ループのカウンタを記憶
repeat num_item ;縦にアイテムの個数回
pos width_item*cnt1,height_item*cnt+5 : mes tag_item(cnt)
loop
loop
;< ボタン用ウィンドウ >
bgscr 1,width_item+4,height_item*num_item+4,2 ;※「2」は非表示オプション
hwnd_window(1) = hwnd ;1番ウィンドウのウィンドウハンドルを取得
SetParent hwnd_window(1),hwnd_window(0) ;1番を0番の子にする(こうすることでメニュー用ウィンドウが0番ウィンドウ(=親)より常に上になり、親ウィンドウとの相対座標が一定になる(=マウスで動かされてもへっちゃら。))
width , ,50,40+54 ;メニューの位置を決める(※原点は親ウィンドウの(0,0))
color 50,50,50 : boxf ;ボタンの周りの太枠を描く
objsize width_item,height_item
repeat num_item
objimage 2,0,height_item*cnt , width_item,height_item*cnt , width_item*2,height_item*cnt
pos 2,height_item*cnt+2 : button gosub "",*click ;どのボタンを押しても*clickへ飛ぶ。飛んだ先でアクションを決断する。
ObjID_button_menu(cnt) = stat ;各メニューのボタンのオブジェクトIDを控える。(これがジャンプ先で役に立つ)
loop
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/△追加コード△_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
stop
*push
;mes "osimasita"//ここにスタートボタンのポップアップを出したい
if flg_IsMenuOpen = 0 { ;まだ開かれていないなら
gsel 1,1 ;開く
flg_IsMenuOpen = 1 ;フラグセット
} else { ;既に開かれているなら
gsel 1,-1 ;閉じる
flg_IsMenuOpen = 0 ;フラグセット
}
return
*click ;アクション
ObjID_button_pushed = stat ;押されたボタンのオブジェクトIDを取得
repeat num_item ;どのボタンが押されたのか調べる
if ObjID_button_pushed = ObjId_button_menu(cnt) : ID_item_pushed = cnt ;押された項目の番号(0,1,2,…)を取得
loop
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/▽お好きに▽_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
gsel 1,-1 ;メニューを閉じる
flg_IsMenuOpen = 0 ;フラグセット
wait 1 ;ウィンドウの描画が実画面に反映されるまでの待ちを入れる。
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/△お好きに△_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;(アクションの場合分け)
repeat 1 ;若干の高速化のための悪あがき (※やらなくても全然OK)
if ID_item_pushed = 0 : exec "notepad" : break
if ID_item_pushed = 1 : exec "mspaint" : break
if ID_item_pushed = 2 : exec "cmd" : break
if ID_item_pushed = 3 : exec "calc" : break
if ID_item_pushed = 4 : exec "explorer" : break
loop
| |
|
2013/6/23(Sun) 15:39:15|NO.55183
誤字失礼しました。
一文字目
「個」
ではなく、
「子」
です。
すみません。
|
|
2013/6/23(Sun) 15:49:17|NO.55184
ありがとうございました.
|
|