|
|
2015/8/12(Wed) 21:26:54|NO.70673
2.61のクックブックの中のマップエディターで
MAPを埋めるウィンドゥと
チップを選択するウィンドゥで
マウス操作を切り替えてて
そのスクリプトを3.xに移植しようとしてるんですが上手く出来ません
サンプルにそれの3.x版があるんですが
マウスで操作するウィンドゥは一つしかなくて
ということで
複数のウィンドゥをマウスで操作出来ますか?
という質問です
|
|
2015/8/13(Thu) 01:22:46|NO.70682
oncmdとか使わないで簡単に済ますならこんな感じ
repeat 480/16
gradf 0,cnt*16,640,16,0,$ff<<cnt,$ff000000>>cnt
loop
screen 1,640,480,,ginfo_wx2,ginfo_wy1
gsel 0,1
repeat
repeat 2//使用してるのがID0とID1として
gsel cnt
if (ginfo_mx>ginfo_wx1) and (ginfo_mx<ginfo_wx2) and (ginfo_my>ginfo_wy1) and (ginfo_my<ginfo_wy2) {//マウスカーソルがある方のウィンドウを操作先にしたまま抜ける
break
}
loop
getkey mlc,1
if mlc {
if ginfo_sel=0 {
pget mousex,mousey
r=ginfo_r:g=ginfo_g:b=ginfo_b
}else{
color r,g,b
gradf mousex-8,mousey-8,16,16
}
}
await 16
loop
左のウィンドウで左クリックすると色を拾って
右のウィンドウで左クリックすると拾った色で四角を描画
|
|
2015/8/13(Thu) 08:19:31|NO.70683
サンプルスクリプトありがとうございます
実現出来るけどサンプルにふさわしいほど簡単には出来ない
みたくは思ったんですよね(APIとか使って)
|
|
2015/8/13(Thu) 08:50:56|NO.70685
ウィンドゥが重なっててもちゃんと動くのか少し不安になったんで
試してみたら
ウィンドゥが重なってると
>拾った色で四角を描画
が機能しないみたいです
|
|
2015/8/13(Thu) 15:13:40|NO.70696
重なってるかどうかの検出も簡単
breakせずにマウスカーソルの下にあるウィンドウを数えれば良い
repeat 480/16
gradf 0,cnt*16,640,16,0,$ff<<cnt,$ff000000>>cnt
loop
screen 1,640,480,,ginfo_wx2,ginfo_wy1
gsel 0,1
repeat
wincnt=0 //マウスカーソルの下にあるHSPウィンドウの数
repeat 2 //連続したIDでクリックした時にアクティブになるウィンドウを操作先にするだけなら3つ以上も可
gsel cnt
if (ginfo_mx>ginfo_wx1) and (ginfo_mx<ginfo_wx2) and (ginfo_my>ginfo_wy1) and (ginfo_my<ginfo_wy2) {//操作先ウィンドウ上にマウスカーソルがある
winsel = cnt //cntをウィンドウIDとして保持
wincnt++
}
loop
if wincnt {//どちらかのウィンドウにマウスカーソルがある
if wincnt>1 {//重なってる領域にマウスカーソルがある
if ginfo_act>=0 {gsel ginfo_act}//アクティブ(通常上にあるウィンドウ)なウィンドウを操作先にする
}else{//重なってないウィンドウ内にマウスカーソルがある
gsel winsel //wincntが1なのでwinselに入ってるIDを捜査先にする
}
getkey mlc,1
if mlc {
switch ginfo_sel
case 0
pget mousex,mousey
r=ginfo_r:g=ginfo_g:b=ginfo_b
swbreak
case 1
color r,g,b
gradf mousex-8,mousey-8,16,16
swbreak
default
swbreak
swend
}
title ""+mousex+" "+mousey
}
await 16
loop
|
|
2015/8/13(Thu) 16:04:48|NO.70698
onclickとoncmdを使った方法
これだと複数重なっててもマウスカーソル下のウィンドウを操作先に出来る
repeat 480/16
gradf 0,cnt*16,640,16,0,$ff<<cnt,$ff000000>>cnt
loop
onclick gosub *_click
oncmd gosub *_MOUSEMOVE,$200 //WM_MOUSEMOVE
screen 1,640,480,,ginfo_wx2,ginfo_wy1
gsel 1,1 //確実にウィンドウをアクティブにしないと前のウィンドウにoncmd命令が使われてしまうようなので
oncmd gosub *_MOUSEMOVE,$200
screen 2,128,128
gsel 2,1
oncmd gosub *_MOUSEMOVE,$200
gsel 2,2
gsel 0,1
stop
*_CLICK
if ginfo_act ! ginfo_sel {gsel ginfo_act}//HSPウィンドウ内でクリックされた時に操作先が別IDだったらアクティブなウィンドウを操作先にする
gosub *draw
return
*_MOUSEMOVE
gsel ginfo_intid
gosub *draw
return
*draw
getkey mlc,1
if mlc {
switch ginfo_sel
case 0
pget mousex,mousey
r=ginfo_r:g=ginfo_g:b=ginfo_b
swbreak
case 1
color r,g,b
gradf mousex-8,mousey-8,16,16
swbreak
case 2
color r,g,b
gradf mousex-8,mousey-8,16,16
swbreak
default
swbreak
swend
}
title ""+mousex+" "+mousey
return
|
|
2015/8/13(Thu) 16:50:27|NO.70701
更にサンプルスクリプトありがとうございます
なんか難しそうなサンプルスクリプト提示されて
理解するの大変そうだなーって思ってた状況が自分にw
(ちょっとふざけ気味ですいません)
>//連続したIDでクリックした時にアクティブになるウィンドウを操作先にするだけなら3つ以上も可
クックブックのエディタはマウス操作可2つとボタンとか操作するウィンドゥがあるので
ウィンドゥ3つとして計算した方がいいですか?
操作可2つ+メモ帳でも試しましたが
大丈夫そうなので 対象はアプリ内で使用するウィンドゥのみですか?
このTOOLを二つ起動して試してみましたが
アプリ内2つとか3つとかぽいですね
アレ呼んだりコレ呼んだり大変そうなので
>NO.70696 を
使おうかな?と思ってますが
他に不具合の出そうな状況はありますか?
|
|
2015/8/13(Thu) 19:02:33|NO.70706
>他に不具合の出そうな状況はありますか?
エディタの作りでどうにでもなるので分からない
|
|
2015/8/14(Fri) 20:32:18|NO.70750
テスかきこ
|
|