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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0304
yosshidastickでのキー入力のふるまいがわからない9解決


yosshida

リンク

2010/3/4(Thu) 14:46:15|NO.30965

初心者です。
下記のようなスクリプトを書いてみました。
「ctrlを押しながら、スペースを押せば赤、
右なら緑、左なら青に変る。
またボタンをマウスクリックでも可能」
というようにしたつもりですが・・・

1)
「ctrl、それから左右も押す」は期待通りですが
「ctrl、それからスペース」が効きません。
しかし「スペース、それからctrl」は動きます。
この違いはなぜでしょう?

2)
マウスでどれかのボタンを押す。
その状態でスペースキーを押すと、そのボタンをクリックした事になります。
(例えば、一度「R」をマウスで押すと、以後スペースキーを押すごとに
「R」をクリックしてしまいます。
stcikの値にもスペースの16でなく、クリックの256が代入されています。)
これはなぜでしょうか。
しかもなぜスペースキー? enterなら分かる気もしますが・・・。
常にフォーカスを他に移せばいいのでしょうが、
他の機能も加えたいので、この振る舞い自体をやめさせたいのです。

初歩的な質問で恥かしいのですが、
よろしくお願いします。



screen 0,200,160 objsize 200,20 pos 000,100 button gosub "R",*R button gosub "G",*G button gosub "B",*B *MAIN stick KEY,85 if KEY=80 : gosub *R if KEY=68 : gosub *G if KEY=65 : gosub *B wait 10 goto *MAIN *R color 255,000,000 boxf 000,000,200,100 return *G color 000,255,000 boxf 000,000,200,100 return *B color 000,000,255 boxf 000,000,200,100 return



この記事に返信する


Ve

リンク

2010/3/4(Thu) 15:58:33|NO.30966

1については良く分かりません。

>「ctrl、それからスペース」が効きません。
うちでは利きました。

2については、yosshidaさんにとっては疑問かもしれませんが、
ボタンにフォーカスが合っていれば、スペースキーでも押せるのは普通です。

フォーカスがボタンに合っていれば、常にフォーカスを外す処理を入れるしかありません。



u

リンク

2010/3/4(Thu) 17:37:28|NO.30970

>「ctrl、それからスペース」が効きません。
効きましたよ?

>stickの値にもスペースの16でなく、クリックの256が代入されています
これはボタンにフォーカスがある状態でスペースキーを押す事で、内部でボタンがクリックされているからだと思います。
ただの予想ですが。

対処法ですが、onkeyを使えばボタンが押されるよりも先に処理が行われます。
これを利用してキーが押されたときのみフォーカスを外せば、他に入れたい機能とやらの邪魔にもならなくなるかもしれません。

ただこれだけではスペースを押したときボタンがクリックされてしまうので、キーが押された時にボタンにsendmsgで偽のクリック情報を送りつけます。
ここら辺は簡単にWindowsアプリの仕組みを理解していないと難しいかもしれません。

#define WM_LBUTTONDOWN 0x0201 screen 0 onkey goto *a pos 9999,9999:chkbox "",bum//フォーカス移し用ダミーオブジェクト pos 0,0:button "test",*b hBut=objinfo(stat,2)//sendmsgで使うウインドウハンドル stop *a sendmsg hBut,WM_LBUTTONDOWN,0,0//ボタンに何もクリックされていないというメッセージを送る objsel 0//フォーカスをダミーに移す mes "a" stop *b mes "b" stop

これを改変して特定のキーが押されたときのみ処理を行うようにしてください。



tsuka

リンク

2010/3/4(Thu) 19:23:46|NO.30971

ダミー使わずにobjskip使ったらよさそうなヨカン。



tsuka

リンク

2010/3/4(Thu) 19:29:13|NO.30972

失礼。objskipじゃ無理でした。



ANTARES

リンク

2010/3/4(Thu) 23:51:24|NO.30996

>その状態でスペースキーを押すと、そのボタンをクリックした事になります。
 「スペースキーでを押すと、フォーカスのあるコントロールを左クリックした場合と
同じ動作をする」というのは、Windowsの仕様です。例外もありますが……。



skyblue

リンク

2010/3/5(Fri) 09:38:27|NO.31005

stickでスペースとescのキーコードを調べて両方押されてたら、という手もあります。
キーボードをすべてstickで取得して判定と言う方法もあります。
>stick KEY,85
85は何を意味しているのでしょうか?

補足
16 : スペースキー
32 : Enterキー
128 : ESCキー
がキーコードです。



Ve

リンク

2010/3/5(Fri) 18:11:34|NO.31019

>85は何を意味しているのでしょうか?

yosshidaさんの書き込み内容を読めば分かると思いますが?



yosshida

リンク

2010/3/7(Sun) 02:33:15|NO.31082

1)
実は、まだ解決していないのですが、
皆さんの環境では問題ないようなので、
私が(2)とごっちゃにして誤認しているようですね。
もうちょっとちゃんと検証してみます。
「エラーではない」とわかっただけでも前進です。

2)
>「スペースキーでを押すと、フォーカスのあるコントロールを左クリックした場合と
同じ動作をする」というのは、Windowsの仕様です。
そんな簡単なことでしたか。お恥ずかしい・・・。
uさんの「フォーカスはずし」を試してみたいと思います。

stick KEY,85は、
「ctrl、スペース、右、左」4つのキーを使ったので
足したら85かなあ、と思った次第です。

皆さん、丁寧な回答をありがとうございました!
たいへん参考になりました。



ANTARES

リンク

2010/3/7(Sun) 04:03:11|NO.31084

>1)
>実は、まだ解決していないのですが、
 以下のようにすれば何が起きているのかわかりやすくなるかもしれません。

先頭に「#include "kernel32.as"」を挿入
stickの直後に「title "KEY="+KEY」を挿入
3個所の「return」の直前に「Sleep 500」を挿入



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