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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0613
今北隙間産業ボタンを押すと指定のボタン画像に変わる3解決


今北隙間産業

リンク

2013/6/13(Thu) 21:26:13|NO.54876

ボタンを押すと指定のボタン画像に変わるようなものを作ってます
それぞれの初期のボタン画像はbtn1.jpgです。
ボタンを押すとbtn2.jpgに変わるようなものを作りたいのですが
どうにもうまくいきません

それと、btn2.jpgのときにボタンを押すとbtn1.jpgになり、btn1.jpgのときにボタンを押すと
btn2.jpgになるような感じにしたいんですが
どうすればできるようになりますか?
汚いソースですみません。

ttp://www.dotup.org/uploda/www.dotup.org4269743.jpg.html    ←btn1.jpg
ttp://www.dotup.org/uploda/www.dotup.org4269746.jpg.html ←brn2.jpg


ButtonX = 97 ;ボタンのXサイズ
ButtonY = 31 ;ボタンのYサイズ
buffer 1
picload "btn1.jpg" ;ボタンの画像
buffer 2
picload "btn2.jpg" ;ボタンの画像
screen 0

objsize ButtonX, ButtonY
objimage 1, 0, 0, 0, ButtonY, 0, ButtonY*2
#uselib "user32.dll"
#cfunc WindowFromPoint "WindowFromPoint" int,int

pos 100,100 :button gosub "ボタン1",*@f :aButton = objinfo(stat,2)
pos 200,100 :button gosub "ボタン2",*@f :bButton = objinfo(stat,2)

repeat : await 1

handle=WindowFromPoint(ginfo(0),ginfo(1))
if (aButton = handle or bButton = handle or cButton = handle ){
title "ボタンの上に乗ってます"
}else{
title ""
}
loop

*@
objsize ButtonX, ButtonY
objimage 2, 0, 0, 0, ButtonY, 0, ButtonY*2
celput 2
dialog "押しました!"
return

よろしくお願いします



この記事に返信する


今北隙間産業

リンク

2013/6/13(Thu) 21:27:29|NO.54878

〜追記〜

ボタン画像を配置するposが指定できてないのはわかりますが、
その指定の方法もよくわかりません><



774

リンク

2013/6/14(Fri) 18:12:16|NO.54887

objimage命令自体の機能は
「これから設置するボタンは"ここの画像"を使って表示してね」
といった感じのものですので、今北隙間産業様のスクリプトですと
>>objimage 2, 0, 0, 0, ButtonY, 0, ButtonY*2
の後に該当ボタンを再設置する必要があります。

但しその方法ですと、再設置の際に画面のチラつきが発生すると思いますので
objimage命令の指し示す「ここの画像」自体を描き換える方法をお勧めします。
描き換えただけだと、ボタンが再描画されるまで表示は更新されませんが
一旦フォーカスを外し(当てて)、強制的に再描画させる事で解決できます。

ボタン画像の切り替え状態については、自前で変数管理するしか無い気がします。

原形留めてないソースですが、コメント付きの行が大体上述の部分です。

#module #uselib "user32.dll" #func _ScreenToClient "ScreenToClient" sptr,var #func _GetCursorPos "GetCursorPos" var #defcfunc RectFromCursor int p0, array p1, local a dim a,3 :_GetCursorPos a :_ScreenToClient p0,a :a.2=-1 repeat length2(p1) If(a.0<p1(0,cnt))||(a.1<p1(1,cnt))||(a.0>p1(2,cnt))||(a.1>p1(3,cnt)){}else{a.2=cnt} loop return a.2 #global #const ButtonX 97 #const ButtonY 31 dim nBtn,2 ;カーソル下ボタン保持用 dim rBtn,6,2 ;ボタンの情報配列 [L,T,R,B,id,image] rBtn(0,0)=100, 100, 100+ButtonX-1, 100+ButtonY-1, 0, 0 rBtn(0,1)=200, 100, 200+ButtonX-1, 100+ButtonY-1, 0, 0 ;buffer 1, ButtonX*4, ButtonY*3 ;pos ButtonX*2, 0 :picload "btn1.jpg", 1 ;ボタンの画像 ;pos ButtonX*3, 0 :picload "btn2.jpg", 1 ;ボタンの画像 //ボタン画像作ってるだけです、確認用にscreen化 screen 1,ButtonX*4,ButtonY*3,8 title "btn-buf[ ボタン1 | ボタン2 | 画像1 | 画像2 ]" color :boxf :gradf 1,1,ButtonX-2,ButtonY/2,1,$808080,$303030 i=$1fc01f,$c01f1f repeat 3 gradf 2*ButtonX,(cnt\3)*ButtonY,ButtonX,ButtonY,1,i(0),i(0)>>1&$7f7f7f gradf 3*ButtonX,(cnt\3)*ButtonY,ButtonX,ButtonY,1,i(1),i(1)>>1&$7f7f7f i(0)+=$1f1f1f : i(1)+=$1f1f1f loop gmode 5,ButtonX,ButtonY,256 repeat 6 : pos (cnt/3+2)*ButtonX,(cnt\3)*ButtonY : gcopy 1,0,0 : loop gmode 0,ButtonX,ButtonY*3 ;初期状態のボタン画像をコピー repeat 2 : pos cnt*ButtonX,0 : gcopy 1,ButtonX*2,0 : loop screen 0,320,240 objsize ButtonX, ButtonY objimage 1,0,0,0,ButtonY,0,ButtonY*2 ;ボタン1の参照場所 pos 100,100 : button gosub "ボタン1",*sys_Button : rBtn(4,0)=stat ;判定用にID保持 objimage 1, ButtonX,0,ButtonX,ButtonY,ButtonX,ButtonY*2 ;ボタン2の参照場所≠ボタン1 pos 200,100 : button gosub "ボタン2",*sys_Button : rBtn(4,1)=stat ;判定用にID保持 objimage -1 ;誤作動防止の為 nBtn(0)=-1 repeat : await 1 gsel 0 : nBtn(1)=RectFromCursor(hwnd,rBtn) if(nBtn(0)!=nBtn(1)){ nBtn(0)=nBtn(1) switch nBtn(0) case 0 : title "ボタン1の上" :swbreak case 1 : title "ボタン2の上" :swbreak default : title "" swend } loop *sys_Button switch stat case rBtn(4,0) : rBtn(5,0)^=1 ;bitフラグでボタン1画像切り替え gsel 1 : pos 0, 0 : gcopy 1, (2+rBtn(5,0))*ButtonX, 0 ;画像変更 gsel 0 : title "ボタン1押した" objsel rBtn(4,0)^1 : objsel rBtn(4,0) : swbreak ;瞬間的にフォーカス外し再描画 case rBtn(4,1) : rBtn(5,1)^=1 ;bitフラグでボタン2画像切り替え gsel 1 : pos ButtonX, 0 : gcopy 1, (2+rBtn(5,1))*ButtonX, 0 ;画像変更 gsel 0 : title "ボタン2押した" objsel rBtn(4,1)^1 : objsel rBtn(4,1) : swbreak ;瞬間的にフォーカス外し再描画 swend return
余計なお世話の蛇足ですが、
処理をまたいだ「*@」ラベルは使わない方が良いと思います…



今北隙間産業

リンク

2013/6/14(Fri) 23:09:40|NO.54895

774さん

おー・・・ものすごいソースですねw
HSPはじめて一か月くらいの僕ではまだまだ理解できそうにないですが
774さんのソースを眺めながらがんばって理解していきます!
ありがとうございます!



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