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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0618
かゆぽん。マウスでドラッグしたところを四角く囲む命令4解決


かゆぽん。

リンク

2017/6/18(Sun) 12:35:03|NO.80280

マウスでドラッグしたところを四角く囲む命令を作りたいのですが

//マウスでドラッグ選択したところを四角く囲む命令 onclick gosub *boxjunp stop *boxjunp mouseleftx = mousex mouselefty = mousey box return #deffunc box repeat line mousex, mouselefty, mouseleftx, mouselefty line mousex, mousey line mouseleftx, mousey, mouseleftx, mouselefty line mousex, mousey getkey mouseleft, 1 if mouseleft = 0 :break await 20 loop return
これだと中まで塗られてしまいます
cls命令だと範囲以外も消えてしまいますし
仮想画面からコピーしても内側が白く塗りつぶされてしまいます
どのようにすれば、四角く囲むことができますか?



この記事に返信する


スペース

リンク

2017/6/18(Sun) 12:56:43|NO.80281

>>仮想画面からコピーしても内側が白く塗りつぶされてしまいます
仮想画面には画像か何か書き込んでいるのでしょうか。
書き込んでいるのに白く塗りつぶされるなら、何かしら指定が間違ってるかと。
とりあえず、こんな感じでどうでしょう。

//マウスでドラッグ選択したところを四角く囲む命令 太さ=2;線の太さ onclick gosub *boxjunp stop *boxjunp mouseleftx = mousex mouselefty = mousey box return #deffunc box repeat if mouseleftx<mousex:mx=mousex:mx2=mouseleftx:else:mx2=mousex:mx=mouseleftx;開始地点より右側の時、左側の時で条件分岐 if mouselefty<mousey:my=mousey:my2=mouselefty:else:my2=mousey:my=mouselefty;開始地点より上側の時、下側の時で条件分岐 redraw 0 if cnt!0:color 255,255,255:boxf mx2_bac,my2_bac,mx_bac,my_bac;前の図形を消す。最初は消す必要が無い為if cnt!0としている。 color 0,0,0:boxf mx2,my2,mx,my;黒い図形を描画 color 255,255,255:boxf mx2+太さ,my2+太さ,mx-太さ,my-太さ;中を白くする。gcopy等に変更する事で、中に画像を表示する事も。 redraw 1 getkey mouseleft, 1 if mouseleft = 0 :break mx_bac=mx my_bac=my mx2_bac=mx2 my2_bac=my2 await 16+(cnt\3!0);平均16.6666ms待機(60fps) loop return



かゆぽん。

リンク

2017/6/18(Sun) 13:08:20|NO.80282

回答ありがとうございます
例えば、ソースの一番上にpucloadで画像を読み込むようにしてやると
囲った部分が白く塗りつぶされてしまうということなんですが・・・
すみません、うまくお伝えすることができません



スペース

リンク

2017/6/18(Sun) 13:43:41|NO.80285

bufferに画像等を読み込み、それをgcopyでscreenにコピーしましょう。

//マウスでドラッグ選択したところを四角く囲む命令 Dialog "",16,""; if stat=0:end buffer 1:picload refstr screen 0,ginfo_winx,ginfo_winy gcopy 1,0,0,ginfo_winx,ginfo_winy 太さ=2;線の太さ onclick gosub *boxjunp stop *boxjunp mouseleftx = mousex mouselefty = mousey box return #deffunc box repeat if mouseleftx<mousex:mx=mousex:mx2=mouseleftx:else:mx2=mousex:mx=mouseleftx;開始地点より右側の時、左側の時で条件分岐 if mouselefty<mousey:my=mousey:my2=mouselefty:else:my2=mousey:my=mouselefty;開始地点より上側の時、下側の時で条件分岐 redraw 0 if cnt!0:pos mx2_bac,my2_bac:gcopy 1,mx2_bac,my2_bac,mx_bac-mx2_bac+1,my_bac-my2_bac+1;前の図形を消す。最初は消す必要が無い為if cnt!0としている。 color 0,0,0:boxf mx2,my2,mx,my;黒い図形を描画 pos mx2+太さ,my2+太さ:gcopy 1,mx2+太さ,my2+太さ,(mx-mx2)-(太さ*2)+1,(my-my2)-(太さ*2)+1;中を白くする。gcopy等に変更する事で、中に画像を表示する事も。 redraw 1 getkey mouseleft, 1 if mouseleft = 0 :break mx_bac=mx my_bac=my mx2_bac=mx2 my2_bac=my2 await 16+(cnt\3!0);平均16.6666ms待機(60fps) loop gsel 1:gcopy 0,0,0,ginfo_winx,ginfo_winy;四角も含めた画面をbufferに転送。なくても問題なし gsel 0 return



かゆぽん。

リンク

2017/6/18(Sun) 13:47:30|NO.80286

メモリ間のコピーはモード1を使うんですね
透過という文字に目が行って4ばっかり使おうとしてました
ありがとうございました



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