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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0712
メヌャマウス座標取得5解決


メヌャ

リンク

2010/7/12(Mon) 23:08:27|NO.33639

HSPのmouseXとmouseYは、ウィンドウ上にマウスカーソルが乗っていないと座標を取得しないので、
ウィンドウ上にカーソルがなくても正確なマウス座標を取得する方法を考えていました。
下記の処理において、MXとmouseX、MYとmouseYの値が同じになれば良いのですが、
私の環境だとなぜか値が3だけずれてしまいます。
計算方法が悪いのか、それともかならず3ずれてしまうのか、
どなたかご教授いただけないでしょうか。

;メインループ repeat ;画面上のマウス座標 - ウィンドウの左上座標 - ( ウィンドウサイズ - クライアントエリアサイズ ) MX = ginfo( 0 ) - ginfo( 4 ) - ( ginfo( 10 ) - ginfo( 12 ) ) MY = ginfo( 1 ) - ginfo( 5 ) - ( ginfo( 11 ) - ginfo( 13 ) ) mes "MX=" + MX mes "MY=" + MY mes "mouseX=" + mouseX mes "mouseY=" + mouseY gosub *その他の処理 loop *その他の処理 redraw 1 redraw 0 color 255,255,255 boxf color 0,0,0 pos 0,0 await 1 return



この記事に返信する


あまま

リンク

2010/7/12(Mon) 23:20:09|NO.33640

MX = ginfo( 0 ) - ginfo( 4 ) - ( ginfo( 10 ) - ginfo( 12 ) )
この式だとウィンドウの枠が左右両方はいってしまっているので
3ドットのずれはそのためだと思います

MX = ginfo( 0 ) - ginfo( 4 ) - ( ginfo( 10 ) - ginfo( 12 ) ) / 2
このように片方だけ引くことで同じ値になるはずです。

Yの方はタイトルバーの高さを取得する必要があるので
APIなど使ったほうがいいかもしれません。



msclover作者

リンク

2010/7/12(Mon) 23:52:18|NO.33642

Y方向についてもAPIを使わずとも取得可能です。
Y方向については、
  フレーム高
  キャプション高
  クライアントエリア高
  フレーム高
が関係してきます。
フレームはX方向と同じ値です。なので、
  ウィンドウ高=キャプション高+クライアントエリア高+フレーム高*2
の式を変形すれば、キャプション高さは求められます。

簡単な算数ですね。
授業で覚えたことをプログラミングで応用できるとプログラミングも授業も楽しくなります。



あまま

リンク

2010/7/12(Mon) 23:53:28|NO.33643

msclover作者さん
訂正ありがとうございます。



GENKI

リンク

2010/7/13(Tue) 00:27:26|NO.33644

もう解決してるようですが、一応APIを使った方法も紹介しておきます。

過去ログより。
http://hsp.tv/play/pforum.php?mode=pastwch&num=4682
質問内容は微妙に違いますが、ScreenToClient APIを使った方法で解決できます。
また、あくまで特殊な例ですが、HSPTVブラウザのようなウィンドウでも問題なく動くはずです。

でもginfoの方が理解しやすくてお勧めです。



メヌャ

リンク

2010/7/13(Tue) 10:44:55|NO.33647

>ウィンドウの枠が左右両方はいってしまっている
盲点! それ盲点ですよ!!
こういうのって図にしたら一発でわかるのに、計算だと抜けてしまいがちです…

>ウィンドウ高=キャプション高+クライアントエリア高+フレーム高*2の式を変形
つまり、こういうことですね。

;フレームとタイトルバーのサイズを計算 Frame = ( ginfo( 10 ) - ginfo( 12 ) )/2 TitleBar = ( ginfo( 11 ) - ginfo( 13 ) ) - Frame * 2 ;メインループ repeat ;画面上のマウス座標 - ウィンドウの左上座標 - ( ウィンドウサイズ - クライアントエリアサイズ ) MX = ginfo( 0 ) - ginfo( 4 ) - Frame MY = ginfo( 1 ) - ginfo( 5 ) - TitleBar - Frame mes "MX=" + MX mes "MY=" + MY mes "mouseX=" + mouseX mes "mouseY=" + mouseY gosub *その他の処理 loop *その他の処理 redraw 1 redraw 0 color 255,255,255 boxf color 0,0,0 pos 0,0 await 1 return
みなさん 本当にありがとうございました♪



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