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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0622
koyaスタートボタンのようなものを作りたいのですが6解決


koya

リンク

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



この記事に返信する


test

リンク

2013/6/22(Sat) 19:44:51|NO.55160

そのスクリプトをコピー・ペーストして実行しても、背景やボタンの画像が読み込めずエラーになるので簡単に実行できず検証しにくいので、回答がつきにくくなります。
picloadの代わりにboxfで塗りつぶすとかしておいて、そのまま実行できるようにしたほうがいいかと思います。

また、ポップアップとかメニューとかが、具体的にどんなものを作りたいのかよくわかりません。具体的にどうしたいのかを書くと求める回答が来ると思います。
例えばスタートボタンのポップアップメニューを描画命令を使って自分で描くなら、ポップアップを消したときに背景を戻すには背景をもう一度塗り直す必要があります。子ウィンドウを使うなど高度な方法もありますが。
よく右クリックすると出るようなポップアップメニューがいいなら、http://lhsp.s206.xrea.com/ というサイトに詳しく載っています。

いずれにせよ、もっと詳しく質問しましょう。



koya

リンク

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ディスクトップの左下にあるスタートボタンみたいなものです。
ボタンを押すとメニューが出てきて、もう一度押すと、メニューが消えるようにしたいです。



test

リンク

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
これだと開いたり閉じたりしたときに描画しなおしたりしないといけないのでやや面倒です。子ウィンドウを使う少し高度な方法をとると多少緩和されます。



FunnyMaker

リンク

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



FunnyMaker

リンク

2013/6/23(Sun) 15:39:15|NO.55183

誤字失礼しました。
一文字目
「個」

ではなく、

「子」

です。

すみません。



koya

リンク

2013/6/23(Sun) 15:49:17|NO.55184

ありがとうございました.



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