過去の桐井戸端BBS (桐ver.9)
25670 イベントの実行順を固定したい ニューモンキー 2004/03/29-17:03
5個のテキストオブジェクト A・B・C・D・Eがあり、オブジェクトEにマウス左クリックイベントと
入力前イベントを設定してあります。
オブジェクトA・B・C・Dのいずれか又はすべてのオブジェクトに項目訂正(入力)操作を実行した後
オブジェクトEをクリックした場合でもマウス左クリックイベント→入力前イベントの順で実行させたいのですが
実行可能でしょうか。
オブジエクトA・B・C・Dはフォームで直接入力しているものも入力前イベントを使用して
入力しているオブジェクトもあります。
イベント等記述が必要でしたら御手数おかけしますが詳細にお願いしたいと思います。
25672 Re:イベントの実行順固定したい 宮城 2004/03/29-17:38
記事番号25670へのコメント
ニューモンキーさん、こんにちは。

>オブジェクトA・B・C・Dのいずれか又はすべてのオブジェクトに項目訂正
>(入力)操作を実行した後オブジェクトEをクリックした場合でもマウス左
>クリックイベント→入力前イベントの順で実行させたいのですが実行可能
>でしょうか。

イベント発生順は決まっており、マウス左クリックイベントが入力前イベントより前に動くことはないと思います。

cf.イベント発生順(次のサイト)
http://www2u.biglobe.ne.jp/~s_tanaka/pro/event/event01.htm

よって、「・・・場合でも」という記述には何か誤解がありやしませんでしょうか。

ただし、本件は入力前イベントハンドラにやりたい順にやりかいことを記述してしまえばよろしいかと思うのですが。
いかが?

25673 Re:イベントの実行順 宮城 2004/03/29-18:00
記事番号25672へのコメント
表示モードからクリックした場合、入力前イベントが動かず左クリックイベントが動きますね。
そういうことでしょうか。

25675 Re:イベントの実行順固定したい 佐田 守弘 2004/03/29-19:46
記事番号25670へのコメント
ニューモンキーさん
イベントとは、その事象(イベント)が起きた事によって、所定の処理(イベントハンドラ)を実行させる機能です。
宮城さんが紹介してるとおり、その発生順序は決まっています。
そしてイベントが生じなければ、イベントハンドラは実行されません。
質問の件は、マウスイベントと入力前イベントですが、マウスクリックイベントはマウス操作をしなければ発生しません。

質問文ですが、私は次の様に解釈しましたが、これで宜しいですか?
------------------------------------------------------
テキストオブジェクトA〜Eがあって、このうちEに対しては、マウス左クリックと入力前イベントが設定してある。
表示モードでEをマウス左クリックして編集する場合には、マウスイベントが起きてから入力前イベントが起きるが、
これは期待通りである。
しかし行追加や行訂正の場合、Dを編集した後、フォーカスがEに移動すると
マウスイベントの前に入力前イベントが発生するのは困る。
------------------------------------------------------
そして質問の主旨は、上記の後半の行追加等の場合でも、DからEに移動した時に、
すぐに入力イベントが起きるのではなくて、マウスクリックが行われるまで待って欲しいという事でしょうか。

であるなら、これは無理でしょう。
なぜなら、行追加などの編集が行われている時には、Dの入力が終れば、
自動的にEに進みます。そしてEの編集が開始された後に入力前イベントが発生します。
それ以前にマウスはクリックされていないはずですから、マウスイベントは発生しません。
仮にDの編集を終えてEnterキーを押した後、それこそ瞬時にマウスをクリックすればどうなるか解りませんが、それは無理でしょう。

もし質問の件を実現しようとしたら、フラグ(適当な変数)にマウスクリックしたかどうかを入力させておき、
マウスクリックしていない時には、入力前イベントを実行させない様にするしかないでしょうね。
しかしそれは全く意味のない方法だと思います。

●なぜマウスイベントと入力前イベントを組み合わせているのでしょうか
実はこの質問で私が疑問なのは、マウスイベントと入力前イベントを組み合わせ、
その順序を決めたいという点です。
それぞれのイベントで何をしようとしているのかを書いてもらえれば、
もっと的確な答ができるかと思います。

良く解らない中で私が考える所をいえば、マウスイベントを使う必要はなく、
入力前イベントの中で両方の処理をその順序で行えば済む話ではないのでしょうか。

佐田守弘(KS-00119)
25680 Re:イベントの実行順固定したい hidetake 2004/03/29-20:52
記事番号25675へのコメント
>イベントとは、その事象(イベント)が起きた事によって、所定の処理
>(イベントハンドラ)を実行させる機能です。
>宮城さんが紹介してるとおり、その発生順序は決まっています。
>そしてイベントが生じなければ、イベントハンドラは実行されません。
>質問の件は、マウスイベントと入力前イベントですが、マウスクリック
>イベントはマウス操作をしなければ発生しません。

ニューモンキーさんが、実際に何をされたいのかわかりませんが?

イベントハンドラを実行させるための起因はものによっては発生させることは不可能だけれど、
そのイベントの起因による実行させるべき
プログラム(ハンドラ)を実行させるだけで良ければ、
そのイベントハンドラ(手続き定義)を call する方法もあります。

/* まず必要な変数を定義しておく */
変数宣言 長整数{&マウス位置[2],&明細番号,&フラグ,&処理中止}
/* マウス左クリック を call */
call テキスト_1::マウス左クリック(&マウス位置,&明細番号,&フラグ,&処理中止)


25681 Re:イベントの実行順固定したい hidetake 2004/03/29-21:37
記事番号25680へのコメント
>/* まず必要な変数を定義しておく */
>変数宣言 長整数{&マウス位置[2],&明細番号,&フラグ,&処理中止}
>/* マウス左クリック を call */
>call テキスト_1::マウス左クリック(&マウス位置,&明細番号,&フラグ,&処理中止)

「まず必要な変数を定義しておく」って書いてありますけど
これは手続き実行(call)する時に、引数に配列を含む場合は
桐は直接、配列を数値や計算式だけで指定する方法が無いようなので変数宣言してあります。
あと戻り値をうける変数も

上の例では、変数宣言しても実際には値は何も設定してないわけで、
必要であれば call する前に設定しておく必要があります。

配列でない変数に受け渡す引数以外は値を直接書いても良いです。
変数宣言 長整数{&マウス位置[2],&処理中止}
call テキスト_1::マウス左クリック(&マウス位置,0,0,&処理中止)

# ところで、前から気になってのだけれど、配列な値を変数を
# 経由せずに直接受け渡す方法ってあるのでしょうか?
# call テキスト_1::マウス左クリック({1,1},1,1,&処理中止)
# のように配列に値を代入するような感じで {1,1} なんて
# してもダメなようだし! (;_;)
# コマンドだと変数を宣言すれば良いけど、コマンドボタン
# からだと・・・
# 独り言です。 ;-)
25683 Re:イベントの実行順固定したい ニューモンキー 2004/03/30-09:30
記事番号25681へのコメント
hidetakeさん
>>/* まず必要な変数を定義しておく */
>>変数宣言 長整数{&マウス位置[2],&明細番号,&フラグ,&処理中止}
>>/* マウス左クリック を call */
>>call テキスト_1::マウス左クリック(&マウス位置,&明細番号,&フラグ,&処理中止)
>
皆さん回答有難うございます。使い慣れていないのでよく理解できていません。
私のやりたいことは次の通りです。(以下各テキストオブジェクトをAまたはB…と書きます)
AからDまでクリック(項目訂正)する順序は自由とします。Eをクリックした後はF以降へ順次進みます。
いきなりEから始めることもあります。Eをクリックした時点でEの属する行のAからD迄に入力されている値を対応する変数に代入した後、
取得した変数値に基づき次に開く参照フォームを絞り込んでから入力前イベントへ進ませ絞り込まれた参照フォームを開き
EからF以降の入力を実行するといった手順です。
元フォームは伝票でA〜Dは収支予定表から自動転記(仮記入)されることがあり、E以降を記入することで本記入となります。
仮記入のない場合は全部手記入となります。
手記入の場合記入漏れの項目があると参照用フォームの絞り込みの際エラーになるのでEをクリックした時点で
入力されている項目値(変数値)をチェックすることによりエラー回避(分岐)をはかりたいのがねらいです。
マウス左クリックを削除し入力前コマンドの次に代入コマンド続いてケースコマンドを入れてみましたがうまくゆきませんでした。
入力前イベントに入ると変数管理 ウオッチが表示不可なようで試行が余計むづかしいです。
むづかしいことは理解できませんが宜しくお願いします。
25684 Re:イベントの実行順固定したい ONnoji 2004/03/30-10:19
記事番号25683へのコメント

>5個のテキストオブジェクト A・B・C・D・Eがあり、
>オブジェクトEにマウス左クリックイベントと入力前イベントを設定してあります。

>オブジェクトA・B・C・Dのいずれか又はすべてのオブジェクトに項目訂正
>(入力)操作を実行した後

>オブジェクトEをクリックした場合でもマウス左クリックイベント→入力前イベントの順で実行させたいのですが
>実行可能でしょうか。

>オブジエクトA・B・C・Dはフォームで直接入力しているものも
>入力前イベントを使用して入力しているオブジェクトもあります。

ニューモンキーさん、こんにちは。

まず、桐のバージョンが不明です。
当方では、桐ver.8 sp5 でイベントの発生順をトレースしてみました。
以下を参照ください。

桐のバージョン( ver. )とサービスパック( sp )によって結果が違う場合があります。
念のためにご自身でトレースして確認してください。

なお、マウス関係のイベントを調べるときには、[確認]コマンドはご法度です。
[確認]コマンドを使うことによりマウス関係のイベントが発生しなくなることがあります。
※[メッセージボックス]コマンドも同じです。

次へつづく
25685 Re:イベントの実行順固定したい ONnoji 2004/03/30-10:20
記事番号25684へのコメント
前よりのつづき

トレースウィンドウの使い方が不明な場合には、手前味噌ですが以下のページをご参照ください。

§9 デバッグ
http://www.geocities.co.jp/SiliconValley-Bay/7565/guide09.htm

−[トレース出力]ウィンドウを使えるようにする−
http://www.geocities.co.jp/SiliconValley-Bay/7565/guide09.htm#trace_window

--------------------------------------------------------
表示モードからA〜Eのテキストボックスを順番にクリックした場合
※表示モード→項目訂正モード→表示モード

┌when "txtA::入力前( )"を実行開始しました
└end
 
┌when "txtB::入力前( )"を実行開始しました
└end
 
┌when "txtC::入力前( )"を実行開始しました
└end
 
┌when "txtD::入力前( )"を実行開始しました
└end
 
┌when "txtE::マウス左クリック({1995,2085},1,0,0)"を実行開始しました
└end
 
┌when "txtE::入力前( )"を実行開始しました
└end
 
┌when "txtE::マウス左クリック({1995,2085},1,0,0)"を実行開始しました
└end


同じ操作で、Eに[マウス左ダウン]イベントを加えた場合

┌when "txtA::入力前( )"を実行開始しました
└end
 
┌when "txtB::入力前( )"を実行開始しました
└end
 
┌when "txtC::入力前( )"を実行開始しました
└end
 
┌when "txtD::入力前( )"を実行開始しました
└end
 
┌when "txtE::マウス左ダウン({2055,2040},1,1,0)"を実行開始しました
└end
 
┌when "txtE::マウス左クリック({2055,2040},1,0,0)"を実行開始しました
└end
 
┌when "txtE::マウス左ダウン({2055,2040},1,1,0)"を実行開始しました
└end
 
┌when "txtE::入力前( )"を実行開始しました
└end
 
┌when "txtE::マウス左クリック({2055,2040},1,0,0)"を実行開始しました
└end


--------------------------------------------------------
最初から訂正モードに遷移したのち、
A〜Eのテキストボックスを順番にクリックした場合
※常に訂正モード
 
┌when "txtA::入力前( )"を実行開始しました
└end
 
┌when "txtB::入力前( )"を実行開始しました
└end
 
┌when "txtC::入力前( )"を実行開始しました
└end
 
┌when "txtD::入力前( )"を実行開始しました
└end
 
┌when "txtE::入力前( )"を実行開始しました
└end
 
┌when "txtE::マウス左クリック({2115,2070},1,0,0)"を実行開始しました
└end


同じ操作で、Eに[マウス左ダウン]イベントを加えた場合

┌when "txtA::入力前( )"を実行開始しました
└end
 
┌when "txtB::入力前( )"を実行開始しました
└end
 
┌when "txtC::入力前( )"を実行開始しました
└end
 
┌when "txtD::入力前( )"を実行開始しました
└end
 
┌when "txtE::マウス左ダウン({2205,2130},1,1,0)"を実行開始しました
└end
 
┌when "txtE::入力前( )"を実行開始しました
└end
 
┌when "txtE::マウス左クリック({2205,2130},1,0,0)"を実行開始しました
└end


--------------------------------------------------------

25686 Re:イベントの実行順固定したい ONnoji 2004/03/30-11:03
記事番号25685へのコメント

>私のやりたいことは次の通りです。(以下各テキストオブジェクトをAまたはB…と書きます)
>AからDまでクリック(項目訂正)する順序は自由とします。Eをクリックした後はF以降へ順次進みます。
>いきなりEから始めることもあります。

>Eをクリックした時点でEの属する行のAからD迄に入力されている値を対応する変数に代入した後、
>取得した変数値に基づき次に開く参照フォームを絞り込んでから
>入力前イベントへ進ませ絞り込まれた参照フォームを開き
>EからF以降の入力を実行するといった手順です。

>元フォームは伝票でA〜Dは収支予定表から自動転記(仮記入)されることがあり、
>E以降を記入することで本記入となります。
>仮記入のない場合は全部手記入となります。
>手記入の場合記入漏れの項目があると参照用フォームの絞り込みの際エラーになるので
>Eをクリックした時点で入力されている項目値(変数値)をチェックすることにより
>エラー回避(分岐)をはかりたいのがねらいです。

>マウス左クリックを削除し入力前コマンドの次に代入コマンド続いてケースコマンドを入れてみましたが
>うまくゆきませんでした。

ニューモンキーさん、こんにちは。

流し読みのため、(^^ゞ
私( ONnoji )はニューモンキーさんが行いたいことを完全に理解していないと思いますが…

[マウス○×△]イベントの代わりに、[フォーカス取得]イベントを利用したらいかがでしょうか??

外していたらスイマセン。

--------------------------------------------------------
表示モードからA〜Eのテキストボックスを順番にクリックした場合
※表示モード→項目訂正モード→表示モード


┌when "txtA::入力前( )"を実行開始しました
└end
 
┌when "txtB::入力前( )"を実行開始しました
└end
 
┌when "txtC::入力前( )"を実行開始しました
└end
 
┌when "txtD::入力前( )"を実行開始しました
└end
 
┌when "txtE::フォーカス取得("txtD")"を実行開始しました
└end
 
┌when "txtE::入力前( )"を実行開始しました
└end
 
 
--------------------------------------------------------
最初から訂正モードに遷移したのち、
A〜Eのテキストボックスを順番にクリックした場合
※常に訂正モード
 
┌when "txtA::入力前( )"を実行開始しました
└end
 
┌when "txtB::入力前( )"を実行開始しました
└end
 
┌when "txtC::入力前( )"を実行開始しました
└end
 
┌when "txtD::入力前( )"を実行開始しました
└end
 
┌when "txtE::フォーカス取得("txtD")"を実行開始しました
└end
 
┌when "txtE::入力前( )"を実行開始しました
└end

25706 Re:イベントの実行順固定したい 佐田 守弘 2004/03/30-21:47
記事番号25683へのコメント
ニューモンキーさん
書いて頂いた処理の中身が私には理解できなかったので、あるいは外しているかも知れません。
しかしどうやら、A〜Dの入力は、それ以外の入力とは別の作業らしいとの事で、考え方を提示します。

方法1)マウスイベントは使わない
Eをクリックするという事は、これから入力する事を意味するのであろうと思います。
入力前イベントを使っているなら、このイベントの中でマウスイベントで行おうとしている処理を行ってはだめでしょうか。
どうしても別のイベントで行いたいなら、行訂正開始イベントを使うとか。

方法2)Dの入力後に表示モードに戻す
Dのソース値更新イベントを使って、強制的に表示モードに戻してしまいます。
表示モードに移れば、Eの入力には進みませんから、Eをマウスクリックするまで待ち状態になり要望通りになると思います。

佐田守弘(KS-00119)

25714 Re:イベントの実行順固定したい ニューモンキー 2004/03/31-10:25
記事番号25706へのコメント
>書いて頂いた処理の中身が私には理解できなかったので、あるいは外しているかも
>知れません。しかしどうやら、A〜Dの入力は、それ以外の入力とは別の作業らしい
>との事で、考え方を提示します。
>
>方法1)マウスイベントは使わない
>方法2)Dの入力後に表示モードに戻す
>
>佐田守弘(KS-00119)
>
皆さんにアドバイス頂き有難うございます。参考にさせて頂き勉強するつもりです。
方法1)につきまして訂正開始イベントがイベント種類のなかに見つかりません。
方法2)につきましてキーボードで切り替えてみたところうまくゆきましたがイベントで
    きりかえる記述のしかたがわかりません。
上記2項につきまして初歩の愚問と思いますが詳細にコメント頂ければ幸いです。
25721 Re:イベントの実行順固定したい 宮城 2004/03/31-13:36
記事番号25714へのコメント
>方法1)につきまして訂正開始イベントがイベント種類のなかに見つかりません。
>方法2)につきましてキーボードで切り替えてみたところうまくゆきましたがイベントで
>    きりかえる記述のしかたがわかりません。
>上記2項につきまして初歩の愚問と思いますが詳細にコメント頂ければ幸いです。

誤:訂正開始 正:行訂正開始 用語は正確に使いましょう。
行訂正はフォームのイベントだからフォームのプロパティのイベントタブを探す。

「メソッド呼び出し 更新モード設定」 この通り書いてもエラー。文法ぐらいは
マニュアルで確認のこと。

他のかたは「理解できなかった」とお書きですが、私は・・・。

25725 Re:イベントの実行順固定したい ニューモンキー 2004/03/31-19:18
記事番号25721へのコメント
宮城さん

>
>他のかたは「理解できなかった」とお書きですが、私は・・・。
>
私は・・・?どうしましたか。

戻る