過去の桐井戸端BBS (桐ver.8)
3510 機能キーの代用はどうすれば? 太郎 1999/11/26-17:02
桐5で以下のような処理をしてました

繰り返し &work1=1,5,1
 機能キー入力 入力待ち=しない
 編集表    &work1
 選択     [a]>1
 書き出し
繰り返し終了

ちょっと省略してますが、
表を次々に処理していくのに、途中で中止
したい場合、あるキーを押すと機能キーがそれを
受けて繰り返しを中断させてました。

桐8に置き換えるのに、同じ処理を
イベントの手続きに記述したいのですが
機能キーはイベントでは使用不可になってます。
何か良い方法はないでしょうか
よろしくお願いします。

3514 「機能キー入力」の代用と云うか 悲しげ 1999/11/26-20:58
記事番号3510へのコメント
どもっ、太郎さん、
「機能キー入力」コマンドの代用は、先ずは「キーダウン」イベント
で考えることができそうです。
と云うことで、これでうまく動くかどうかは判りませんが、一応次のようなものを考えてみましたので、
ちょっと試してみて下さい。うまく動かなければごめんなさい。(^^;)

V5の場合にどのキーで中断させていたのかは判りませんが、ここでは
Pauseキー(&仮想キーコード=19)を使うと仮定します。
懸案の繰り返し処理はボタン「b実行」で実行に入る、メイン部で繰り
返し制御用の変数「&制御F=0」が宣言されている等も仮定します。
---------------------------------------------------
手続き定義開始 b実行・・・・・
 &制御F=1
 繰り返し &work1=・・・・
  条件(&制御F=0) 繰り返し中止
  ・・・・・
 繰り返し終了
 ・・・・・
手続き定義終了

手続き定義開始 キーダウン・・・・
 if(&仮想キーコード=19 .and &制御F=1)
  &制御F=0,&処理中止=1
 end
手続き定義終了
----------------------------------------------------

あるイベント手続き内の繰り返しが、他のイベント手続きで発生させ
た値で制御できるかどうか、未確認ながら興味がありますので、この
際、実験台になっていただきたく・・・。(^^;)

3521 機能しないようです 太郎 1999/11/27-08:19
記事番号3514へのコメント
>あるイベント手続き内の繰り返しが、他のイベント手続きで発生させ
>た値で制御できるかどうか、未確認ながら興味がありますので、この
>際、実験台になっていただきたく・・・。(^^;)

どうも、悲しげさん。

実験しましたが、キーダウンを受け付けるのは
繰り返し終了後(手続き終了後かもしれませんが)みたいです。

キーダウンイベントに長い処理を割り付けていたら
それが途中で割り込みしたらおかしくなる
からですかね。

3524 繰り返し中止の制御 悲しげ 1999/11/27-12:29
記事番号3521へのコメント
どもっ、太郎さん、
やっぱし駄目でしたか。それは残念です。(;_;)

では見方を変えて、元の記述から再検討してみます。
-----------------------
繰り返し &work1=1,5,1
 機能キー入力 入力待ち=しない
 編集表    &work1
 選択     [a]>1
 書き出し
繰り返し終了
-----------------------
これからすると繰り返しは5回程度ですし、かつ処理の真っ最中に中断する訳でもないようですから、
1組の処理毎に逐一実行継続の有無を確認するだけでも、さほど手間ではないような気がします。
と云うことで、とても初歩的な方法で、中止は[Esc]キーしか利きませんが(^^;)
-----------------------
繰り返し &work1=1,5,1
 編集表    &work1
 選択     [a]>1
 書き出し
 if(&work1<5)
  確認 "○○を継続しますか?",&実行リターン
  条件(&実行リターン=0) 繰り返し中止
 end
繰り返し終了
-----------------------
なんてのは、やっぱ許せないですか?

3545 Re:機能キーの代用はどうすれば? いかすぱげてぃ 1999/11/29-14:30
記事番号3510へのコメント
太郎さんこんにちわ。

>桐8に置き換えるのに、同じ処理を
>イベントの手続きに記述したいのですが
>機能キーはイベントでは使用不可になってます。
>何か良い方法はないでしょうか
>よろしくお願いします。

少し(かなり)面倒ですが、例えば複数のイベントを工夫すれば代用することも可能です。

・基本的な考え方
 繰り返し処理をタイマーイベントで指定回数行わせる。

・処理の流れ
0)トリガーになるイベント、タイマーイベント、キーダウンイベントの3つを利
用する。
1)まず、イベントトリガーとなるイベント手続きを記述し、実際に行いたい処理
は独立ルーチンにして記述しておく。
2)トリガーイベント(1回目に相当)が終わったら
  1)オフ設定のタイマーイベントをオンにする。
3)タイマーイベントにより、自動的に2回目の実行に入る。
4)処理中に任意キーをした場合、キーダウンイベントにてフラグを立てる。(遅延対応)
5)タイマーイベントの先頭にてタイマーイベントをオフにして、フラグの値で処
理を継続するか判断する。

そんなこんなを適当に書いたものが次のものです。
*-------------------------------------------------------------------*
名札 メイン
変数宣言 文字列{&MSG},整数{&MSGh,&i&break}


手続き定義開始 トリガー::マウス左クリック(……)
&i=1
call 実行()
手続き定義終了

手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,……)
if(&仮想キーコード=27) */[esc]でブレーク
&break = 1
end
手続き定義終了

手続き定義開始 フォーム::タイマー1()
オブジェクト操作 ハンドル=&hwindow,@フォーム.タイマー1 = "0"
if (&break)
確認
&break = ""
else
call 実行()
&i=&i+1
end
手続き定義終了

手続き定義開始 実行()
*---------------------*
* 実際に行う処理記述
*---------------------*
if(&i<5) */ 繰り返した回数の制御 /*
オブジェクト操作 ハンドル=&hwindow,@フォーム{タイマー1 = "1",タイマー値1 = "1.0"}
end
手続き定義終了
*-------------------------------------------------------------------*

 結構面倒くさいですね。(^^;
 もっとシンプルな方法もありそうですね。うーん…

3557 Re:あきらめようかな・・・ 太郎 1999/11/30-08:24
記事番号3545へのコメント
悲しげさん、いかすぱさんどうもありがとうございます。

質問には5つの編集表を切り替えるような処理で
記述してますが、実はこれ書くのが面倒なので
こうしましたが、本当は変数でファイル名を指定
しながら何回も続くのです。
ですから、毎回確認するのはちょっと無理でしょう。

いかすぱさんの方法は今の私のレベルでは
難しそうです。後々読むのもなんかつらそう。

なんか、簡単にはいかないようですね。
途中中断させるのやめようかなと思います。
でも、この手法結構気に入って使ってたんですけど・・・。

戻る