過去の桐井戸端BBS (桐ver.8)
7722 テキストボックスでリターンを監視したい みすず 2000/09/19-08:34
あるフォームが有るとします。
コマンドボタンが 「OK」 と 「キャンセル」が有り、テキストボックスが1個有ります。
テキストボックスで文字を入力後、リターンを押すと「OK」の機能を実行、
マウスで「キャンセル」ボタンをクリックすると、「キャンセル」の機能を実行
マウスで「OK」ボタンをクリックすると、「OK」の機能を実行

この処理がイベントで、どうしてもできません。
7724 Re:テキストボックスでリターンを監視したい 尾形 2000/09/19-09:04
記事番号7722へのコメント
どうも、みすずさん

「OK」ボタンのフォーカス設定を自動→許可に変更してみては?
テキストボックスの入力後ボタンにフォーカスが移りますので
そこで再度リターンでどうでしょうか?
入力確認の意味でもよろしいかと。
7725 Re:テキストボックスでリターンを監視したい みすず 2000/09/19-09:29
記事番号7724へのコメント
>「OK」ボタンのフォーカス設定を自動→許可に変更してみては?
>テキストボックスの入力後ボタンにフォーカスが移りますので
>そこで再度リターンでどうでしょうか?
>入力確認の意味でもよろしいかと。

バーコード入力をさせる関係上、リターンのみで実行したい
のです。(バーコードは、コード文字と最後にリターンを付加するのみです。)
さらに、バーコードが無い場合に備えて、手打ちの後リターンで実行、または手打ちの後
「OK」で実行も出来るようにしたいのです。
かなり無理がありますが・

7727 Re:テキストボックスでリターンを監視したい suu 2000/09/19-10:13
記事番号7725へのコメント
みすずさんはじめまして。
私もバーコード入力がしたくて、下記のようなイベントを組んでいます。
実際にはまだバーコードの入力機器が手元にないので、試していませんがたぶん大丈夫だと…。

バーコード入力のテキストボックスのあるフォームのイベントです。

手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
メソッド呼び出し @フォーム.更新モード設定( 2 )
手続き定義終了

手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,長整数 &フラグ,参照 長整数 &処理中止)
変数宣言 文字列{&focus}
メソッド呼び出し @フォーム.フォーカスオブジェクト取得( &focus )
 if(&focus="tバーコード")
if(&仮想キーコード=13)   /* [Enter] */
  method @フォーム.更新モード設定(0)
  method @OK.実行()
end
end
if(&仮想キーコード=27)   /* [Esc] */
  method @フォーム.更新モード設定(0)
  method @キャンセル.実行()
end
手続き定義終了
7728 Re:テキストボックスでリターンを監視したい 佐田 守弘 2000/09/19-10:31
記事番号7725へのコメント
みすずさん
御質問の主旨は、テキストボックスの通常の入力編集モードではなく、キーを打てばその文字が確定状態で入力され、
ENTERでは入力の承認、ESCでは取り消しと言った操作をしたいのだろうと思います。
これは可能です。ただしとても面倒です。具体的なイメージで言えば、通常のテキストボックスの編集機能を使うのではなく、
編集機能そのものを自分で作ります。

●編集機能を自分で作る方法
プログラムの開発はすぐにはできないので、ここでは考え方のみを提示します。
あるテキストボックス(実際にはテキストボックスとすべきかどうかも検討課題)に
フォーカスが移った時、押されたキーの監視モードに入ります。
押されたキーが文字列であれば、その文字を拾って文字列を記憶している変数にその文字列を付け加え、結果を表示します。
これであたかもキー入力されたように見えます。
押されたキーがDELキーであれば、1文字削除をします。
ENTERとESCであれば、入力ルーチンを抜けます。

●入力モード
通常の様に左詰めで入力し、キー入力に伴ってカーソルが右に移動して行く方式と、
電卓の様に右詰めで入力する方式のどちらも作り出せます。

●いくつかの検討課題
この方法はかつてN-88BASIC時代に、input命令で入力させるのでは、上下のカーソル
キー操作が行われると不都合が発生するために考え出した経験があります。
(大ざっぱに数百ステップ程度だったと思います。)

おそらく、桐でもこの方法を使えるだろうと思いますが、いくつか検討すべき課題は残ってます。
・カーソルキー操作:この処理が結構面倒です。不可能ではないのですが、電卓の様に1文字でも間違えたら、
最後の文字だけを訂正するか、オールクリア以外の訂正を認めないにする方が簡単です。
・入力に使うオブジェクト
通常のテキストボックスだと、編集機能が有効になってしまうので、計算式を設定するなど、
編集不可能な状態にしておくことが必要でしょうね。

佐田守弘(KS-00119)
7729 Re:テキストボックスでリターンを監視したい みすず 2000/09/19-10:33
記事番号7727へのコメント
フォームでキーダウンイベントを利用するとは思いつきませんでした。
見事に実現できました。桐8は桐5DOS以上に奥が深いですね。
どうもありがとうざいました。
7730 Re:テキストボックスでリターンを監視したい みすず 2000/09/19-10:39
記事番号7728へのコメント

>>フォーカスが移った時、押されたキーの監視モードに入ります。
>押されたキーが文字列であれば、その文字を拾って文字列を記憶している変数にその文
>字列を付け加え、結果を表示します。これであたかもキー入力されたように見えます。
>押されたキーがDELキーであれば、1文字削除をします。
>ENTERとESCであれば、入力ルーチンを抜けます。

テキストボックスでキーダウンイベントが無かったので、てっきり無理だと思いこんでいました。
フォームのキーダウンイベントで監視すればよかったのですね。
目から鱗です。ありがとうございます。

戻る