Casio Basic: Getkey

Casio Basic
コマンドリファレンス

Casio fx-5800P、fx-9860GII、fx-CG20、fx-CG50 で確認をとっています。Casio fx-FD10 Pro では互換性はあると考えられますが、実機で確認していないので「可能性」としてご覧ください。
2015/01/12 更新

fx-5800P / fx-9860GII / fx-CG20 / fx-CG50
Getkey

◆概 要:
押されたキーのキーコードを取得する。[AC]キー以外の全てのキーにはそれぞれ異なるキーコードが割り当てられている。

◆書 式: Getkey

◆引 数:なし

◆戻り値:
押されたキーのキーコードを返す。キーが押されていない場合は0を返す。

※ 互換性: キーコードはハードウェア(機種)に依存し、fx-5800P と fx-9860GII や fx-CG20/50ではキーコードが異なります。一方で、fx-9860GII と fxCG20/50 は全く同じです。

キーコードを知るには、取扱説明書を見るか、キーコード取得プログラムを実行してください。

取扱説明書キーコード取得プログラム
fx-5800P99 ページプログラムライブラリ - キーコード取得
fx-9860GII8-17 ページ
fx-CG20/508-20 ページ



Getkey を使うと[AC]キー以外のキーが押された時に、そのキーの判別ができます。

Getkeyはプログラムの実行を止めて、キー入力を待つ機能は備わっていません。Getkey はキーが押される時に実行されなければなりません。従って、キー入力を待ち受けるために、繰返し処理(ループ)の中に Getkey を記述する必要があります。

例えば、Do~LpWhile ループを使い、

Do
Getkey→K
[必要な処理]
LpWhile K=0

[押されたキーに応じた処理]


とします。このプログラム例は、Getkey0を返す時(キーが押されていない時)は繰返し処理が継続され、0以外を返す時(何かキーが押された時)は、繰り返し処理を終える動作をします。

入力命令?を使うと、入力確定のために [EXE] キーを押す必要がありますが、Getkey を使えば [EXE] キーを押さずに、リアルタイムでキー入力に反応するプログラムを作れます。

fx-5800Pでは、キーが押された瞬間から所定の時間の範囲なら、Getkey でキーコードを取得できるようです。つまり、キーが押された、まさにその瞬間に Getkey が実行されていなくても、一定の時間的猶予が与えられます。

Lbl 0
0→C
Do
Getkey→K
LpWhile K=0
Locate 1,1," "
Locate 1,1,K
Goto 0


これを実行すると、最初に表示されるキーコードKの値は、プログラム実行開始で押さなければならない [EXE] キーの47となります。つまり、[EXE] が押された瞬間ではなくて、押されてから一定時間内で(短い時間ですが...)キーコードを取得していることがわかります。

次に、上のコードの冒頭のLbl 0 の上に、次のように赤文字で示した4行のコード(1000回ループ)を追加して、一定の待ち時間がかかるようにします。

1000→A
Lbl 1
Dsz A
Goto 1

Lbl 0
0→C
Do
Getkey→K
LpWhile K=0
Locate 1,1," "
Locate 1,1,K
Goto 0


すると、プログラム実行開始で押された [EXE] のキーコードを取得できないまま、キー入力待ちになります。つまり、キーが押されてから所定時間を経過すると Getkey はキーコードを取得できないことがわかります。

非常に長いループ(多くの処理が記述されていて、ループ1回がまわるのに時間がかかるループ)の内で Getkey でキー入力を監視すると、キーの取りこぼしが起こり得ます。キー入力監視は極力短めのループを使うようにすると良いでしょう。

fx-9860GII ではプログラムの実行が速いので、上記のような現象の違いを確認できません。むしろ実行速度が速いために、プログラムによっては、キーリピートを抑制するコード(赤文字部分)が必要になります。

While Getkey
WhileEnd

Do
Getkey→K
LpWhile K=0


赤文字の2行が、キーリピート抑制の働きをします。Getkey の戻り値が 0 でない限り、つまりキーがが押されている限り、このループが継続します。そして、キーが離れたら Getkey は 0 を返すのでループを脱出して次のキーコード取得が行われます。




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ


keywords: fx-5800PCasioBasicGetkeyプログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

ありがとう

管理人様、sentaro様、 お世話になっております。

sentaro様。  様々にご対応ありがとうございました。

     ■D\(^^ ) コーヒーでもどうぞ お疲れ様です。

アドイン版 C.Basic ver.1.64ベータ版(CATALOG機能修正版)

管理人様、ツル様、こんにちは!

ツル様よりご指摘いただいたCATALOG機能の不具合ですが、ファイル名や検索での入力があるとその後、CATALOGキーが効かなくなっていました。
(おそらく)原因は、
SaveDisp()とRestoreDisp()で使う退避領域がOSのバージョンアップに伴い暗黙に使われているか何かで不具合になっていると思われます。
退避領域は1~3まで用意されているにもかかわらず、現行のOSでは実際に自由に使えるのは1だけの模様です。
従来C.Basicでは1~3まで使用していましたが、3を使うとCATALOGキーが使えなくなっていたので1と2だけを使っていたのですが今回1だけに変更しました。
ってことで、そこのあたり、とりあえず差し替え修正してみました。

アドイン版 C.Basic ver.1.64ベータ版(CATALOG機能修正版)
http://pm.matrix.jp/CB/CBASIC164beta.zip
・CATALOGキーが効かなくなる不具合を修正しました。

Re:複数キーの同時GetkeyスキャンとCATALOG

管理人様、ツル様、こんにちは!

>Q1 ピアノなどでの和音のように、複数のキー押しでの複数同時キースキャンはできるのでしょうか?

はい、ハード的には可能です。


>CASIO BASICでは出来なくても、C.Basicなら可能ですか?

はい、CASIO BASICでは不可能ですが、C.BasicならKeyRowコマンド、またはGetkeyMコマンドを使うことで可能です。
マニュアルのKeyRow、Getkeyの項目を参照して下さいませ。


>Q2 C.BasicでProg作成中、SHIFT+4でのCATALOG機能が、効く時と効かない時があるのですが、どんな時にその差が出ているのか今一つ把握できておりません。困っており泣きそうですので教えてください。

この不具合の現象は確認していたのですが、まだ未修正でした。(^^;
ちょっと再調査してみます。

複数キーの同時GetkeyスキャンとCATALOG

管理人様、sentaro様、 お世話になっております。

Q1 ピアノなどでの和音のように、複数のキー押しでの複数同時キースキャンはできるのでしょうか?
CASIO BASICでは出来なくても、C.Basicなら可能ですか?

Q2 C.BasicでProg作成中、SHIFT+4でのCATALOG機能が、効く時と効かない時があるのですが、どんな時にその差が出ているのか今一つ把握できておりません。困っており泣きそうですので教えてください。
最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています

おもしろい・役に立つならクリックしてください。励みになります。
にほんブログ村 IT技術ブログ 開発言語へ
にほんブログ村


人気ブログランキングへ


FC2ブログランキングへ


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR