[リストへもどる]
一括表示

投稿時間:2003/04/02(Wed) 11:09
投稿者名:めぐ
Eメール:
URL :
タイトル:
コマンドボタンでダブルクリック
いつもお世話になっております。

コマンドボタンに於いて、ダブルクリックのイベントを
取得したいのですが、方法がわかりません。
コマンドボタンでダブルクリックは無理なのでしょうか?

ご存じの方、ご教授下さい。

投稿時間:2003/04/02(Wed) 11:56
投稿者名:Killer
Eメール:
URL :
タイトル:
Re: コマンドボタンでダブルクリック
> いつもお世話になっております。
>
> コマンドボタンに於いて、ダブルクリックのイベントを
> 取得したいのですが、方法がわかりません。
> コマンドボタンでダブルクリックは無理なのでしょうか?
>
> ご存じの方、ご教授下さい。

 ダブルクリックのイベントがないので、Clickイベント内で、
 ダブルクリックの判定処理をいれてはどうでしょうか?

投稿時間:2003/04/02(Wed) 13:42
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^2: コマンドボタンでダブルクリック
>  ダブルクリックのイベントがないので、Clickイベント内で、
>  ダブルクリックの判定処理をいれてはどうでしょうか?

多分その方法が思い浮かばないのですよね!
もっといい方法があるかも知れませんが、一番単純な方法として

Option Explicit
Private Declare Function GetDoubleClickTime Lib "user32" () As Long
Private nClick As Integer   'マウスクリックのカウント用

Private Sub Command1_Click()
'ダブルクリックを感知する
    Dim sngSt As Single
    nClick = nClick + 1
    If Timer >= 86398 Then
        MsgBox "真夜中にノックしないで下さい。もう一度やりなおしてね!"
        Exit Sub
    End If
    sngSt = Timer + GetDoubleClickTime / 1000
    '場合によっては待機時間を調整して下さい。
    Do While Timer < sngSt
        DoEvents
    Loop
    If nClick = 1 Then
        'シングルクリックイベントの処理
        MsgBox "シングルクリックです。"
    ElseIf nClick >= 2 Then      ' = 2 でもいいかも
        'シングルクリックイベントの処理
        'クリックイベントが発生してからダブルクリックイベントが発生するので
        '必要によってはここにもシングルクリックの処理を記入して下さい。
        MsgBox "シングルクリックです。"
        
        'ダブルクリックイベントの処理
        MsgBox "ダブルクリックです。"
    End If
    nClick = 0
End Sub

投稿時間:2003/04/02(Wed) 14:16
投稿者名:めぐ
Eメール:
URL :
タイトル:
Re^3: コマンドボタンでダブルクリック
皆さん、有難う御座いました。

お陰で解決することができました。

投稿時間:2003/04/02(Wed) 14:57
投稿者名:Killer
Eメール:
URL :
タイトル:
Re^3: コマンドボタンでダブルクリック
> >  ダブルクリックのイベントがないので、Clickイベント内で、
> >  ダブルクリックの判定処理をいれてはどうでしょうか?
>
> 多分その方法が思い浮かばないのですよね!
> もっといい方法があるかも知れませんが、一番単純な方法として
>
> Option Explicit
> Private nClick As Integer
>
> Private Sub Command1_Click()
>     nClick = nClick + 1
>     Dim lngSt As Long
>     lngSt = Timer
>     Do While Timer - lngSt < 0.5
>         DoEvents
>     Loop
>     If nClick = 1 Then
>         Debug.Print nClick
>     ElseIf nClick = 2 Then
>         Debug.Print nClick
>     End If
>     nClick = 0
> End Sub

 ソースを公開するなんてすごい親切ですね!
 あんまり簡単にソ−スを公開すると、その人の為にならないと思います。
 ということでヒントを書いたのですが・・・
 自分で考えるという事をしないといつまでたっても甘えてしまいますからね

投稿時間:2003/04/02(Wed) 15:08
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: コマンドボタンでダブルクリック
>  あんまり簡単にソ−スを公開すると、その人の為にならないと思います。
>  ということでヒントを書いたのですが・・・

おっしゃる通りです。
今回の場合、少しヒントが辛かったようなので、つい

投稿時間:2003/04/02(Wed) 15:49
投稿者名:Killer
Eメール:
URL :
タイトル:
Re^5: コマンドボタンでダブルクリック
> >  あんまり簡単にソ−スを公開すると、その人の為にならないと思います。
> >  ということでヒントを書いたのですが・・・
>
> おっしゃる通りです。
> 今回の場合、少しヒントが辛かったようなので、つい

 たしかに辛いような気しますね(笑)
 もうちょっとヒントをあげればよかったかな?って気がします。
 僕もこのHPではずいぶん勉強させてもらってますので、
 これからもよろしくお願いします。

投稿時間:2003/04/02(Wed) 16:07
投稿者名:めぐ
Eメール:
URL :
タイトル:
Re^3: コマンドボタンでダブルクリック
このソースで質問があるのですが、

コマンドボタンをダブルクリックしたとき、
1回目のクリックイベントの処理はわかるのですが、
2回目のクリックイベントが発生したのに
下記のロジックを入れることにより、2回目のクリックイベントは
何処に行ってしまうのでしょうか?
>     Dim lngSt As Long
>     lngSt = Timer
>     Do While Timer - lngSt < 0.5
>         DoEvents
>     Loop

普通に考えると、クリックイベントに2回入ってきてるので
2回同じ処理を行うのでは?

本当に、初心者ですいません。

投稿時間:2003/04/02(Wed) 16:30
投稿者名:Lantern
Eメール:
URL :
タイトル:
Re^4: コマンドボタンでダブルクリック
    If nClick = 1 Then
の行にブレイクを入れて実行、ダブルクリックしてみてください。

また、MSDNのDoEventsステートに、DoEventsにより複数回
プロージャが呼ばれる際の処理について書いてありますよ。

投稿時間:2003/04/02(Wed) 17:07
投稿者名:めぐ
Eメール:
URL :
タイトル:
Re^5: コマンドボタンでダブルクリック
わかりました。
DoEventsの動きを勘違いしていました。

有難う御座います。

投稿時間:2003/04/02(Wed) 16:14
投稿者名:Lantern
Eメール:
URL :
タイトル:
Re^3: コマンドボタンでダブルクリック
こういうAPIがあります。参考までに。私は使ったことないです^^;
Public Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long

OSがダブルクリックを認識する時間を取得(設定APIもあります)できます。

投稿時間:2003/04/02(Wed) 16:29
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: コマンドボタンでダブルクリック
> OSがダブルクリックを認識する時間を取得(設定APIもあります)できます。

私もそのAPIは見ていたのですが、それを使ってどのようにしてシングルクリックと
ダブルクリックを見分けるのでしょうか?

投稿時間:2003/04/02(Wed) 16:42
投稿者名:Lantern
Eメール:
URL :
タイトル:
Re^5: コマンドボタンでダブルクリック
シングルクリック・ダブルクリックの区別については
花ちゃんさんのコードがよいと思いますよ。

紹介したAPIはご存知のようにダブルクリックの認識間隔です。
ダブルクリックの認識はPCの設定毎に異なるでしょうから
こういったAPIがありますよと参考までに紹介させていただきました。

#No.3397のレスの付け方に不適切なところが
#ありましたら申し訳ありませんでした。

投稿時間:2003/04/02(Wed) 17:06
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^6: コマンドボタンでダブルクリック
> #No.3397のレスの付け方に不適切なところが
> #ありましたら申し訳ありませんでした。

いいえ、私の方が早合点していたようですみませんでした。

投稿時間:2003/04/04(Fri) 00:41
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^3: コマンドボタンでダブルクリック
こんばんは。

 lngSt が、Long型なので、小数点以下が4.5捨5.6入?(いちばん近い偶数に丸める)
されています。したがって、ダブルクリックの間隔が、約0〜1秒になってしまい、うまく
ダブルクリックを認識しない時があります。
 ついでに、GetDoubleClickTime と、マウスクリックの連打に対応してみました。後、気に
なるのは日替わりの直前にクリックした場合の処理が考慮されていないところですね(^^;

Option Explicit
Dim nClick As Long
Private Declare Function GetDoubleClickTime Lib "user32" () As Long

Private Sub Command1_Click()
    Dim sngSt As Single
    If nClick = 0 Then
        nClick = 1
        sngSt = Timer + GetDoubleClickTime / 1000
        Do While Timer < sngSt
            DoEvents
            If nClick = 0 Then Exit Do
        Loop
    Else
        Debug.Print "DblClick"
    End If
    nClick = 0
End Sub