過去の桐井戸端BBS (桐ver.8)
13851 入力ミスの時ビープを鳴らすことは出来るのでしょうか ジャンゴ 2001/11/05-02:11
いきなり、申し訳有りません。桐のBBSはいつも拝見させていただいています。
会社で桐を使用しているのですが、初心者ばかりで困ったときの「桐井戸端BBS」でほとんどの問題は解決しています。
が、超初心者から「フォームで入力中入力ミスが有った時、音で知らせることは出来ないの?」
との質問があったのですがどなたか、教えて下さい。ちなみに桐8を使用しています。
13854 可能ですが、ミスをどの様に判定しますか 佐田 守弘 2001/11/05-10:55
記事番号13851へのコメント
ジャンゴさん
入力ミスがあった時に、ビープ音を慣らす事は基本的に可能です。
入力後イベントを使って、キー入力された値の妥当性を判断し、エラーであれば、
ブザーコマンド(beepでも同じ)でアラームを鳴らすと共に、入力のやり直しができます。

ここでの課題は、何を持ってエラーとするかです。
これがきちんと決まらないと、エラーの判定ルーチンが作れないと思います。

たとえば、桁数が違うとか、書式が違うと言ったエラーは比較的簡単に判定できますが、
1500と入力すべきところを誤って1600と入力したなど、
値が違う判定は難しいでしょうね。
(ダブルパンチさせるのも1つの方法でしょう)

佐田守弘(KS-00119)
13855 Re:キー入力毎にサウンドを鳴らすイベント例 アックン 2001/11/05-12:49
記事番号13851へのコメント
ジャンゴさん、こんにちは。
数字キーを入力たびに数字を声で読み上げるイベントを昨年書いていたので、
ミスタイプ時には別の音を鳴らすように若干の変更を加えてご紹介します。
(実際に声で読むには別のWAVファイルが必要です。今回はWindows付属のサウンドで代用しています。)
一応どんなものか知るためにも、一度試してみてもらえればと思います。

さらに表の項目制約式のように入力値を評価したいときもイベントで可能ですが、
今回は個々のキー毎に判定するイベントだけです。

・キーダウンイベントは他に使用することもあるので、ここではキーダウンイベントを使っています。

・音を鳴らすとき鳴らさないときの条件を設定したいときは、以下のif文の条件式を変更してください。

 プログラム 6行目if文の条件式:
   数字キー(0〜9)のときに、Chimes.wavを鳴らす。

 プログラム27行目if文の条件式:
   項目[コード]では、数字キー(0〜9)以外のときに、Ding.wavを鳴らす。
   項目[数量]では、数字キー(0〜9)以外か、頭文字がマイナスキー(-)以外のと
きは、Ding.wavを鳴らす。

・以下がイベント(kev)です。(アップ時に改行されるので、読みにくいと思います。すみません。)
名札 メイン
var 整数{ &exit , &pos[2] , &end }
var 文字列{ &txt , &focus , &str[3] }

proc フォーム::キーアップ(長整数 &仮想キーコード)
 if( ((&仮想キーコード>=48)*(&仮想キーコード=<57))+((&仮想キーコード>=96)*(&仮想キーコード=<105)) )
   sound 再生,"c:\windows\media\Chimes.wav",非同期, 終了状態=&end
&txt = "" , &pos[1] = ""
cond( .not&end ) call 処理表示( 1 , "エラー: "+"フォーム::キーアップ"+"/"+"sound"+"/番号: "+#str(&end) )
end
end

proc tコード::編集文字列変更()
call NumCheck()
end

proc t数量::編集文字列変更()
call NumCheck()
end

**------ [コード]で数字(0〜9)以外を入力したらその場で削除する。[数量]で数字かマイナス(-)以外を入力したらその場で削除する。
マイナス記号は先頭でなければ入力できない。
文字カーソルを先頭または途中に戻している場合は、文字カーソル位置を1文字進めない。
proc NumCheck()
   method @フォーム.フォーカスオブジェクト取得 ( &focus )
   method &focus.編集文字列取得      ( &txt )
   method &focus.編集選択位置取得 ( &pos[1] , &pos[2] )
 if(.not(((&focus="t数量
")*(#sstr(&txt,2,1)<>"-")*(#sstr(&txt,1,1)="-")*(&pos[1]-1=1))
.or#sstr(&txt,&pos[1]-1,1)="0" .or#sstr(&txt,&pos[1]-1,1)="1"
.or#sstr(&txt,&pos[1]-1,1)="2" .or#sstr(&txt,&pos[1]-1,1)="3"
.or#sstr(&txt,&pos[1]-1,1)="4" .or#sstr(&txt,&pos[1]-1,1)="5"
.or#sstr(&txt,&pos[1]-1,1)="6" .or#sstr(&txt,&pos[1]-1,1)="7"
.or#sstr(&txt,&pos[1]-1,1)="8" .or#sstr(&txt,&pos[1]-1,1)="9"))
method &focus.編集選択位置設定 ( &pos[1]-1 , 1 )
method &focus.編集選択文字列置換 ( "" )
   sound 再生,"c:\windows\media\Ding.wav",非同期, 終了状態=&end
cond( .not&end ) call 処理表示( 1 , "エラー:
"+"NumCheck"+"/"+"sound"+"/番号: "+#str(&end) )
end
end

***-------< 処理表示 >-------
proc 処理表示(整数 &ar , 文字列 &t)
&str[&ar] = &t
method @フォーム.変数変更()
method @フォーム.描画更新()
end

13867 説明不足で申し訳有りません ジャンゴ 2001/11/05-23:19
記事番号13854へのコメント
佐田さん、ありがとうございます。

きちっとした説明もせずすいません。ビープ音を鳴らしたい場面は、大文字小文字の区別、決められた数値(値集合では、多すぎる)などです。

過去のBBSなどでイベント処理を勉強していますが、なかなか難しくて・・・
サンプルが有れば見よう見まねで勉強していきたいと思います。

これからも宜しくお願いします
13868 Re:キー入力毎にサウンドを鳴らすイベント例 ジャンゴ 2001/11/05-23:23
記事番号13855へのコメント
アックンさん、ありがとうございます。

イベント処理例難しいそうですが、頑張って会得したいと思います。
これからもよろしくお願いします。

戻る