過去の桐井戸端BBS (桐ver.9)
25877 Ctrl+→を押した時の仮想キーコードは何番でしょうか? Koba 2004/04/15-00:07
いつも拝見させてもらっています
早速ですが

Ctrl + → を押した時の仮想キーコードは何番でしょうか?

表を見ても補助キーとの組み合わせが良くわかりません
どなたか 教えてください

25879 Re:仮想キーコードについて 佐田 守弘 2004/04/15-00:52
記事番号25877へのコメント
Kobaさん
仮想キーコード表は、桐の一括処理&コマンドリファレンスの中にあるのはご存知でしょうか。
これは見ておられますか?

●カーソルキーの仮想キーコード
上記を見れば解りますが、カーソルキー「→」の仮想キーコードは、10進で40です。

●Ctrlキーが押されている事の判定
質問の主旨は、「→」を単独ではなくてCtrlキーと一緒に押している事を判定したいとの意味と思います。
しかしキーを単独で押しても、Shift、Ctrl、Altキーと一緒に押しても、仮想キーコードは変わりません。

ではこれらの特殊キーが一緒に押されているかどうかはどの様に判定するかですが、
これは文字キーの仮想キーコードではなくて、スキャンコードとフラグで判定します。

Ctrlキーが押されると&フラグに8が、Shiftキーが押されると&フラグに4が入ります。
従って&フラグの値が8であるかどうかで判定すればよいのですが、
他のキーも一緒に押されると8以外の値になります。
より正しく言えば、ビット列のフラグがあって、それぞれのビットが、
マウス左、右ボタン、Shiftキー、Ctrlキーの押下に対応している様です。
上記のそれぞれが下位から見て1〜4ビット目に対応します。
そしてそれらが一緒に押されると対応するビットの合計値になります。

従って、Crerlキーが押されているかどうかは、&シフトの値をバイナリで表現した時に、
4ビット目が1であるかどうかを調べる必要があります。

これを桐の式で書けば、以下の様な条件式になります。
( (&シフト .and 8) = 8 ) 
なぜandで計算できるのかは、クイズとして考えてみて下さい。

参考までに言うと、Altキーの方はスキャンコードで調べます。

佐田守弘(KS-00119)
25881 Re:仮想キーコードについて hidetake 2004/04/15-07:24
記事番号25879へのコメント
>従って、Crerlキーが押されているかどうかは、&シフトの値をバイナリで
>表現した時に、4ビット目が1であるかどうかを調べる必要があります。
>
>これを桐の式で書けば、以下の様な条件式になります。
>( (&シフト .and 8) = 8 ) 
>なぜandで計算できるのかは、クイズとして考えてみて下さい。

えっ! (@_@;

なぜ、桐の .and でビット演算が可能なのですか?
いつからか可能になったのですか?

この辺の話はたゆーさんのところで以前ありましたが次のコメント以降にあります。
http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi?function=logview_html&no=6#272


そして、いかすぱさんが書いた桐の計算式は次にあります。
http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi?function=logview_html&no=6#273

私自身が書いた桐の計算式は次ですけど・・・
http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi?function=logview_html&no=6#300


ただ、これも桐のバージョンによってはより簡単にできる場合も?あるようですが、
確か?(少なくとも?)「桐ver9 sp1」からは
#AND(num1,num2)
#NOT(num)
#OR(num1,num2)
#LSHIFT(num,x)
#RSHIFT(num,x)
#XOR(num1,num2)
と言った関数ができたようですね? 使えたっけか?

でも、これって公にされていたっけ? よくわからないけど? でもどうして
こんなものまで kthree 様って、公にしなかったり隠したりするのでしょう?


と言うことで
>なぜandで計算できるのかは、クイズとして考えてみて下さい。
私には理解できませんでした? (;_;)
25884 Re:仮想キーコードについて うにん 2004/04/15-10:20
記事番号25881へのコメント

>>従って、Crerlキーが押されているかどうかは、&シフトの値をバイナリで
>>表現した時に、4ビット目が1であるかどうかを調べる必要があります。

&シフトでなくて&フラグのようですが、

>>これを桐の式で書けば、以下の様な条件式になります。
>>( (&シフト .and 8) = 8 ) 
>>なぜandで計算できるのかは、クイズとして考えてみて下さい。
>
>えっ! (@_@;
>
>なぜ、桐の .and でビット演算が可能なのですか?
>いつからか可能になったのですか?

V9SP1では不可能です。佐田さんの勘違いでしょう。

>ただ、これも桐のバージョンによってはより簡単にできる場合も?あるよう
>ですが、確か?(少なくとも?)「桐ver9 sp1」からは
>#AND(num1,num2)

>と言った関数ができたようですね? 使えたっけか?

うちのでは使えましたが、

>でも、これって公にされていたっけ? よくわからないけど? でもどうして
>こんなものまで kthree 様って、公にしなかったり隠したりするのでしょう?

謎です。とりあえずビット3(下から4ビット目)を取り出すのは
#MOD(#INT(&フラグ/2^3),2)
で簡単にできるのですが、&スキャンコードがbitの一覧なのに対して&フラグの方は
値の一覧になっています。よく見ると、3ボタンマウスの場合にややこしいことになってるようです。
18 [Ctrl] + マウス中央
この場合18=16+2なのでCtrlが押されているのに「8」は含まれていません。
実際には「Ctrl+キーボードを押しながらマウスボタンを押す」なんて操作は
普通しないのであまり問題ないと思いますが...
(3ボタンマウスがないのでテストできませんが、ただの表の間違いかも?)

25891 訂正>ビット演算はできませんね 佐田 守弘 2004/04/15-17:35
記事番号25884へのコメント
hidetakeさん、うにんさん
私は.andと.or演算子で整数のビット演算ができると思っていたのですが、
テストしてみた結果、仰るとおりでした。

論理和、論理積演算子の結果は次の通りでした。
@桐の論理値の真と偽はそれぞれ1と0で表されるが、それ以外の値については
未定義値は偽、それ以外の整数値は真として扱われる。
A1以外の真として扱われる整数値(2以上の整数および負の整数)どうしの論理積、論理和の結果は、
真を表す1になる。2つの数のビット演算値ではない。
という事で、前回のコメントは訂正します。

従って、Ctrlキーが押されているかどうかの判定は、Ctrlキーのみの場合には、
&シフト=8で、また他のキーやマウスボタンと一緒に押されている事も含めるならば、
&シフト>=8になります。
しかし実際問題として、Ctrlキーマウスボタンを押しながら他のキーを操作する事は
ないだろうと思いますので、CtrlキーとShiftキーが同時に押されている場合を含めて、
&シフト=8 .or &シフト=12 で良いのではないかと思います。

佐田守弘(KS-00119)

しかし長い事、ビット演算ができると信じていて、その様なプログラミングして来ていた事もあったのでしたが...。
多分、たまたまうまく行っていたのでしょう。


25893 ありがとうございました Koba 2004/04/15-18:55
記事番号25891へのコメント
ありがとうございます

皆さんの会話はあまりよく理解できませんでしたが
使用方法は理解できました

また よろしくお願いします
25894 re:仮想キーコードについて たゆー 2004/04/15-20:09
記事番号25893へのコメント
Kobaさんこんばんは
>皆さんの会話はあまりよく理解できませんでしたが
>使用方法は理解できました
そんなに難しく考えなくてもいいですよ

フォームのキーダウンイベントにチェックを入れ、イベントの中に
if(&仮想キーコード=37 .and &フラグ=4)      *Shift + ←
  途中の処理
else if(&仮想キーコード=39 .and &フラグ=4)    *Shift + →
  途中の処理
else if(&仮想キーコード=37 .and &フラグ=8)    *Ctrl + ←
  途中の処理
else if(&仮想キーコード=39 .and &フラグ=8)    *Ctrl + →
  途中の処理
else if(&仮想キーコード=37 .and &フラグ=12)   *Shift + Ctrl + ←
  途中の処理
else if(&仮想キーコード=39 .and &フラグ=12)    *Shift + Ctrl +

  途中の処理
end

このように記載します。これで、動きますのでおためしくださいね
今回は横移動カーソルだけですが、&仮想キーコード値を変更すると縦移動も取得可能です

あと、
>●カーソルキーの仮想キーコード
>上記を見れば解りますが、カーソルキー「→」の仮想キーコードは、
>10進で40です。
ご自分で「仮想キーコード」表も確認してくださいね


25904 Re:re:仮想キーコードについて Koba 2004/04/16-19:37
記事番号25894へのコメント
たゆーさん ありがとうございます

うまく動きました

また よろしくお願いします

戻る