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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0604
hsp2年生タイトルバー上でマウスクリック9解決


hsp2年生

リンク

2007/6/4(Mon) 15:33:52|NO.8754

↓スクリプトでタイトルバー上でマウスクリックした時とウインドウ上でクリックした時の
動作が違うのはなぜですか?
またタイトルバーのクリックを受け付けないようにするにはどうすればよいですか?


repeat await 1 stick key if key&256 :title ""+cnt loop



この記事に返信する


KENTA

リンク

2007/6/4(Mon) 19:27:51|NO.8759

>またタイトルバーのクリックを受け付けないようにするにはどうすればよいですか?
タイトルバーの位置を取得して
マウスがその上に来たら、
EnableWindowを使ってクリック不可にすればいいのでは・・・。
(しかし、キーボードの入力も不可になる)



eller

リンク

2007/6/4(Mon) 21:15:08|NO.8762

hsp2年生さん、こんばんは。
動作が違う理由は自信がありませんので他の方にお任せするとして、タイトルバークリックを受け付けない方法について返信いたします。

実現方法は私の知る限りでも
1.ginfoを使ってマウスの位置がクライアント領域内にあるかどうか調べる
2.onclick命令による割り込みを使う
3.oncmd命令による割り込みを使う
等が考えられます。
Let's HSP!さんにoncmdを使ったサンプルがありますので、見てみてはいかがでしょうか。



hsp2年生

リンク

2007/6/5(Tue) 13:00:23|NO.8773

KENTAさん、ellerさん回答ありがとうございます。

マウスボタンを押した瞬間あるいはドラッグの状態を取得したいのです。on系のコマンドでは
ボタンを放した時に取得するので使えないかなと思っています。onclickだとタイトルバーで
反応しないので良いのですが・・・

要するにやりたいことはループの中でマウスをドラッグして範囲を決めたいのです。
この時タイトルバーをクリックするとドラッグの最初の始点と認識してしまうことがたまに
ある(クライアント領域と動作が違う)のを避けたいのです。



KIMU

リンク

2007/6/5(Tue) 19:29:38|NO.8776

色々方法は有るけど、割り込みジャンプ系を使ってもいいなら
こんな感じ


#define linebox(%1,%2,%3,%4) repeat 4:line (%1)+((%3)*((cnt+1)\4>1)),(%2)+(%4)*(cnt>1),(%1)+(%3)*(cnt<2),(%2)+((%4)*((cnt+1)\4>1)):loop oncmd gosub *mouse_click, $201 ;マウス左 oncmd gosub *mouse_click, $204 ;マウス右 oncmd gosub *mouse_click, $207 ;マウス中 repeat redraw 0:color 255,255,255:boxf:color pos 0,0 mes "MX("+mx+")"+" SIZEX("+sizx+")" mes "MY("+my+")"+" SIZEY("+sizy+")" if on_mousel{ if mlc{ sizx=mousex-mx sizy=mousey-my }else{ on_mousel=0 } } if sizx or sizy {linebox mx,my,sizx,sizy} redraw 1 :await 10 :getkey mlc,1 loop *mouse_click mx=mousex my=mousey on_mousel=wparam&1 ;マウス左 on_mouser=(wparam&2)>0 ;マウス右 on_mousec=(wparam&16)>0 ;マウス中 on_shift=(wparam&4)>0 ;シフトも押されてる on_ctrl=(wparam&8)>0 ;コントロールも押されてる return
ループ速度を一定に保つのが重要なゲームとかじゃこの方はあまり良くないけど・・・
(awitの代わりにAPIのsleepとawit 0で待てば良いかな)


割り込みジャンプ系を使いたくないなら

#define linebox(%1,%2,%3,%4) repeat 4:line (%1)+((%3)*((cnt+1)\4>1)),(%2)+(%4)*(cnt>1),(%1)+(%3)*(cnt<2),(%2)+((%4)*((cnt+1)\4>1)):loop w=(ginfo(10)-ginfo(12))/2 ;枠の幅 t=ginfo(11)-ginfo(13)-w ;タイトルの高さ repeat stick k,$fff tmpmx=ginfo(0)-ginfo(4)-w tmpmy=ginfo(1)-ginfo(5)-t if tmpmx>=0 and tmpmy>=0 and tmpmx<=ginfo(12) and tmpmy<=ginfo(13) { if ((k&256)>0) { if kon=0 {smx=tmpmx:smy=tmpmy:kon=1} emx=tmpmx emy=tmpmy }else{ kon=0 } } linebox smx,smy,emx-smx,emy-smy title str(smx)+" "+smy+" "+emx+" "+emy+" "+kon await 10 loop



eller

リンク

2007/6/5(Tue) 20:11:35|NO.8782

KIMUさんの2例目がginfoでクライアント領域内に収まっているかどうかを確認する方法ですね。
lineboxマクロが面白いです。

さてもう充分な気もしますが、一応投稿しておきます。
割り込みを使わない方法のひとつとしてgetkeyを使う方法です。

*main getkey LeftClick, 1 if LeftClick { if LeftClickPrev { // 前回も今回もクリックされていた // → ドラッグ中 line mousex, mousey } else { // 前回はクリックされていなかったが今回クリックされている // → ドラッグの開始(始点を取得するならここ) pos mousex, mousey } } else { if LeftClickPrev { // 前回クリックされていたが今回クリックされていない // → ドラッグの終了(終点を取得するならここ) hsvcolor rnd(192), 255, 255 } else { // 前回も今回もクリックされていない // → ドラッグ中ではない } } LeftClickPrev = LeftClick wait 1 goto *main
stickのように「クリックした瞬間」を調べることはできないのでひと手間かかりますが、今回はそれが逆にメリットになりました。



hsp2年生

リンク

2007/6/6(Wed) 12:19:57|NO.8812

KIMUさんellerさんありがとうございます。

タイトルバーのクリックを回避する手段は分かりました。

>クライアント領域と動作が違う
タイトルバー上ではHSPの処理内容が違う?
本来タイトルバーのクリックを受け付ける必要無いのでは?

議題に関係ないですがKIMUさんの
on_mouser=(wparam&2)>0 ;マウス右
on_mousec=(wparam&16)>0 ;マウス中
on_shift=(wparam&4)>0 ;シフトも押されてる
on_ctrl=(wparam&8)>0 ;コントロールも押されてる
これはループの中で使われていないですが何故効果が現われる(右クリック)のでしょうか?
また各コマンドのwparam/lparam値を掲載しているサイトがありましたら教えてもらえませんか?



KIMU

リンク

2007/6/6(Wed) 20:14:13|NO.8815

>これはループの中で使われていないですが何故効果が現われる(右クリック)のでしょうか?
割り込みの設定は
>oncmd gosub *mouse_click, $204 ;マウス右
でしてるので、クリックされたら*mouse_clicにk飛んで、その時のマウスの座標をmx,myに入れて
メインループ内でmx,myを始点に四角ライインを書いてるからです。

シフト&コントロールはクリックの割りこみ時に勝手に状態を拾ってきてくれる

>また各コマンドのwparam/lparam値を掲載しているサイトがありましたら教えてもらえませんか?
http://hsp.tv/play/pforum.php?mode=all&num=8703
ここに挙げられてる所と後は言語関係なくウィンドウメッセージで検索してます
(今回の(wparam&4)(wparam&8)はLet'sHSPに載ってました)



HSP2年生

リンク

2007/6/6(Wed) 22:16:35|NO.8818

>これはループの中で使われていないですが何故効果が現われる(右クリック)のでしょうか?
あっ、バカな質問でしたね。よく見れば当然でした。

wparam、lparamの件了解です。やはり地道に検索ですかね、誰かまとめて公開してくれてる
ところがないかと思ったもので・・・
ellerさんのWikiに期待しています。

一応目的どうりの処理ができましたので解決しておきます。

皆さんありがとうございました。



eller

リンク

2007/6/6(Wed) 22:36:57|NO.8820

> hsp2年生さん
大丈夫だと思いつつ一応突っ込んでおきますが、Wikiは私個人のものではないです。
確かに残念ながら、最近は私による更新が目立ちますが…。

誰でも更新できるので、情報がまとまったら更新してみても良いのではないでしょうか。



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