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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0919
taraマウスオーバー時に文字の色を変えたい10解決


tara

リンク

2008/9/19(Fri) 17:23:33|NO.19578

連日のスレ立てご容赦下さい。
諸氏に頂きましたアドバイスによりプログラムが進んで参りました。

今回お伺いしたいのは、マウスオーバー時に文字の色を変えるという処理についてです。
 
文字列をクリックするとラベルに飛ぶif文がありまして、
クリックする前、つまり文字列にマウスが重なった時(選択状態時)に
文字列の色を変えたいと思っています。



//--------------------------------------- *test a_px = 280 a_py = 350 pos a_px, a_py font "HG正楷書体-PRO",40,21 color 255, 255, 255 mes "test"     a_hx = ginfo(14)/2 //描画した文字の範囲の半分 a_hy = ginfo(15)/2 //描画した文字の範囲の半分 a_cx = a_px + a_hx //xの文字範囲の中心 a_cy = a_py + a_hy //yの文字範囲の中心 //-------中略------------------------------------------------------ *@    await 10 getkey moupos, 1     /*マウスの座標から文字列の中心座標を引いて、 ±に関わらず範囲内かを判定*/ if abs(mousex - a_cx) < a_hx && abs(mousey - a_cy) < a_hy{ //マウスオーバー時に色を変える pos 280, 350 color 0, 168, 0 mes "test" if moupos = 1{ goto *test2 } //---------後略---------------------------------------------

今は大体この様な感じなのですが、
//マウスオーバー時に色を変える
の箇所で、現段階では色が変わったままになりますので、
マウスが範囲外に出た時にまた白に戻したいのです。

if文をネストして範囲外に出たら色を変えてmes "test"という処理も書いてみましたが
上手くいきません。

そもそもの考え方が間違っているのか、これをベースに上手い方法があるのか、
ご教授頂けないでしょうか。



この記事に返信する


かっぺい

リンク

2008/9/19(Fri) 17:38:54|NO.19579

とても簡単なのですがインクルードしないならこんな感じでしょうか。

x=0 y=255 *mainloop redraw 0 color 255,255,255 boxf pos 0,0 if mousex>0 : if mousex<50 : if mousey>0 : if mousey<20 : x=255 : y=0 : else : x=0 : y=255 color x,y,0 mes "テスト" stick key if key&256 : if mousex>0 : if mousex<50 : if mousey>0 : if mousey<20 : goto *label await 16 redraw 1 goto *mainloop *label cls
(taraさんの思っているものと違っていたらごめんなさい。)



tara

リンク

2008/9/19(Fri) 17:46:14|NO.19580

>>かっぺい氏

ありがとうございます!
当にこれです!
判り易い解説ほんと感謝です。

もっと頭を柔らかく・・・(笑)
精進します(汗)

では解決とさせて頂きますね。
どうもありがとうございました!



あり

リンク

2008/9/19(Fri) 19:58:39|NO.19584

解決はされてますが、こういった方法もあるという余計なサンプル(汗)

; 色を使った判定方法(クリッカブルマップ?) screen 0,320,240,0:cls 1 px=113 ;文字x座標(変更可) py=105 ;文字Y座標(変更可) r=0 :g=0 :b=0 ;文字色 pmes="テスト" ;表示文字列(変更可) font msgothic,30,1 color 0,255,255 pos px,py :mes pmes mx=ginfo_mesx ;文字表示サイズ取得 my=ginfo_mesy ; buffer 1,320,240,0:cls 4 ;判定用バッファ作成(screen1と同じサイズ) color 255,0,0 ;カーソル判定領域色(この色(赤成分)で判定) boxf px,py,px+mx,py+my ;判定領域描画(文字表示サイズ) *main redraw 0 cx=mousex ;マウスx座標取得 cy=mousey ;マウスy座標取得 gsel 1 pget cx,cy ;マウス座標の色を取得 cc=ginfo_r ; if cc=255 :r=255 :ef=1 :else :r=0 :ef=0 ;領域判定 gsel 0 color r,g,b pos px,py :mes pmes title "マウス座標 X="+cx+" Y="+cy redraw 1 stick key if key&256 :if ef=1 :end ;左クリックで終了 wait 10 goto *main
この方法はバッファを一枚余分に使ってしまいますが
ルーチンさえ組んでしまえば、判定はとてもシンプルに出来ますし
座標でなく色で判定するので四角以外の形でも判定が容易にできると言うメリットもあります。

まぁ、文字選択に使うには回りくどいとは思いますが(汗)
ゲームのマップ選択など、応用方は他にも色々考えられると思います。



レノス

リンク

2008/9/19(Fri) 20:38:07|NO.19585

実行できないサンプルを乗せるのはやめた方がいいです。
前スレでもそのことでかなりややこしくなりましたし。



tara

リンク

2008/9/19(Fri) 21:31:10|NO.19588

>>あり氏
余計だなんてとんでもない!
非常に非常にありがたいです。
こういったアプローチもあるのだと勉強になります。
また仰って頂いているように色々な用途に使えそうです!
ありがとうございます。


>>レノス氏
申し訳ないです。
できるだけ削ったほうが見やすいかと思いまして(汗)
次回何かお伺いする場合は実行できる状態でソースを書かせて頂きます。
ご指摘ありがとうございました。



あり

リンク

2008/9/19(Fri) 22:15:33|NO.19589

レノスさん>>
>実行できないサンプルを乗せるのはやめた方がいいです。
>前スレでもそのことでかなりややこしくなりましたし。
レスの場所からすると私のサンプルに対しての発言なのでしょうか?
自分の環境でかなり検証してから投稿したつもりなのですが、動きませんでしたか?(汗)

自分の環境では問題なく動いているので、エラーになるのなら
エラー番号と行数を教えて貰えますでしょうか?
見直してみますので・・・。



tara

リンク

2008/9/19(Fri) 22:32:40|NO.19590

>>あり氏
レノス氏のレスは私へのご指摘だと思います。
あり氏に頂いたサンプルは間違いなく動作しますし、
前スレは「stick命令について」のスレのことを仰っていられるのだと思います。
ご迷惑をお掛けしてすいません。



レノス

リンク

2008/9/19(Fri) 23:09:45|NO.19591

> あり さん
紛らわしくてすいません。
スレ主に対する発言です。

# アンカーは大切だ (^^;)



あり

リンク

2008/9/19(Fri) 23:40:24|NO.19593

>>レノスさん
>>taraさん
こちらこそ勝手に誤解をしてしまい
余計なお手間を取らせてしまいました、申し訳御座いません。m(__)m
正常に動いてくれているのなら一安心です(汗)



tara

リンク

2008/9/19(Fri) 23:46:29|NO.19594

>>あり氏
ご丁寧にありがとうございます。
とても参考になるサンプル感謝してます。

HSPを始めて数日なもので色々と皆さんにご迷惑をお掛けしてます(汗)
あ、言い訳とかじゃないのでもしそう見えた人がいたらすいません。
ここで書くようなことじゃないとは思いますが、
ここはとても親切、丁寧に教えて下さる方が多くいらっしゃるので
ついつい甘えてしまっています。
早く上達できるように努力します。



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