方法にもよりますが、恐らくできるかと・・・
効率の悪い方法ですが、一応紹介させていただきます
最初はgetkeyでシフトキーの入力を取得してから場合分けなども考えました・・・
しかし、全ての文字に半角記号に対してこれをやるのは面倒・・・
というわけで、getkeyを使う案はバッサリ切り捨てて考えててみることにしました
入力状態の取得といっても何もgetkeyやstickだけじゃないと思います
例えば、inputやmesboxといったオブジェクト・・・
これらは数値や文字を入力するためのものであるため、当然「入力状態の取得」も行っています
(あたりまえですが、シフトキーによる半角記号の入力も行えます)
つまり、こいつを介せばシフトキーでも何でも、
文字コードとして変数に格納できるものは全て取得できるということになります
以下、サンプル
入力は大きさ0の実質「見えない入力ボックス」に対して行っています
かなり邪道で非効率ですが、とりあえず機能だけなら実現できるかと・・・
また、わかりにくいですが、動作応答は「正しい文字を入力したときのみ」です。
シフトキーによる大文字小文字もチェックされています。
#define word_num_max 3
//辞書データの代わり
sdim dictionary,64,word_num_max
dictionary(0)="0.1=10%"
dictionary(1)="1+2+...+N=(1/2)n(n+1)"
dictionary(2)="I'll_be_back!!"
//入力用に0×0の大きさの入力ボックスを作る
pos 0,0
inp=""
input inp,0,0
objID_inp=stat
//メイン部分
gsel 0
randomize
dim dwkey_fl,255
*top
string=dictionary(rnd(word_num_max))
string_ofs=0 //stringのオフセット
check_char=""
check_int=0
redraw 0
pos 0,0
color 255,255,255:boxf:color//画面を塗りつぶし
mes "入力単語↓\n"+string
*start
//入力情報の取得
objsel objID_inp //フォーカスを入力ボックスに合わせる
check_int=peek(string,string_ofs) //入力文字コードを読む
if check_int>127{ //2byte文字
check_int=wpeek(string,string_ofs)
check_int_n=2
dwkey=wpeek(inp,0)
wpoke check_char,,dwkey
}else{ //1byte文字
check_int_n=1
dwkey=peek(inp,0)
poke check_char,,dwkey
}
//判定
if dwkey=check_int{
pos string_ofs*8,50:mes check_char
string_ofs+=check_int_n //stringのオフセットをずらす
}
objprm objID_inp,""
redraw 1
await 10
redraw 0
if string_ofs>strlen(string):goto*top //stringを入力が完了した
goto*start