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


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0401
くりむonkeyの離されたとき6解決


くりむ

リンク

2020/4/1(Wed) 17:09:24|NO.89887

HSPで、キー入力をonkeyを使って検知したいです。

長押ししていると、ずっとonkey先のラベルが呼ばれてしまうみたいなのですが、
いい方法はないでしょうか。

前フレームの入力 を取得すれば比較できるのでは?と思ったんですが、そもそも離しても取得されないので...

どうかご教授よろしくおねがいします



この記事に返信する


あらや

リンク

2020/4/1(Wed) 18:07:07|NO.89893

キーの押し下げ、押し上げの両方を検出する場合は
oncmdでWM_KEYDOWN、WM_KEYUPを利用した方が良いです。


#define WM_KEYDOWN 0x0100 #define WM_KEYUP 0x0101 #define WM_SYSKEYDOWN 0x0104 // ALTやF10はこちら #define WM_SYSKEYUP 0x0105 // ALTやF10はこちら oncmd gosub *keydown, WM_KEYDOWN; oncmd gosub *keyup, WM_KEYUP; buf = ""; *main redraw 0; color 255, 255, 255: boxf; pos 0, 0: color 0, 0, 0; mes buf; redraw 1; await 17; goto *main; // キーを押した時 *keydown buf = "仮想キーコード:"+wParam+"を押した"; return; // キーを放した時 *keyup buf = "仮想キーコード:"+wParam+"を放した"; return;



くりむ

リンク

2020/4/1(Wed) 18:20:49|NO.89894

oncmdなんて命令があるんですね!!
丁寧にコメントもありがとうございます、



くりむ

リンク

2020/4/1(Wed) 18:21:10|NO.89895





MIZUSHIKI

リンク

2020/4/1(Wed) 21:28:19|NO.89898

タイトルの「onkeyの離されたとき」の話ではないのですが、
>長押ししていると、ずっとonkey先のラベルが呼ばれてしまう

というのを防ぎたいということであれば、Kpanさんの Let's HSP! のonkey解説を見てみてください。
「長押ししても初回のキー押ししか反応しないコード」が紹介されています。(サンプルコード3つ目)
http://lhsp.s206.xrea.com/command/onkey.html

そのまま転載させて頂きますと以下のコードになります。

// 長押ししても初回のキー押ししか反応しないコード onkey *jump stop *jump if lparam >> 30 = 0 { mes wparam } stop



kanamaru

リンク

2020/4/1(Wed) 22:41:36|NO.89900

他人のスレッドですけど、驚きました。
そんなことができたんですね。
onkey思ったよりも使いどころがあるかもしれない。
いつも仮想コードの確認にしか使ってなかったので。



沢渡

リンク

2020/4/2(Thu) 11:57:45|NO.89905

onkeyのwparamとlparamはWM_KEYDOWNで返るものがそのまま使われている模様ですね。
http://chokuto.ifdef.jp/urawaza/message/WM_KEYDOWN.html
直前に押されていたかどうかのほか、キーリピートも検出できるみたいです。

#uselib "user32.dll" #cfunc MapVirtualKey "MapVirtualKeyA" int,int #define ctype vk2ascii(%1) (MapVirtualKey(%1,2)&0xFF) s="" font msgothic,16 x=0 : y=0 onkey gosub *inkey repeat await 120 loop *inkey lp=lparam ac=vk2ascii(wparam) //仮想キーコードをASCIIに変換 if (lp&0x40000000)=0 : gosub *put : return rep=lp&0xFFFF //キーリピート回数 repeat rep gosub *put loop return *put poke s,0,ac pos x*8,y*16 : mes s x++ : if x>=80 : x=0 : y++ return



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