グラフ関数電卓 fx-9860G SDK (キー操作)

2013/03/27

◆ キー操作

デフォルトで作成されるサンプル・ソースを修正して、キー操作について書きためておく。

無限ループ中にある GetKey関数を用いて、押されたキーのキーコードを表示するようにプログラムする。

#include "fxlib.h"  // SDKのライブラリ

int AddIn_main(int isAppli, unsigned short OptionNum)
{
    unsigned int key;
    char keycode_text[10];  // ← キーコード番号表示用の文字列

    Bdisp_AllClr_DDVRAM();

    locate(1,4);
    Print((unsigned char*)"This application is");
    locate(1,5);
    Print((unsigned char*)" sample Add-In.");

    while(1){  // 無限ループ
        GetKey(&key);
        sprintf(keycode_text, "%d", key);  // ← キーコードの数値を文字列に変換
        locate(1, 6);         // ← 表示位置を指定
        Print(keycode_test);  // ← キーコードを表示
    }

    return 1;
}

int GetKey(unsigned int *keycode)

GetKeyは、キー入力があるまで待機し、キー入力があれば押されたキーのコードを変数に返す。 押されたキーがが文字キーであれば戻り値は 1 となり、押されたキーがコントロールキーであれば 0 が返される。

GetKey で待機中にOS側でオートパワーオフのシステムイベントが発生すると、アプリケーション側への通知なしにイベントが実行され、電源が落ちる。 再度電源を入れるとGetKey関数の処理へ戻る。
また、menuキーが押された場合もアプリケーションの処理が中断され、システムへ処理が移る。
システムイベントを発生させたくない場合は、GetKeyWait関数を使用する。 GetKeyWait関数ではオン/オフ・タイマーを有効にするかどうかのオプションが設定できる。

ゲーム等のキー操作で、キーが押されているかどうかを判定したい場合には、isKeyDown / isKeyUp 関数を用いる

 

以上を踏まえ、キー [1]、[2]、[3] が押されたときに異なる表示がされるようにプログラムしてみる。

    while(1){  // 無限ループ
        GetKey(&key);
        locate(1, 6);
        switch (key) {
            case KEY_CHAR_1:
                Print((unsidned char*) "Push on [1] KEY.");
                break;
            case KEY_CHAR_2:
                PrintRev((unsidned char*) "Push on [2] KEY.");  // ← 反転表示命令
                break;
            case KEY_CHAR_3:
                Print((unsidned char*) "Push on [3] KEY.");
                break;
        }
    }

switch文で押されたキー毎の処理を行っている。
ここでは case の値に、 fxlib.h 内で定義されている定数を用いている。 定義されているキーコード名は定数は、fx-9860G Key Code List.pdf を参照してもらいたい。

以下に良く使う定数を書いておく。

キー Normal + [Shift] + [ALPHA]
KEY_CHAR_0 KEY_CHAR_IMGNRY KEY_CHAR_Z
KEY_CHAR_1 KEY_CHAR_LIST KEY_CHAR_U
KEY_CHAR_2 KEY_CHAR_MAT KEY_CHAR_V
KEY_CHAR_3   KEY_CHAR_W
KEY_CHAR_4 KEY_CTRL_CATALOG KEY_CHAR_P
KEY_CHAR_5   KEY_CHAR_Q
KEY_CHAR_6   KEY_CHAR_R
KEY_CHAR_7 KEY_CTRL_CAPTURE KEY_CHAR_M
KEY_CHAR_8 KEY_CTRL_CLIP KEY_CHAR_N
KEY_CHAR_9 KEY_CTRL_PASTE KEY_CHAR_O
KEY_CHAR_DP KEY_CTRL_EQUAL KEY_CHAR_SPACE
(-) KEY_CHAR_PMINUS KEY_CTRL_ANS  
KEY_CHAR_PLUS KEY_CTRL_LBRCKT KEY_CHAR_X
KEY_CHAR_MINUS KEY_CTRL_RBRCKT KEY_CHAR_Y
× KEY_CHAR_MULT KEY_CTRL_LBRACE KEY_CHAR_S
÷ KEY_CHAR_DIV KEY_CTRL_RBRACE KEY_CHAR_T
EXE KEY_CHAR_EXE KEY_CTRL_CR  
DEL KEY_CHAR_DEL KEY_CTRL_INS  
AC KEY_CHAR_AC    
KEY_CTRL_UP KEY_CTRL_PAGEUP KEY_CTRL_UP
KEY_CTRL_DOWN KEY_CTRL_PAGEDOWN KEY_CTRL_DOWN
KEY_CTRL_LEFT   KEY_CTRL_LEFT
KEY_CTRL_RIGHT   KEY_CTRL_RIGHT
F1 KEY_CTRL_F1 KEY_CTRL_F1 KEY_CTRL_F1
F2 KEY_CTRL_F2 KEY_CTRL_F2 KEY_CTRL_F2
F3 KEY_CTRL_F3 KEY_CTRL_F3 KEY_CTRL_F3
F4 KEY_CTRL_F4 KEY_CTRL_F4 KEY_CTRL_F4
F5 KEY_CTRL_F5 KEY_CTRL_F5 KEY_CTRL_F5
F6 KEY_CTRL_F6 KEY_CTRL_F6 KEY_CTRL_F6