コントロールをダブルクリックしたとき、
クリックイベントの処理をせずに、
ダブルクリックイベントの処理をしたいのですが、
方法がわからずにいます。
どなたか、方法をご教授ください。
クリックイベントとダブルクリックイベントには
それぞれ処理があります。
ムリじゃないッスか?
できなくはなさそうな気がします。
クリックイベントなどを、MouseDownなどを使うことで全部自分で管理し、
連続でクリックされた回数をカウントした後、動作を実行すれば。
そういうソフトもいくつか見たことあります。
(TClockなど。これでは、シングル,ダブルのほか、トリプルクリックなどを判断することから、自分で管理してるんだと思います)
ただ、とても簡単とはいえないコーディングになると思います。
ユーザーとしても、その境界線があいまいになるので、
できれば、その設計を変える方向で考えたほうがいいのではないでしょうか?
自分で管理する場合は、MouseUpイベントにて、座標、クリックされたボタン、
そして、前回発生したMouseUpからの経過時間を管理するすれば OK かと。
なお、ダブルクリックに必要な時間間隔に付いては、
SystemParametersInfo API + SPI_SETDOUBLECLICKTIME 定数
で求める事ができます。
また、ダブルクリック中における、マウスの許容移動範囲に付いては、
SystemParametersInfo API + SPI_SETDOUBLECLKHEIGHT 定数
SystemParametersInfo API + SPI_SETDOUBLECLKWIDTH 定数
で得る事ができます。
なお、これらの値はアプリの実行中に変更される可能性がありますので、
起動時にForm_Load等で調べるだけではなく、システム情報(SysInfo)コントロールの
イベントなども併用するようにすれば、動的な変更にも対応させられるかと思います。
# 訂正……。
> SystemParametersInfo API + SPI_SETDOUBLECLICKTIME 定数
> SystemParametersInfo API + SPI_SETDOUBLECLKHEIGHT 定数
> SystemParametersInfo API + SPI_SETDOUBLECLKWIDTH 定数
すいません。これらは時間間隔や許容範囲を「設定」するものですね。
時間間隔の取得は、
GetDoubleClickTime API
そして、許容範囲の取得は、
GetSystemMetrics API + SM_CXDOUBLECLK 定数
GetSystemMetrics API + SM_CYDOUBLECLK 定数
で行ってください。m(_ _)m
何とかAPIを使い制御することが出来ました。
どうもありがとうございました。
またよろしくお願いします。
ツイート | ![]() |