過去の桐井戸端BBS (桐ver.8)
10253 発生したイベントはいつ終わる? 若葉マークン 2001/03/13-16:08
いつも質問ばかりですみません。
どなたか教えてください。
発生したイベントはいつ終わるのでしょうか?
イベントの手続きの記述が終了した時に自動的に終わるのでしょうか?
ならば"&処理中止"等のパラメータの役目は何なのでしょうか?
……??
10254 Re:発生したイベントはいつ終わる? 宮城 2001/03/13-16:59
記事番号10253へのコメント
>発生したイベントはいつ終わるのでしょうか?

細かいことを言うようで申しわけないんですが、「イベント」は一瞬で終わってます。
「キーダウン」など、「キーが押されているあいだは、繰り返し発生」というものもあるようですが。

で、質問が「発生したイベントによりキックされたイベントハンドラはいつ終わるのでしょうか?」と読み替えますと、
「手続き定義終了」に到達した段階で止まります、がお答えとなります。

>ならば"&処理中止"等のパラメータの役目は何なの
>でしょうか?
>……??

イベントハンドラ終了後、処理継続するか、中止するかですね。
KV8CMD2.PDF P.557。

「トレース出力ウィンドウ」を使うとよくわかりますよ。(というか、「使わないとよくわかりませんよ」というべきか。(^^;; )
10255 Re:発生したイベントはいつ終わる? 若葉マークン 2001/03/13-17:50
記事番号10254へのコメント

>「トレース出力ウィンドウ」を使うとよくわかりますよ。(というか、
>「使わないとよくわかりませんよ」というべきか。(^^;; )

「トレース出力ウィンドウ」 なるほど なるほどありがとうございました。
今、過去ログを検索すると、宮城さんのコメントで同様のものがありました。
お手間を取らせました。感謝
10256 イベントの発生と終了 佐田 守弘 2001/03/13-18:01
記事番号10253へのコメント
若葉マークンさん
 >発生したイベントはいつ終わるのでしょうか?
 >イベントの手続きの記述が終了した時に自動的に
 >終わるのでしょうか?
との事ですが、イベントの概念について確認の意味で説明しておきます。

●元来のイベントとは
イベントの元来の意味は、桐の上で行われた何らかの操作を言います。
例えばフォーム開始イベントであれば、フォームが開かれた主幹にイベントが発生し、その直後に終了します。
一方キーダウンイベントは、キーが押されている間、イベントが発生している事になります。
この様に、イベントとは元来、ある操作、その操作が行われた状態を言います。

●イベント処理でのイベントとは
さて、イベント処理でのイベントとは、上記のような物理的なイベントが起きた時に発生させる割り込み処理の様なものです。
フォーム開始、ソース値更新の様に、1回だけ起きるイベントもあれば、キーダウンイベントの様にキーが押されている間イベントを発生し続けるものもあります。

●イベントハンドラとの関係
通常、我々が「イベントで処理する」という言葉で表現し、作成するものはイベントではなく、イベント処理を行うイベントハンドラです。
イベントハンドラとは、手続き定義開始から手続き定義終了までの間に書かれたコマンド群を言います。

そして、イベントが発生すると割り込みが掛かって、対応するイベントハンドラが実行されます。
つまり、イベントは引き金、あるいは起動スイッチの様なものです。
そしてこの引き金で実行が開始するのは、イベントハンドラの中の一連のコマンドです。

この説明で分かると思いますが、多くのイベント、例えばフォーム開始やソース値更新などのイベントでは、イベントハンドラが呼び出された瞬間には、
もうイベントが終了しています。
つまりそのイベントハンドラを呼び出すために瞬間的に引き金を引いただけです。
ただしイベントハンドラの中の処理は、それが時間が掛かるものであったり、ループを繰り返すものであれば、引き金が元に戻っても、
終わる訳ではなく、そのまま走り続けます。

ですから後はイベントハンドラ内のプログラムの問題であり、必要に応じてループを終了する等の必要があります。

佐田守弘(KS-00119)
10258 Re:&処理中止<>0で中止されるのは? 宮城 2001/03/13-18:55
記事番号10255へのコメント
>イベントハンドラ終了後、処理継続するか、中止するかですね。

これが何を意味するかは議論の余地ありのようです。

私は「キーアップイベント」に何か定義してあった場合のことだろうと解釈しておりましたが、やってみると平気で発生します。

何のこっちゃ、と PDFとにらめっこしてみると・・・。

「桐と Windowsが割り当てたキーの機能をすべて無効にするために」

本当かしら? だとすると、KEVの記述が最優先で実行されるということになるけども・・・。
実験はしてみますが、ご存じのかたにはぜひご知見をご披露いただきたく。m(__)m


10259 Re:&処理中止<>0で中止されるのは? 宮城 2001/03/13-19:01
記事番号10258へのコメント
SOS! 桐と Windowsで F1にキー割り当てするやりかたがわからない。
惨め。(;_;)

10260 Re:&処理中止<>0で中止されるのは? 宮城 2001/03/13-19:27
記事番号10259へのコメント
桐で Aに「閉じる」を割り当て、F1を押したのと同様の機能を定義してみると、たしかに「閉じる」機能は死んでいます。
10261 Re:&処理中止<>0で中止されるのは? 宮城 2001/03/13-19:35
記事番号10260へのコメント
&処理中止=1を殺すと・・・、同様の機能(実はあるフォームを開く)の実行ののち、ただちにそれを閉じております。なるほど。

10264 Re:&処理中止 悲しげ 2001/03/13-22:15
記事番号10258へのコメント
何が判らないのかが判らないのですが、「&処理中止」パラメータが出るイベントは、htmlヘルプでざっと見た限りでは、

キーダウン
システムキーダウン
マウス左クリック
マウス左ダウン

の4つのようです(見落としがあるかもしれませんが)。
ちなみに、宮城さんは#10258で「キーアップ」イベントを例示していますが、そのイベントでは&処理中止パラメータはありませんから、
なぜそれを挙げたのかの意図がよく判りませんです。勘違いでしょうか。(^^;)

さて、(過去ログにもあるかとは思いますが)「&処理中止」の意味を簡単に書けば、これは桐が元来持っている機能を一時的に殺すことだと云えます。
一番端的な例として、「キーダウン」イベントで考えてみます。
例えば……そうですね、[/]キー、これは(スラッシュメニューを利用する設定にしてある時に限りかもしれないが)
桐の機能としてはスラッシュメニューが出るはずです。
ここでこのキーに、キーダウンイベントにて、例えば「行追加」を割り当てたとします。
すると、[/]キーを押した時は、確かに行追加にはなりますが、続いてスラッシュメニューまで出てしまいます(順番は逆だったかもしれない)。
[/]キーを押した時に、設定した挙動だけを行わせ、(桐の本来の機能であるところの)スラッシュメニューを出さないようにしたければ
(つまり当該キーの桐本来の機能を一時的に殺したければ)
そのイベントの当該ケース(if)範囲内に
  &処理中止=1
のように記述します。
代入値は2以上でも構わないようでして、ともかく&処理中止>0状態にさせると云うことです。
逆に云えば&処理中止=0(または未定義)状態が桐本来の挙動状態ってことになるようです。
なお、桐本来の機能を殺すのは、当該イベント発生時だけで、他のイベントではまた桐本来の機能が生き返っているはずです。

こんなところで御理解いただけましたでしょうか?

ps:
そうそう。更新中のモードではなく、表示モードで考えて下さい。
その意味じゃ[/]キーも、あまりよい例ではなかったですね。(^^;)
10266 ファンクションキーに機能を割りつけるのは 悲しげ 2001/03/13-22:27
記事番号10259へのコメント
>桐と Windowsで F1にキー割り当てするやりかたがわからない。

ここで「Winsows」と書いてある意図がよく判らないので、さりげなく無視して(^^;)

ファンクションキーに機能を割り当てるのは、一般的には「キーダウン」イベントです。[f・1]キーだと

  ケース(&仮想キーコード=112)
   &処理中止=1
   ・・・・・・

のように記述したらいかがでしょう?
ただ、[f・10]キーだけは使えなかったような気がする。
10267 Re:発生したイベントはいつ終わる? 悲しげ 2001/03/13-22:37
記事番号10253へのコメント
>発生したイベントはいつ終わるのでしょうか?

この質問に一般的に答えることはできません。(^^;)
そのイベントの種類や、その中で行わせる処理・手続きの組み立て方などによって、それぞれ終わり方は異なると思います。
この辺りは、試行錯誤で会得していくしかなさそうな・・・・。

あ、既に佐田さんからコメントされてましたね。(^^;)

ひとつ、覚えておくと便利なことは、そのイベントから強制的に脱出するのは「手続き終了」コマンドです。
前にも書いたことがあるような記憶もありますが、イベントハンドラ内の「手続き終了」は、DOS桐のそれと同様の働きはしますが、
さらに、イベントハンドラの終了位置(つまり「手続き定義終了」の位置)を一時的に上に引き上げると考えた方が妥当性があるかな、とも感じています。
10268 Re:ファンクションキーに機能を割りつけるのは mudagami 2001/03/13-23:47
記事番号10266へのコメント
 キーダウンイベントでFunctionキーの桐本来の機能を中止したり、別の機能を割り当てたりということは、便利でよく使っていますが、
困ったことがあります。
 桐が表示しているFunctionキーを、直接手で押した場合は当然中止なり割り当てた機能なりが実行されるのですが、
マウスでFunctionキーをクリックすると桐本来の機能が実行されてしまいます。
キーを押すイベントハンドラのなかで割り当てたことであって、マウスのクリックとは関係ないため当然と言えば当然ですが。
マウスでクリックした時もキーダウンイベントで割り当てたFunctionキーの状態にしたいのですが、どのようにすればよいのでしょうか?
桐のFunctionキーを非表示にし、仮のFunctionキーをフォーム上に作るしかないのでしょうか?
 もうすこし自分でしらべた上で質問をするつもりでしたが、関連する質問が出たついでにお願いいたします。

10271 Re:&処理中止 宮城 2001/03/14-00:58
記事番号10264へのコメント
>ちなみに、宮城さんは#10258で「キーアップ」イベントを例示しています
>が、そのイベントでは&処理中止パラメータはありませんから、なぜそれ
>を挙げたのかの意図がよく判りませんです。勘違いでしょうか。(^^;)

もう一回私の記述を呼んでもらえませんか? あにさん(にしてまおうか)。

私は中止パラメータがなければどうなるのかを言っているのでおじゃる。(^^;;

10276 Re:&処理中止 宮城 2001/03/14-11:32
記事番号10271へのコメント
悲しげさん、失礼しました。
思い込んでいたのでつい記述がおろそかになりました。

私は「キーダウン」イベントで「中止」されるのは何なのかを書いていたのです。
だから、「キーアップ」じゃなかろうかと発想した次第で。

自分のコミュニケーションの技術もまだまだです。赤面。
10277 Re:&処理中止 若葉マークン 2001/03/14-12:53
記事番号10264へのコメント
>つまり当該キーの桐本来の機能を一時的に殺したければ)
>そのイベントの当該ケース(if)範囲内に
>  &処理中止=1
>のように記述し

…という事は
例えば、コマンドボタンに"マウス左クリック"イベントを設定している時のイベントハンドら内の"&処理中止"パラメータは無意味なものということなのでしょうかね?
10287 Re:ファンクションキーに機能を割りつけるのは 悲しげ 2001/03/14-19:03
記事番号10268へのコメント
どもっ、mudagamiさん
ははぁ、なるほど、
私が書いたのは、特殊なポップアップまたはオーバラップ形式での想定でした。
(つまりファンクションキーが画面に表示されない状態)
そこでファンクションキー全般を殺したいのなら、「キー変換メソッド」のモードの4をお試しになってはいかがでしょう?
実は私、キー変換メソッドを未だ使ったことないんですけど(^^;)、確かにそのような場合だと使う必要がありそうですね。(^^;)
10288 Re:&処理中止 悲しげ 2001/03/14-19:05
記事番号10276へのコメント
どもっ、宮城さん、
#10258と#10271と#10276を読み直してみましたが、やはり仰る意味が判り
ませんでした。でも、この件はもう「済」でいいんですよね?
10289 Re:&処理中止 悲しげ 2001/03/14-19:07
記事番号10277へのコメント
どもっ、若葉マークンくん(?)
>…という事は
>例えば、コマンドボタンに"マウス左クリック"イベントを設定している時の
>イベントハンドら内の"&処理中止"パラメータは無意味なものということな
>のでしょうかね?

「マウス左クリック」イベントは特にコマンド釦に限ったことではなく、テキストにもラベルにも設定できます。
で、流石にテキストやラベルに&処理中止=1を設定するようなケースがありうるとは想像できませんが、
コマンド牡丹についてなら、面白いそうなのでちょっと試してみました(本当はご自分で試す方がいいのではありますが)。(^^;)

え〜、例えば牡丹1の機能として「ズームイン」、牡丹2の機能として「ズームアウト」を設定したとします。
そして、左クリックイベントでは次のような記述とします。
---------------------------------------------------------------
手続き定義開始 b牡丹1::マウス左クリック(長整数 &マウス位置[2],……
 確認 "ズームインする?",&実行リターン
 条件(&実行リターン<>1) &処理中止=1
手続き定義終了

手続き定義開始 b牡丹2::マウス左クリック(長整数 &マウス位置[2],……
 確認 "ズームアウトする?",&実行リターン
 条件(&実行リターン<>1) &処理中止=1
手続き定義終了
----------------------------------------------------------------
さて、この結果がどうだったかと云いますと、確認時にOKを押すとズームしまして、キャンセルだと変わらず……と、こう云うことです。
つまり、「無意味」ではなくて、必要に応じて大いに「意味がある」ようです。

併せて、コマンド牡丹の実行順序が、先ずkev(での左クリックイベント)、続いて牡丹の機能となることも判りました。
と同時に、今までは、kevと牡丹の機能の両方に処理を設定するなんぞ有害無益と思っていましたが、
どうしてどうして、場合によってはうまく使い回すことができることを知り得ました。(^^)v
10291 Re:&処理中止 悲しげ 2001/03/14-20:44
記事番号10288へのコメント
あ、ようやく判りました。凄い蛍光燈ですいません。
つまりは、「キーダウン」イベントハンドラ内で、&処理中止=1 を記述したら、
「キーアップ」しない、即ちキーがへっこんだままだと勘違いしたって訳ですね。
私の想像力の限界外でした。(^^;)
10293 イベント-&処理中止は桐本来の処理機能の中止です 佐田 守弘 2001/03/14-22:09
記事番号10253へのコメント
若葉マークンさん
最初の質問のタイトルと文面から主旨が理解できず、#10256:「イベントの発生と終了」では的外れなコメントを書いてしまいました。
でも、意味がある内容と思いますので、このまま残しておきます。

●「&処理中止」パラメータの意味について解説しておきます。
このパラメータの名称などから、あたかも実行されたイベント処理を中断するように思えてしまいますが、
実は、このパラメータの意味する「処理中止」とは、起動されたイベントハンドラの中止ではありません。

&処理中止パラメータは、参照パラメータで、ここに1ないし0を入れると、その結果が桐に戻されます。
そして、オンラインヘルプにもある通り、規定値は1(中止しない)ですが、0を代入しておくと処理中止になります。

この処理中止とは桐の本来機能を中止する働きをします。これをキーダウンイベントで「/」キーを押す例で説明します。
桐ver.5互換機能に設定している場合、「/」キーを押すと、スラッシュメニューが開きます。これが桐の本来機能です。
キーダウンイベントが設定されている場合に、「/」キーが押されると、まず最初にイベントが発生し、対応するイベントハンドラが実行されます。
イベントの実行は、真っ先に行われるので、スラッシュメニューを開く処理は、呼び出されたイベントハンドラの終了後になります。
そして、イベントハンドラの中で、&処理中止=0を行っておくと、これが桐に戻されて、
キーダウンイベントを起こしたキー操作がなかったものと扱われます。
つまり、スラッシュキーであれば、スラッシュキーが押されていないのと同じ扱いになり、スラッシュメニューは開かれません。

実際には、スラッシュメニューを開くのを禁止するのであれば、押されたキーが何であるかを判定し、スラッシュキーであれば処理を中止する、
それ以外のキーであれば、中止しないといった判定が必要になります。

●キーだけで特定の値を入力する
別の例で説明します。
【想定例】:[品名]の項目には通常はキー入力するのだが、テンキーを押した場合限って、
数字を入力するのではなく、「1は米、2は麦」という様に入力したい。
多分この様な事をしたい要望もあるかと思いますが、この様な用途に利用できるかと思います。
キーダウンイベントでの処理中止は、項目値の入力の際にも有効だそうです。
つまり、通常ならテキストオブジェクトの編集として扱われるキー入力を無効にするわけです。
この場合、オブジェクトが目的オブジェクトであるかどうかを確認した上で、
キーダウンイベントで押されたキーを判定します。もし押されたキーがテンキーであった場合には、
処理中止を設定し、項目値代入コマンドなどで項目値を入力します。
それ以外のケースは処理を中止せず、通常の編集操作とします。

佐田守弘(KS-00119)
10295 &処理中止の値が逆ですよ(^^;) 悲しげ 2001/03/14-22:35
記事番号10293へのコメント
(常駐している訳ではないければ、またまた書きます)
佐田さ〜ん、

>&処理中止パラメータは、参照パラメータで、ここに1ないし0を入れると、
>その結果が桐に戻されます。そして、オンラインヘルプにもある通り、規定値
>は1(中止しない)ですが、0を代入しておくと処理中止になります。

逆です。(^^;)

&処理中止=1 → 中止する
&処理中止=0 → 中止しない(規定値、そのまま実行)

以下も逆です。

>そして、イベントハンドラの中で、&処理中止=0を行っておくと、これが桐に
>戻されて、キーダウンイベントを起こしたキー操作がなかったものと扱われま
>す。つまり、スラッシュキーであれば、スラッシュキーが押されていないのと
>同じ扱いになり、スラッシュメニューは開かれません。
10296 Re:&処理中止の値が逆ですよ(^^;) 悲しげ 2001/03/14-22:41
記事番号10295へのコメント
より正確に云えば、&処理中止のデフォルト(規定値)は未定義です。
「手続き定義開始」時に変数として宣言されている訳ですが、この時点では変数に値が代入されている訳ではありませんし。
そして、そのまんまハンドラ内で &処理中止 に値を代入しなければ、通常の挙動になる訳です。
もちろん、&処理中止=0 と値を代入しても同じことではありますが。
10299 御愛嬌という事で(^^;) 佐田 守弘 2001/03/15-01:34
記事番号10296へのコメント
悲しげさん
御指摘どうも有難うございました。
まあ、言いたい事の大勢には影響ないという事で、_(_^_)_

佐田守弘(KS-00119)

10309 Re:&処理中止 若葉マークン 2001/03/15-14:01
記事番号10289へのコメント
>面白いそうなのでちょっと試してみました(本当はご自分で試す方
>がいいのではありますが)。(^^;)
>
いろいろと時間をかけていただいて、ありがとうございます。
ほんとにいい勉強になりました。
しかし、まずはいろいろと自分で試してみて…というのが本当の礼儀ですよね。反省…

10310 Re:イベント-&処理中止は桐本来の処理機能の中止です 若葉マークン 2001/03/15-14:09
記事番号10293へのコメント
>若葉マークンさん
>最初の質問のタイトルと文面から主旨が理解できず、
>#10256:「イベントの発生と終了」では的外れなコメントを書いてしまいまし
>た。でも、意味がある内容と思いますので、このまま残しておきます。
>
>ぜんぜん的外れではありませんでした。
"イベントはそのイベントハンドラを呼出す引き金"とのご説明は、僕のイベントに対する理解の糸口を与えてくれたような気がします。
感謝
10322 だめでした!! mudagami 2001/03/15-21:48
記事番号10287へのコメント
 残念ながら、キー変換メソッドでもマウスのクリックは中止することは出来ませんでした。

戻る