コントロールのダブルクリック時にクリックの処理をしないようにするには?

解決


 2003-02-13 17:01:23  No: 77088  IP: [192.*.*.*]

コントロールをダブルクリックしたとき、
クリックイベントの処理をせずに、
ダブルクリックイベントの処理をしたいのですが、
方法がわからずにいます。
どなたか、方法をご教授ください。

クリックイベントとダブルクリックイベントには
それぞれ処理があります。

編集 削除
nanashi  2003-02-13 19:09:02  No: 77089  IP: [192.*.*.*]

ムリじゃないッスか?

編集 削除
たかみちえ  URL  2003-02-13 19:50:55  No: 77090  IP: [192.*.*.*]

できなくはなさそうな気がします。
クリックイベントなどを、MouseDownなどを使うことで全部自分で管理し、
連続でクリックされた回数をカウントした後、動作を実行すれば。
  そういうソフトもいくつか見たことあります。
(TClockなど。これでは、シングル,ダブルのほか、トリプルクリックなどを判断することから、自分で管理してるんだと思います)

  ただ、とても簡単とはいえないコーディングになると思います。
  ユーザーとしても、その境界線があいまいになるので、
できれば、その設計を変える方向で考えたほうがいいのではないでしょうか?

編集 削除
魔界の仮面弁士  2003-02-13 20:33:41  No: 77091  IP: [192.*.*.*]

自分で管理する場合は、MouseUpイベントにて、座標、クリックされたボタン、
そして、前回発生したMouseUpからの経過時間を管理するすれば OK かと。

なお、ダブルクリックに必要な時間間隔に付いては、
   SystemParametersInfo API + SPI_SETDOUBLECLICKTIME 定数
で求める事ができます。
また、ダブルクリック中における、マウスの許容移動範囲に付いては、
   SystemParametersInfo API + SPI_SETDOUBLECLKHEIGHT 定数
   SystemParametersInfo API + SPI_SETDOUBLECLKWIDTH 定数
で得る事ができます。


なお、これらの値はアプリの実行中に変更される可能性がありますので、
起動時にForm_Load等で調べるだけではなく、システム情報(SysInfo)コントロールの
イベントなども併用するようにすれば、動的な変更にも対応させられるかと思います。

編集 削除
魔界の仮面弁士  2003-02-13 20:37:45  No: 77092  IP: [192.*.*.*]

# 訂正……。

>   SystemParametersInfo API + SPI_SETDOUBLECLICKTIME 定数
>   SystemParametersInfo API + SPI_SETDOUBLECLKHEIGHT 定数
>   SystemParametersInfo API + SPI_SETDOUBLECLKWIDTH 定数

すいません。これらは時間間隔や許容範囲を「設定」するものですね。

時間間隔の取得は、
  GetDoubleClickTime API
そして、許容範囲の取得は、
  GetSystemMetrics API + SM_CXDOUBLECLK 定数
  GetSystemMetrics API + SM_CYDOUBLECLK 定数
で行ってください。m(_ _)m

編集 削除
 2003-02-14 22:09:09  No: 77093  IP: [192.*.*.*]

何とかAPIを使い制御することが出来ました。

どうもありがとうございました。
またよろしくお願いします。

編集 削除