マウスイベントが発生しない原因と対処法

このQ&Aのポイント
  • マウスイベントに詳しい方に教えていただきたいです。Windows上のプログラミングでTImageコンポーネント上でマウスを左クリックさせると、通常はOnMouseDown→OnClick→OnMouseUpの順でイベントが発生します。しかし、たまにOnMouseUpイベントが発生せず、エラーが発生してしまうことがあります。原因がわからず困っています。
  • OnMouseUpイベントをキャンセルしてしまう処理は存在するのでしょうか?私は特にPeekMessageなどを使用していません。このような状況が発生する原因をご存知の方、アドバイスをいただけると助かります。
  • マウスイベントが発生しない原因として考えられるのは、プログラム内でOnMouseUpイベントが無効化されている可能性があります。解決策としては、コードの中にOnMouseUpイベントを有効にする処理を追加することが挙げられます。具体的な実装方法については、マウスイベントに詳しい方に相談することをおすすめします。また、PeekMessageなどの関数を使用していない場合でも、他の処理がOnMouseUpイベントをキャンセルしてしまう可能性もあるので確認する必要があります。
回答を見る
  • ベストアンサー

マウスイベントが発生しません

マウスイベントに詳しい方教えて下さい。 Windows上のプログラミングで TImageコンポーネント上でマウスを左クリックさせると、 通常はOnMouseDown→OnClick→OnMouseUpの順で イベントが発生します。 ただ、たまにOnMouseUpイベントが発生せず エラーが発生してしまう事が起こってしまいました。 常に起こるわけではなく、何かのタイミングで起こります。 ただ、何が原因かは全然つかめていません・・・。 OnMouseUpイベントをキャンセルしてしまう 処理って存在するのでしょうか? 特にPeekMessageなどは使用していません。 もし、以上のような事が起こる原因をご存知の方、 お教え願えますか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

・ボタンを押したままコントロールの外に移動して、ボタンを離す ・ボタンを押している状態の時に別のウィンドウがアクティブになってフォーカスを奪われる といった状況だと、別のウィンドウにメッセージが行くので、キャプチャーしてない限りイベント自体が発生しないはずです。

sanquu
質問者

お礼

お返事ありがとうございます。 私が試した時は、ボタンを押したままコントロールの外に移動しても、 MouseUpのイベントは発生しているみたいでした・・・。 何かのタイミングですかね? MouseDownイベントの後、MouseUpイベントが来ないようなのです。 あまり無い現象なのでしょうね・・・。

関連するQ&A

  • TextAreaのダブルクリックイベントを発生させるには

    PersonalJavaでPDA(WinCE)用のプログラムを書いて遊ぼうかと考えています。 従ってJDK1.1.8を使うので、Swingは使えません。 VisualBasicではTextBoxをマウスでダブルクリックすることでイベント発生できるのですが、TextAreaには標準ではイベント発生機能が無いようです。 どうプログラミングすれば、TextAreaのダブルクリックイベントを発生させる、もしくは同等の機能を持たせることができるでしょうか?

    • ベストアンサー
    • Java
  • C#で親にイベントを投げる方法

    すごく基本的なことかもしれないのですが、ポインタだけでも良いので教えてください。 あるFormにPictureBoxをはりつけてあります。 PictureBoxをマウスでクリックしたときにpictureBox_Click()イベントが発生しますが、このイベントをそのままスルーして、Formに伝えてあげたいのです。 pictureBox.Parent.OnMouseDown()とでもすればいいのかと思っていたのですが、コンパイルエラーでした。 何かすごい勘違いをしているような気もするのですが、お恥ずかしいことに何が悪いのかよくわかりません。ポインタだけでも良いので、どうすれば親にイベントを投げられるのかを教えてください。

  • ボタン上でマウスを押している間に、ウィンドウをスクロールしたい

    フォームボタンを押している間、インラインフレームのウィンドウをスクロールしたいのですが 思うように動作してくれません。 最初、タグのonmousedown属性とonmouseup属性を使用して 簡単に実装できると思っていたのですが mouseupのイベントがうまく拾えないようで、あきらめました。 下記のようなマウスドラッグのサンプルソースがあったので こちらを改造しようと思ったのですが、いろいろいじってみてもだめでした。 「マウスが離された」というイベントはどうすれば拾えるのでしょうか? IE限定の動作を予定しています。 よろしくお願いいたします。 <script type="text/javascript"> //tab→全角スペース //マウスをクリックして動かしている間だけスクロールする  window.document.onmousemove = scrollSubWindow;  window.document.onmouseup = scrollOff;  scrollFlag = false;  function scrollOn()  {   scrollFlag = true;  }    function scrollOff()  {   scrollFlag = false;  }    function scrollSubWindow()  {   if( !scrollFlag ) return;   Dummy.scrollBy( 0, 10 );   return false;  }   </script> <iframe src="dummy.html" name="Dummy" width=200 height=200></iframe> <input type="button" value="下へ" onMousedown="scrollOn()" style="width: 200px; height: 200px;">

  • マウスイベントを発生させる方法

    【開発環境】VS2008 Professional 【言語】VisualStudio2008で扱える言語であれば何でも良い。できればC++かC#。 http://okwave.jp/qa/q5915713.html No.5915713の質問をした者です。再びわからないことが出てきたので質問させていただきます。 ゲームパッドでマウス操作するアプリを作成していて、一応は完成しました。 以前の質問でSendInputを使用するというアドバイスをいただき、マウスの移動やクリックを発生させる事は出来ました。 しかし、WindowsVistaのUACで画面が暗転している時や、一部ソフトのインストーラが起動している間、操作が出来なくなってしまいます。 上記の操作不可能状態でもマウス操作以外の操作(ボタン押下時にファイル書き換え等)はできているので、イベントは拾えています。問題はSendInputにあるようです。 言語は現行アプリがC#で出来ているので、できればC#が良いのですが、不可能という事であればマウス移動だけ別アプリに切り分ける事も検討しています。 何か方法をご存知の方がいらっしゃいましたらよろしくお願いします。

  • Delphi6 OnMouseUp

    deiphi6です。 OnMouseDown,OnMouseMoveイベントで返ってくるX,Y座標値と、OnMouseUpで返ってくるX,Y座標値に違いがあります。 例えば、 ScrollBoxの中にPaintBoxを置いて、PaintBoxのWidth(Height)を32768以上にします。 実行させ、スクロールさせてPaintBoxが32768以上のポイントでマウスボタンを押して離すと。 OnMouseUpで返ってくるX(Y)座標はマイナスになります。 また、65536以上にするとまた1から始まるプラスのX座標がかえってきます。 OnMouseDown,OnMouseMoveでは正常なプラス値です。 つまり、Intergerで返ってきてないってことですか? OnMouseMoveでの座標を代用して使ってますが、マウスの早い動きには正確を欠きます。 何かいい回避方法はありませんでしょうか?

  • アプレットでマウスイベントが出ない

    クリックしても反応しません。 また、マウスイベントが発生したときに飛ぶメソッドにSystem.out.printlnを入れるとException in thread "AWT-EventQueue-0" java.lang.NullPointerException: component argument pDataが出ることがあります。 import java.applet.Applet; import java.awt.Graphics; import java.awt.event.MouseListener; import java.awt.event.MouseEvent; public class NewJApplet extends javax.swing.JApplet implements MouseListener{ int x = 10; int y = 10; public void init() { x = 50; y = 50; } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed( MouseEvent e ){ x = e.getX(); // マウスがクリックされた位置のx座標を取得する y = e.getY(); // マウスがクリックされた位置のy座標を取得する repaint(); // アプレットの再描画を指示する } public void mouseReleased(MouseEvent e) { } public void paint(Graphics g) { g.fillOval(x,y,10,10); } } 使ってるのは jre1.6.0_01 NetBeans 5.5です

    • ベストアンサー
    • Java
  • シートのクリックイベントは拾えないのか?

    ExcelのVBAに関する質問です。 さきほど「セルをクリック、またはダブルクリックしたときに○○したい」という質問に回答したのですが、「セルをクリックした」というイベントを拾う方法がわからず、ダブルクリックのパターンで回答しました。 Worksheetのイベントには BeforeDobuleClick や BeforeRightClick はあるのに Click や onClick というイベントがありません。オートシェイプなどのオブジェクトやフォーム上のオブジェクトには Click イベントがあるのですが、Worksheet になぜかありません。 これまでも同様のケースがあり、ネットで検索したりしたのですが、どれも SelectionChange で代用するものでした。それだと確かにマウスで別セルを選択したときにイベントが発生しますが、 ・キーボード操作でセルを移動してもイベントが発生する ・現在選択しているセルをクリックしてもイベントが発生しない と、厳密はマウスでクリックしたときと同じ動作になりません。 確か以前の質問で「あるセルをクリックするたびに、他のセルの値をカウントアップしたい」というようなものもありました。このような場合には、やはり Click に相当するようなイベントで処理したいです。 どうにかしてWorksheetでクリックイベントを拾うことはできないのでしょうか?

  • AS3.0でマウスボタンの状態を調べたいのですが、良い方法はないでしょうか

    AS3.0になって、releaseOutsideに相当するものがなく、マウスボタンが領域外で離されたことを取得できず困っています。 いろいろ調べてみたんですが、良い方法が見つかりません。 作っているのはドラッグ&ドロップのスクリプトです。 startDrag()した後、領域外で離されたときにもstopDrag()できるように、stageに対してMOUSE_UPをリスナー登録しています。 my_mc.stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp); function onMouseUp(event:MouseEvent):void { my_mc.stopDrag(); my_mc.stage.removeEventListener(MouseEvent.MOUSE_UP,onMouseUp); } 通常はこれでうまくいくんだと思いますが、今作っているものには、ステージに選択可能テキストフィールドがあります。 ドラッグ中にそのテキストフィールドの上でマウスボタンを離すと、stageにMOUSE_UPイベントが発生しないようで、stopDrag()が働かず、マウスボタンを離していても、my_mcがくっついてきてしまいます。 ソーテック社の「Flash ActionScript3.0入門ノート」を購入してAS3.0の勉強をしているのですが、そのドラッグ&ドロップのパッケージ(SimpleDrag2.as)でも、選択可能テキストフィールドを置くと、同じ不具合が出てしまいます。 AS2.0では、releaseOutsideを使っていてうまくいきました。 マウスボタンの状態を取得する方法があれば、ENTER_FRAMEで状態を見張って、stopDrag()することもできると思うのですが、状態を取得する方法が見つかりません。 AS3.0で確実にstopDrag()できる方法をご存知でしたら、教えてください。 よろしくお願いいたします。

  • 文字を移動させその位置を表示したい

    複数のプログラムを拝借し組み合わせたのですが、以下3点の内容にしたく質問しました。宜しくお願いいたします。 (1)文字「このオブジェクトが移動します」を移動させその位置を表示したいのですが、マウスの位置が表示されています。 (2)文字「このオブジェクトが移動します」に合わせクリックすると反転表示になりますが反転表示にならないようにしたいです。 (3)動作するのですがエラーが表示されます。エラーの原因は何でしょうか? <HTML> <HEAD> <STYLE type="text/css"> </STYLE> <SCRIPT language="JavaScript"> <!-- var target; var isDrag=0; function document_onmousedown(){ isDrag=1; target=event.srcElement;} function document_onmousemove(){ if( isDrag ){ target.style.top=event.clientY-8; target.style.left=event.clientX-8;} } function document_onmouseup(){ isDrag=0; sample.style.top=text1.style.top; sample.style.left=text1.style.left; } document.onmouseup = fOnmousemove; function fOnmousemove() { sClientX.value = event.clientX; sClientY.value = event.clientY; } //--> </SCRIPT> </HEAD> <BODY onmousemove="document_onmousemove()" onmousedown= "document_onmousedown()" onmouseup="document_onmouseup()"> <DIV style="position:relative" id=sample> このオブジェクトが移動します </DIV> <DIV id="test" id=text1 style="position:absolute;font-size:24px; cursor:hand"> </DIV> <SCRIPT language="JavaScript"> </SCRIPT> clientX=<input type="text" id="sClientX"><br> clientY=<input type="text" id="sClientY"><br> </BODY> </HTML>

  • javascriptのイベント処理につきまして

    左クリックをした時と、クリックを解除をした時 右クリックをした時と、クリックの解除をした時 クリックを解除した時は共通の処理を行います。 左クリックをした時と、右クリックをした時の処理は分けたいと思っているのですが、上手くいきません。ご教授願えますでしょうか・・・。 [ mousedownとmouseup ] この場合、クリックした瞬間にmousedownイベントが走り、クリックを上げた瞬間にmouseupイベントができます。 ただし、右クリックでも同様の処理が走ってしまいます。 [ contextmenu と onclick ] 上記を利用すると、右クリックはcontextmenu処理を行い、左クリックはonclick処理を行いますが、この2つのイベントはマウスが押されて離された瞬間にイベントが発生しますので、mouseup処理が先に処理してしまします。 よろしくお願い致します。