(現在 過去ログ21 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■3090 / inTopicNo.1)  イベントの取りこぼし(?)を防ぎたい
  
□投稿者/ Oiller -(2007/10/14(Sun) 07:46:14)
    Oillerです。

    タブフォームもどきを作成していますがどうもイベントを取りこぼしてしまう様でうまく作動するときとしないときがあります。
    原因と対策について何か分かれば教えてください。

    作成中のフォームとイベントハンドラを添付していますのでご覧になってください。

    簡単に説明すると、空のフォームに3つのピクチャオブジェクトを配置し、その外枠の罫線を使い、タブの形状を模倣しています。
    不足分を直線オブジェクトでおぎないタブフォームらしくしています。

    イベントは各ピクチャオブジェクトのマウス左アップを使い、クリックされたら3つすべての下罫線の色を黒に書き換えてから、当該ピクチャオブジェクトの下罫線の色プロパティのみを白に書き換えることでタブが選択されたイメージを作っています。
    ファミリー機能を使いイベントハンドラーを3つのピクチャオブジェクトで共用しています。


    不具合は、フォームを開いた直後はタブを2回クリックしないと反応しないことです。
    何回か作動させているうちに1回のクリックで反応するようになります。
    なぜなのでしょうか。
    このようになるのは私だけでしょうか。


    当方の環境は Pentium4 2.8GHz,512MB RAM,WindowsXP(sp2)、桐ver9-2007(桐9-2004 sp4)です。
    よろしくお願いします。


Tab01.lzh
/5KB
引用返信 [メール受信/OFF] 削除キー/
■3091 / inTopicNo.2)  Re[1]: イベントの取りこぼし(?)を防ぎたい
□投稿者/ Oiller -(2007/10/14(Sun) 09:41:40)
    Oillerです。

    自己解決してしまいました。
    どうもピクチャオブジェクトを使用したのがまずかったようです。
    他に罫線があるオブジェクトは何かと探し、最も軽そうなラベルオブジェクトを使って同じようなことをしたらちゃんと動いてくれました。

    お騒がせしました。

解決済み!
引用返信 [メール受信/OFF] 削除キー/
■3092 / inTopicNo.3)  タブコントロールもどき
□投稿者/ 悲しげ -(2007/10/14(Sun) 11:49:57)
引用返信 [メール受信/OFF] 削除キー/
■3093 / inTopicNo.4)  Re[1]: イベントの取りこぼし(?)を防ぎたい
□投稿者/ ONnoji -(2007/10/14(Sun) 15:28:51)
    2007/10/14(Sun) 15:33:52 編集(投稿者)
    2007/10/14(Sun) 15:31:18 編集(投稿者)

    > タブフォームもどきを作成していますがどうもイベントを取りこぼしてしまう様でうまく作動するときとしないときがあります。
    > 原因と対策について何か分かれば教えてください。

    対策としては、[トレース出力ウィンドウ]で実際に発生するイベントの順番を確かめるといいですよ。

    イベントは多重に発生することがありますので、トレースが重要になります。

    [トレース出力ウィンドウ]はデバッグツールとして極めて有効ですよ。

    <参考>

    拙作ですが、よろしければご参考にしてください。(@^^)/~~~

    フォームアプリケーション入門
    §9 デバッグ|[トレース出力]ウィンドウを使えるようにする
    http://www.geocities.jp/siliconvalley_bay_7565/guide09.htm#trace_window

    §9 デバッグ|(1)[トレース出力]ウィンドウを使ってみる
    http://www.geocities.jp/siliconvalley_bay_7565/guide09.htm#way1

    コラム8 清書ユーティリティ 第2.1版 for 桐ver.8 / 桐ver.9
    トレース整形の使い方
    http://www.geocities.jp/siliconvalley_bay_7565/column08.htm#trace
引用返信 [メール受信/OFF] 削除キー/
■3094 / inTopicNo.5)  Re[2]: イベントの取りこぼし(?)を防ぎたい
□投稿者/ Oiller -(2007/10/14(Sun) 16:49:33)
    ONnojiさん、こんばんは。

    Oillerです。

    > 対策としては、[トレース出力ウィンドウ]で実際に発生するイベントの順番を確かめるといいですよ。
    >
    > イベントは多重に発生することがありますので、トレースが重要になります。

    これは、いいことを教えていただきました。

    ということで早速、試してみると初回にクリックしたときはイベントが発生していませんでした。
    2回目のクリックではイベントが発生します。

    んー、どういうことなのでしょうか。(@_@;)???

引用返信 [メール受信/OFF] 削除キー/
■3095 / inTopicNo.6)  Re[2]: タブコントロールもどき
□投稿者/ Oiller -(2007/10/14(Sun) 17:08:11)
    2007/10/14(Sun) 17:10:28 編集(投稿者)

    悲しげさんこんばんは。

    Oillerです。

    > http://mokuchan.hp.infoseek.co.jp/download/dl-list1.htm
    > の中のNo.025とか

    ダウンロードして中身をみてみるとピクチャーオブジェクトを使ってしかもちゃんと動いています。

    どうも、私のフォーム定義が怪しいそうなのでよくよくみてみるとファミリーのマウス左アップイベントを使っているにもかかわらず、3つのピクチャーオブジェクトのマウス左アップイベントにもチェックが入っていました。

    つまり、ファミリとピクチャの両方のマウス右アップイベントを使う設定になっていました。ピクチャのマウス右アップイベントハンドラはファミリのイベントハンドラを書いたあとで消してしまったので行き場がなくなってイベントが発生しなかったのかもしれません。

    アップしたフォームのピクチャオブジェクトのマウス右アップイベントのチェックを外したら所定の動作をするようになりました。

    これらの出来事を考察すると、ファミリーのイベントハンドラよりも個々のオブジェクトのイベントハンドラが優先して実行されるということなのかもしれません。
    ヘルプの「【イベント処理】ファミリを使用する 」の項を見てみると該当しそうなことが書いてありました。

    「ファミリとオブジェクトの両方に同じイベント処理を記述した場合は、オブジェクトのイベント処理だけが呼ばれ、ファミリの処理は呼び出されません。」
     
    ただし、この場合でもオブジェクトのハンドラーが消されてしまっていると今回のような例外的な動きになると思われます。

    ともあれ、原因がかなりはっきりしたのでスッキリしました。

    ありがとう、ございました。
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■3096 / inTopicNo.7)  Re[3]: イベントの取りこぼし(?)を防ぎたい
□投稿者/ ONnoji -(2007/10/14(Sun) 17:20:04)
    > ということで早速、試してみると初回にクリックしたときはイベントが発生していませんでした。
    > 2回目のクリックではイベントが発生します。
    > んー、どういうことなのでしょうか。(@_@;)???


    ┌when メイン処理を実行開始しました
    └end
     
    ┌when "ファミリ_1::マウス左アップ({1065,615},1,0)"を実行開始しました
    └end


    pic_01,pic_02,pic_03のそれぞれのオブジェクトの属性を見ると
    [マウス○○]イベントのチェックがONのところが散見されます。

    一方、ファミリ_1 のオブジェクトの属性を見ると、
    [マウス左アップ]イベントのチェックがONになっています。

    もしも、
    通常のオブジェクト(pic_01,pic_02,pic_03)の[マウス左アップ]イベントのチェックがONで、
    これらのオブジェクトが属しているファミリ(ファミリ_1)の[マウス左アップ]イベントのチェックがONだとすると、
    どちらの、[マウス左アップ]イベントが優先するでしょうか???
    それとも、両方のオブジェクトのイベントが発生するでしょうか???。

    私が経験上知っている範囲では、通常のオブジェクトのイベントがファミリのイベントより優先して発生します。

    そういうわけで、
    通常のオブジェクト(pic_01,pic_02,pic_03)の[マウス左アップ]イベントのチェックOFFにすると、
    期待通りに動くようですよ。

    今回のように対応するイベントハンドラを用意していない場合には、イベントのチェックをOFFにしておくのが無難だと思いますよ。

引用返信 [メール受信/OFF] 削除キー/
■3097 / inTopicNo.8)  Re[3]: イベントの取りこぼし(?)を防ぎたい
□投稿者/ 悲しげ -(2007/10/14(Sun) 17:31:55)
    改めて中味を見てみたところ、
    (1)pic01-02にはマウス左アップイベントが
    (2)pic03には左アップイベントと左クリックイベントが
    (3)ファミリには左アップイベントが
    それぞれ設定してありました。
    無意味(もしかしたら有害?)な重複なので、(1)(2)のマウスイベントを
    削除した上で、(3)のマウスイベントを「左アップ」から「左クリック」に
    変更したらきちんと動くように見えました。

    私は「左クリック」イベントが妥当だと思うのですが、なぜ「左アップ」を
    採用したのですか(しかも重複して)?

    タブコンは、別途例示したように、いか様作のが美しくて私的には好みです。
    私はあれに、始点Yの値を変えて、ポコッと上げるように見せたりして。(^^;)

引用返信 [メール受信/OFF] 削除キー/
■3098 / inTopicNo.9)  Re[4]: イベントの取りこぼし(?)を防ぎたい
□投稿者/ Oiller -(2007/10/14(Sun) 17:37:37)
    ONnojiさんこんばんは。

    Oillerです。
    回答ありがとうございます。

    > そういうわけで、
    > 通常のオブジェクト(pic_01,pic_02,pic_03)の[マウス左アップ]イベントのチェックOFFにすると、
    > 期待通りに動くようですよ。

    はい、了解いたしました。
    そのようにできるよう注意したいと思います。



解決済み!
引用返信 [メール受信/OFF] 削除キー/
■3099 / inTopicNo.10)  Re[3]: タブコントロールもどき
□投稿者/ 悲しげ -(2007/10/14(Sun) 18:11:05)
    No3095に返信(Oillerさんの記事)
    >> http://mokuchan.hp.infoseek.co.jp/download/dl-list1.htm
    >> の中のNo.025とか
    >
    >ダウンロードして中身をみてみるとピクチャーオブジェクトを使ってしかもちゃんと動いています。

    誤読を招かないように補足しておきますと、いか様はフォームの他の部分でピクチャobjを
    使ってはおりますが、タブの部分はラベルobjとなっています。ま、挙動に無関係ではあり
    ますが。(^^;)

    それと、いか様は「マウス左ダウン」イベントでやってましたね(^^;)。ま、これも深い意味
    はないとは思いますが。
    余談に流れますが、私の場合、普段は左クリックイベントを使い、マウスダウンやマウスア
    ップは、それで特に挙動を制御したい場合だけ使うようにしています。ダウンは例えばスピ
    ンボタンとか、押し続けている間中発生するようなもの。それとか、ヘルプっぽい文言を、
    押し続けている間(ダウン)だけ表示して、離すと(アップ)表示を止めるなんてのもやっ
    たことあります。ダウンの間中凹、アップで凸に戻すとかも。
    コマンドボタン(のクリック)と同じように挙動させる場合は私は左クリックです。いえ、
    そうでなければならないという訳ではありませんが、何となくそれが適材適所のような。(^^;)

引用返信 [メール受信/OFF] 削除キー/
■3100 / inTopicNo.11)  ファミリーとオブジェクトのイベントの衝突について
□投稿者/ Oiller -(2007/10/14(Sun) 18:12:18)
    悲しげさんこんばんは。

    Oillerです。

    > 改めて中味を見てみたところ、
    > (1)pic01-02にはマウス左アップイベントが
    > (2)pic03には左アップイベントと左クリックイベントが
    > (3)ファミリには左アップイベントが
    > それぞれ設定してありました。
    > 無意味(もしかしたら有害?)な重複なので、(1)(2)のマウスイベントを
    > 削除した上で、(3)のマウスイベントを「左アップ」から「左クリック」に
    > 変更したらきちんと動くように見えました。
    はい、これらの点は私も確認しています。
    1.オブジェクトのリストのイベントタブにてファミリとオブジェクトの双方で同じイベント処理にチェックを入れる。
    2.オブジェクトのイベントハンドラーがない
    この条件がそろったのが今回の不具合の原因だと思います。


    > 私は「左クリック」イベントが妥当だと思うのですが、なぜ「左アップ」を
    > 採用したのですか(しかも重複して)?

    マウス左アップを選択している意味は、あまりなくていつも使っているから程度の意味しかありません。
    たしか、イベントを細かく指定しておいた方があとから何かを付け加えたくなったときやり易いのかなといったことを昔考えて、その習慣がそのまま続いているのだと思います。


    重複については、最初ピクチャオブジェトごとにイベントハンドラを書いていたのですが、二つ目を書くにあたって別スレッドで教えていただいたファミリーを使ってみようかと思い立ち、書き換えたわけです。
    書き換え前に、各ピクチャオブジェクトのマウス左アップをチェックしてしまっていたので消し忘れでこれが残ってしまい悪さをしたということです。

    PIC_03の左クリックは単にマウスのクリックミスに気がつかなかっただけだと思います。意図的にチェックしたものではありません。

    > タブコンは、別途例示したように、いか様作のが美しくて私的には好みです。
    > 私はあれに、始点Yの値を変えて、ポコッと上げるように見せたりして。(^^;)
    はい、わたしも拝見させていただき「工夫する人はこうするのか〜」と改めて感心しておりました。
    サンプルを見るのはバグを追う上でも大変やくに立つと改めて認識しました。

引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -