新しく発言する EXIT インデックスへ
mousepollの不具合?

  mouse poll の不具合? shino 2004/08/21 09:32:07 
  そうですか?2004/08/21 14:44:42 
  │└何が原因なのでしょうか。 shino 2004/08/21 15:17:01 
  念のため聞きたいのですが、WindowsAPIを使... 青木太一 2004/08/21 16:54:46 
  私も数回実行しましたが哲さんと同じく問題... 青木太一 2004/08/21 17:01:22 
  マウス・ドライバの問題でしょうか? 白石 和夫 2004/08/21 18:39:03 
  どうやら、 shino 2004/08/21 19:50:31 
   └追加報告です。 shino 2004/08/21 21:38:09 
    └SETbitmapSIZE801,801 白石 和夫 2004/08/21 22:14:05 
     └その通りみたいです。 shino 2004/08/21 22:49:50 
      └MousePollは,Windows版では,マウスボタン... 白石 和夫 2004/08/22 09:28:17 
       └確認のため、 shino 2004/08/22 09:46:52 
        └対策版を作成しました。論理的に完全な解を... 白石 和夫 2004/08/22 10:47:58 
         └ありがとうございます。 shino 2004/08/22 11:35:30 

  mouse poll の不具合? shino 2004/08/21 09:32:07  ツリーへ

mouse poll の不具合? 返事を書く
shino 2004/08/21 09:32:07
以下のプログラムを何回か実行すると、
何もしていないのにright=1になってしまいます。

SET bitmap SIZE 501,501
SET WINDOW -250,250,-250,250

DECLARE EXTERNAL SUB StopProgram
DECLARE EXTERNAL FUNCTION MesBox

DECLARE NUMERIC x,y,left,right

SET TEXT JUSTIFY "center","half"
SET TEXT FONT "",24

PLOT TEXT,AT 0,0 : "画面上で右クリックして下さい"

DO
mouse poll x,y,left,right
! PRINT right
IF right=1 THEN CALL StopProgram
WAIT DELAY 0.01
LOOP

END

EXTERNAL SUB StopProgram
IF MesBox(0,"終了しますか?"," BASIC",4)=6 THEN STOP
END SUB

EXTERNAL FUNCTION MesBox(owner,text$,caption$,flag)
ASSIGN "user32.dll","MessageBoxA"
END FUNCTION

また、左クリックの方は問題無いようです。
条件をleft=1にすると正しく動作しました。

  そうですか?2004/08/21 14:44:42  ツリーへ

Re: mouse poll の不具合? 返事を書く
2004/08/21 14:44:42
そうですか?
私の環境では何回も実行してみたのですが正常のようです。
CPU 233Mhz Windows98SE 古いマシンですけど?

  │└何が原因なのでしょうか。 shino 2004/08/21 15:17:01  ツリーへ

Re: そうですか? 返事を書く
shino 2004/08/21 15:17:01
何が原因なのでしょうか。
家にある3台で試しましたが、
やはりどれでも2回目以降に
right=1が勝手に代入されてしまいます。
3台ともDELL製で割と最近のものです。
2台にWindows XPが、
1台にWindows 2000が入ってます。

他の環境では正常に動作するのでしょうか?

  念のため聞きたいのですが、WindowsAPIを使... 青木太一 2004/08/21 16:54:46  ツリーへ

Re: mouse poll の不具合? 返事を書く
青木太一 2004/08/21 16:54:46
念のため聞きたいのですが、WindowsAPIを使わないこれだと
問題は発生しませんか?

SET bitmap SIZE 501,501
SET WINDOW -250,250,-250,250

DECLARE NUMERIC x,y,left,right

SET TEXT JUSTIFY "center","half"
SET TEXT FONT "",24

PLOT TEXT,AT 0,0 : "画面上で右クリックして下さい"

DO
mouse poll x,y,left,right
! PRINT right
IF right=1 THEN
print "stop"
stop
end if
WAIT DELAY 0.01
LOOP

END

  私も数回実行しましたが哲さんと同じく問題... 青木太一 2004/08/21 17:01:22  ツリーへ

Re: mouse poll の不具合? 返事を書く
青木太一 2004/08/21 17:01:22
私も数回実行しましたが哲さんと同じく問題なかったです。

OS:WindowsServer2003
十進BASICVer5.1.10
RICHED32.DLL 5.2.3790.0
RICHED20.DLL 5.31.23.1218

  マウス・ドライバの問題でしょうか? 白石 和夫 2004/08/21 18:39:03  ツリーへ

Re: mouse poll の不具合? 返事を書く
白石 和夫 2004/08/21 18:39:03
マウス・ドライバの問題でしょうか?
通常,マウス・ドライバはマイクロソフト社製の(Windows純正の)ものが入っていますが,他社製のものもあります。私のところには,Windows XPですが,Logitech製のコードレスマウスを使うためにLogicool(Logitech)のMouseWareが入っています。ただし,この環境では問題は発生しないようです。
もうひとつの可能性は,チューチューマウスなどのマウス関係のユーティリティの不具合です。

  どうやら、 shino 2004/08/21 19:50:31  ツリーへ

Re: mouse poll の不具合? 返事を書く
shino 2004/08/21 19:50:31
どうやら、
青木さんのご指摘の通りWINDOWS APIの部分を変更すると
正常に動作しました。

一応マウスも調べておきました。
ドライバは全てマイクロソフトのもので、DELLの製品です。
内2つがUSBマウス、1つがノートパソコンの本体備え付けのものです。

しかし、WINDOWS APIが原因だとすると
何が問題なのでしょうか。
実際、問題なく動作している環境がほとんどみたいですし。

   └追加報告です。 shino 2004/08/21 21:38:09  ツリーへ

Re: どうやら、 返事を書く
shino 2004/08/21 21:38:09
追加報告です。
もしかしてと思い、
WINDOWS APIの部分を他のAPI関数に変えてみたところ、
幾つかの関数で同様の現象が起こりました。

どうやらマウスで命令を得る系統の
WINDOWS APIを利用したあとに
mouse poll を実行すると、
right=1 が代入されてしまうようです。
十進BASIC関数の file getname でも確認しました。

    └SETbitmapSIZE801,801 白石 和夫 2004/08/21 22:14:05  ツリーへ

Re: 追加報告です。 返事を書く
白石 和夫 2004/08/21 22:14:05
SET bitmap SIZE 801,801
にして実行すると,再現しました。
描画域とダイアログが重なる状態で,ダイアログが表示されるあたりで右クリックするとそうなるようです。
shinoさんのPCの画面解像度はどうなっていますか。描画域とダイアログが重なる状態でしょうか。

     └その通りみたいです。 shino 2004/08/21 22:49:50  ツリーへ

Re: SETbitmapSIZE801,801 返事を書く
shino 2004/08/21 22:49:50
その通りみたいです。
ダイアログと重なる部分で右クリックすると、
この現象が起こります。

画面解像度は1280×768と800×600で、
小さい方はほとんど重なり、
大きい方は601,601にしていたのでこれも重なっています。

小さい方が頻度が高かったのですが、
こういうわけだったのですね。

      └MousePollは,Windows版では,マウスボタン... 白石 和夫 2004/08/22 09:28:17  ツリーへ

Re: その通りみたいです。 返事を書く
白石 和夫 2004/08/22 09:28:17
Mouse Pollは,Windows版では,マウスボタンが押されたときに発生するイベントとマウスボタンを離したときに発生するイベントで非同期にマウス状態を記憶する変数値を書き換えることで実現しています。おそらく,マウスボタンを押した直後にその点が別のダイアログで覆われてしまうとマウスボタンを離したイベントが発生しないのだろうと思います。




       └確認のため、 shino 2004/08/22 09:46:52  ツリーへ

Re: MousePollは,Windows版では,マウスボタン... 返事を書く
shino 2004/08/22 09:46:52
確認のため、
WAIT DELAY を間に挟んだところ、
ノートパソコンでしか試していませんが、
0.09秒以上で問題は発生しませんでした。
それ未満では効果が無いようです。

また、一度発生するとBASICを閉じるまで
持続するようです。
発生後にWAIT DELAYを挟んでも効果がありませんでした。

        └対策版を作成しました。論理的に完全な解を... 白石 和夫 2004/08/22 10:47:58  ツリーへ

Re: 確認のため、 返事を書く
白石 和夫 2004/08/22 10:47:58
対策版を作成しました。論理的に完全な解を得るのが不可能なので,他に影響を及ぼすことが最小となる範囲で対策をしています。

         └ありがとうございます。 shino 2004/08/22 11:35:30  ツリーへ

Re: 対策版を作成しました。論理的に完全な解を... 返事を書く
shino 2004/08/22 11:35:30
ありがとうございます。

プログラムの方でも、間に
DO
mouse poll x,y,left,right
WAIT DELAY 0.01
LOOP WHILE right=1
のようにクリックを離す動作を記述すれば
問題を避けられるようです。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。