過去の桐井戸端BBS (桐ver.9)
19417 キー入力コマンドはあまり自由がきかないのですが何かいい方法がありますか 小畑 泰偉 2003/03/16-00:54
桐Ver9を使っています
一括処理コマンドの キー入力 を使いたいのですが,
ヘルプを読んでも 開始行うんぬん とVer5の使い方しか記述していません.
困っています.

つまり フォーム上で数値を入力して,それを変数に代入,そのデータをもとにデータの絞込みを実行したいわけです.
別に キー入力にこだわっている訳ではありません.
私の知識ではこれ位しか思い浮かばないのです
ほかに何かいい方法があれば教えてください
よろしくお願いします.
19425 Re:キー入力コマンドをもっと自由に うにん 2003/03/16-11:40
記事番号19417へのコメント
テキストオブジェクトを作ってソースを変数にすれば簡単です。
19428 桐ver.9でのキー入力(補足) 佐田 守弘 2003/03/16-13:29
記事番号19425へのコメント
うにんさんが書かれている様に、Windows版桐では、
MS-DOS版桐の様なキー入力コマンドは、原則として使えません。

なぜかと言うと、キー入力コマンドは、MS-DOSの画面で行と桁の入力位置を指定して行うコマンドですが、
Windowsの画面には、行と桁の概念が存在しないためです。

キー入力コマンドは、MS-DOS版桐の一括処理機能の引継のために
一括処理実行ウィンドウと呼ばれる、MS-DOS版桐の一括処理を
実行する専用のウィンドウだけで有効です。

Windows版のフォーム画面では、テキストオブジェクトで入力すれば
キー入力コマンドと、ほぼ同じ機能になります。

●必要な時だけ表示したい
さて、MS-DOS版のキー入力コマンドは、必要な時だけ表示します。
これと同じにするなら、通常は非表示にしておき、入力させたい
時だけ、表示に変えて、フォーカスをここに移動させます。

●入力が終わったら、次の処理に進みたい
ソース値更新イベントを使って行います。

佐田守弘(KS-00119)
19429 説明不足でした 小畑 泰偉 2003/03/16-13:37
記事番号19425へのコメント
うにんさん

>テキストオブジェクトを作ってソースを変数にすれば簡単です。

説明不足で申し訳ありませんでした
私のやりたいことは,
 コマンドボタンをクリックすれば,テキストオブジェクトにカーソルが移動して入力を促して欲しいのです
 テキストのソースを変数にしてやってみましたが,フォーカスの移動,入力プロンプトのところの操作方法がよくわかりません
 Kevwを使ってやっています.よろしくお願いします
19431 Re:説明不足でした 通りすがり 2003/03/16-13:45
記事番号19429へのコメント
>Kevを使ってやっています

というか、コマンドボタンからの実行であれば、入力を促したいテキストボックスを「hogehoge」とすると

機能名  機能パラメーター
訂正   "hogehoge"

でカーソルが移動して、訂正モードになりませんか?

KEVを使わなくても、可能ですが?

19433 Re:キー入力コマンド KH 2003/03/16-15:00
記事番号19428へのコメント
佐田先生、こんにちわ。

ここの本題には多分関係なくて、どうでも良い事なのですが、以下の部分

>キー入力コマンドは、MS-DOS版桐の一括処理機能の引継のために
>一括処理実行ウィンドウと呼ばれる、MS-DOS版桐の一括処理を
>実行する専用のウィンドウだけで有効です。

は、ちょっと誤解を受けるかなと思いまして投稿しました。

キー入力コマンドは一括処理実行ウィンドウでなくても実行できますが、
表示位置を制御出来ないで中央に表示するはずだと思います。
19435 ありがとうございます 小畑 泰偉 2003/03/16-16:20
記事番号19431へのコメント
ありがとうございました
出来ました
今後ともよろしくお願いします
19441 Re:キー入力コマンド 佐田 守弘 2003/03/17-02:03
記事番号19433へのコメント
KHさん
>キー入力コマンドは一括処理実行ウィンドウでなくても実行できますが、
>表示位置を制御出来ないで中央に表示するはずだと思います。

言われてみると確かにそうですね。

佐田守弘(KS-00119)
19500 キー入力コマンドをもっと自由に 再度質問します 小畑 泰偉 2003/03/19-20:59
先日は皆さんお答えいただきありがとうございました
おかげさまで 何とか入力するところまではこぎつけました
ところが 入力後の処理方法がわかりません
佐田先生の言われる ソース値更新イベントでいろいろやってみましたがうまくいきません
具体的には 入力中 ESC で終了したときはその結果をどのようにして取得するのでしょうか?
 また入力し終わっても 画面表示="0" で消えてくれません
項目領域が黒いままです
具体的なアドバイスをお願いします
19506 テキストボックスの表示・非表示でキー入力 佐田 守弘 2003/03/19-22:24
記事番号19500へのコメント
小畑 泰偉さん
タイトルには「キー入力コマンド・・・」と書かれては下りますが、
私が伝えた方法でという事なので、キー入力コマンドを使う方法ではなく
入力用のテキストボックスを表示、非表示切り替えする方法で行っているとの前提で話を進めます。

しかし、書かれている
 >また入力し終わっても 画面表示="0" で消えてくれません
 >項目領域が黒いままです
私はその様な現象を見た事がないので、原因は分かりません。
基本的な方法で何か間違いがあるような気がします。

以下は、より詳しい説明ですが、作られているフォームとイベントでの
オブジェクト名が分かりませんから、あくまでも雛型です。

●キー入力値を代入する変数を定義しておく
フォーム上で局所変数として、値を代入する変数を定義しておいて下さい。
ここでは「&入力値」と仮定します。

●キー入力用のテキストボックス
フォーム上に適当な大きさのテキストボックスを作り、ソースには&入力値を設定します。
オブジェクト名は「t入力欄」と仮定します。
また画面表示は非表示に設定しておいて下さい。

●テキストボックスを表示させるコマンドボタン
仮に「検索」というコマンドボタンを作ります。この機能名に「手続き実行」
「入力欄表示」と設定して下さい。

●「入力欄表示」の一般手続を作る
イベントファイルの中に、この手続名で一般手続を作って下さい。
次の様になります。
---------------------------------------------
手続き定義開始 入力欄表示()
 オブジェクト操作 @t入力欄.画面表示 = "1"
 メソッド呼び出し @t入力欄.フォーカス設定()
 メソッド呼び出し @フォーム.交信モード設定(2)
手続き定義終了
---------------------------------------------
以上のコマンドで、入力欄を表示に切り替えて、フォーカスを移動し、
訂正モードに切り変えます。

●t入力欄のソース値更新イベント
このオブジェクトを選んでイベントのタブを開き、ソース値更新イベントを
ダブルクリックして、イベントハンドラを作って下さい。
その中に、以下の様なコマンドを記述します。
---------------------------------------------
 オブジェクト操作 @t入力欄.画面表示 = "0"
 <その後に実行したいコマンドのリスト>
  例えば検索や絞り込みを行うなど
---------------------------------------------
上記の1行目のコマンドで入力欄が非表示になるはずですが。 
非表示にした後は、&入力値の値を使って、適宜処理を行うコマンドを作成して下さい。

●入力中のESC
何のためにESCを押させるのでしょうか。検索などを中断するのであれば、
単に無入力でのEnterキーではだめですか?その方が操作が楽だと思います。
この場合、&入力値が未定義であるかどうかで判断が可能です。

どうしてもESCキーの押下を確認したい場合には、通常はキー入力イベントを使い、
どのキーコードが入力されたかで判断します。
またESCきーだけについては、フォームのオプションのタブに、
ESCキーが押された時に実行されるコマンドボタンを設定できます。
「ESC押下時」の様なコマンドボタンを作っておき、
このボタンで、ESCが押されたときに実行したい一般手続を呼び出します。

佐田守弘(KS-00119)
19507 Re:キー入力コマンドをもっと自由に 再度質問します 通りすがり 2003/03/19-22:24
記事番号19500へのコメント
>入力中 ESC で終了したときはその結果をどのようにして取得するの

「入力後」イベントなら拾えます。
「ソース値更新」イベントと組み合わせてみては?

>項目領域が黒いままです
このテキストボックスが表示状態でカーソルが当たっているからですね。

前回の質問から推察するに、どうしても「キー入力コマンド」のイメージが強いように思えます。
やりたい作業が、
「絞り込み用コマンドボタンをクリック」→「条件の入力」→「絞り込み」
ですよね。

発想を変えて、
「条件をテキストボックスに入力」→「絞り込み用コマンドボタンで絞り込み」の手順ではどうですか?
面倒なイベントを組まなくても良いと思います。ESCで逃げても、単に表示状態になるだけだし。

具体的には
テキストボックスを用意し、ソースに条件用変数を入れます。「&条件」など。
絞り込み用コマンドボタンには

機能名     機能パラメーター
表示      確定
絞込み_比較式 [○○]=&条件

と仕込めば?

もちろん、条件を入力したあとに、イベントで自動的に絞込みを実行させることも可能です。
(この場合には、コマンドボタンはいらない)

19508 テキストボックスでキー入力(補足) 佐田 守弘 2003/03/19-22:34
記事番号19506へのコメント
小畑 泰偉さん
前コメントに書いた検索語句を入力するテキストボックスは、
常に表示してあっても構わないのではないでしょうか。

そして隣に「検索実行」のコマンドボタンを作っておきます。
キー入力を行い、コマンドボタンを押せば、検索の実行ができます。

ここまででき上がったら、更に一歩踏み込んだ話になりますが。
入力欄のソース値更新イベントの中で、メソッド呼び出しコマンドを
使って、上記の「検索実行」ボタンを実行させれば、入力終了後直ちに
検索などが行われ、当初の質問の様な操作性になります。

佐田守弘(KS-00119)
19512 やってみましたが ?? 小畑 泰偉 2003/03/19-23:44
記事番号19506へのコメント
佐田先生 先生のおっしゃるとおりにやってみました

手続き定義開始 伝票No入力::マウス左クリック(長整数 &マウス位置[2],長整数 &明細
               番号,長整数 &フラグ,参照 長整数 &処理中止)
      オブジェクト操作 @伝票No.画面表示="1"
      メソッド呼び出し @伝票No.フォーカス設定()
      メソッド呼び出し @フォーム.更新モード設定(2)
手続き定義終了

手続き定義開始 伝票No::ソース値更新()
   if  (&伝票No=#未定義)
      オブジェクト操作 @伝票No.画面表示="0"
   else
        表 "damy.tbl",索引="伝票No"
        絞り込み [伝票No]=&伝票No
      if  (#終端行)
      中止 表,編集対象表
        メッセージボックス "伝票No","この伝票Noは登録されていませ 
                   ん",アイコン=E
        オブジェクト操作 @伝票No.画面表示="0"
      else
        中止 表,編集対象表
        オブジェクト操作 @伝票No.画面表示="0"
        フォーム呼び出し 日報表示画面, 許可作業=*
     end
   end
手続き定義終了

上記のようにしてみましたが,結果はだめでした
どの場面でも 伝票No が消えません カーソルが点滅したままです
ESCで入力中止をすれば黒くなります(表示状態?)
どこかおかしいところがあるのでしょうか?
よろしくお願いします
19513 Re:キー入力コマンドをもっと自由に 再度質問します 通りすがり 2003/03/19-23:52
記事番号19507へのコメント
>メソッド呼び出し @フォーム.交信モード設定(2)
裏技? (^^ゞ

いわゆる一つの(最近の口癖です)アプローチとして、条件入力用のフォームを立ち上げるといったことも考えられます。
キー入力コマンドと同じような入力フォームを別に立てることです。
こちらのフォームで、入力した条件の制御やらチェックを行う事も可能ですよね。

サンプルを
こちら
に上げておきました。

こんな挙動をお望みなのでは?

19516 Re:やってみましたが ?? 悲しげ 2003/03/20-00:42
記事番号19512へのコメント
どもっ、小畑さん、
何が問題なのかがよく判らないまま横から失礼します。(^^;)

>どの場面でも 伝票No が消えません カーソルが点滅したままです
>ESCで入力中止をすれば黒くなります(表示状態?)

現在フォーカスしているオブジェクトの画面表示をオフにすることは
できなかったと思います。もし、この問題であるのなら

手続き定義開始 伝票No::ソース値更新()
 *method @フォーム.再描画(0)
 if  (&伝票No=#未定義)
  オブジェクト操作 @伝票No.画面表示="0"
  method @他オブジェクト.フォーカス設定()
 else
  ・・・・
  else
   中止 表,編集対象表
   オブジェクト操作 @伝票No.画面表示="0"
   method @他オブジェクト.フォーカス設定()
   *method @フォーム.描画更新()
   *ウィンドウ更新 &hwindow
   フォーム呼び出し 日報表示画面, 許可作業=*

のように、フォーカスを他オブジェクトに逃がしてやらないとうまく
行かない場合を経験しています。
あるいは、必要に応じて*印を付けた記述を使うとか。

戻る