ディレクトリBOXをシングルクリックで動かす方法

解決


とらサン  2006-12-21 20:09:46  No: 97483

VB6+XPでいじっています。
ソフト全体にシングルクリックで動くように統一したいのですが現在はディレクトリBOXだけがダブルクリックでないと動かないのがイマイチです。現在はDir1.changeにコードを書いていますが何かシングルクリックで動かす方法があったら教えてください。(ClickやMouseDownなどではだめでした)


VB梅  2006-12-22 21:53:21  No: 97484

とらサンへ
こんにちは
マウスのAPIを利用する方法

Option Explicit
Private Declare Sub mouse_event Lib "user32.dll" _
        (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, _
        ByVal dwData As Long, ByVal dwExtraInfo As Long)

Private Sub Dir1_Click()
    Call mouse_event(&H2, 0, 0, 0, 0)'マウス左ボタンを押す
    Call mouse_event(&H4, 0, 0, 0, 0)'マウス左ボタンを離す
End Sub


とらサン  2006-12-23 02:03:23  No: 97485

VB梅様  いつもご教示大変ありがとうございます。一見したところINDEXに相当するものが見当たらないのでこれをChangeのように使うにはどのようにしたらよいものかと悩んでいましたが試しにコピペしてみましたらこれだけのコードで思った動きが得られました。現在は理解はしていないものの希望通りの動きに大満足ですので当面は結果オーライで組み込ませていただきました。

mouse_eventなどというものは初めての出会いなのでキーワードでググって見ましたら幾つかの解説がみつかりました。現時点では「コードからマウスのイベントを起こす」程度の知識ですが。いつも大変助かります。ありがとうございました。


通ってみた  2006-12-23 02:22:55  No: 97486

クリックイベントで強制クリック=ダブルクリック、ということかと


とらサン  2006-12-23 19:34:21  No: 97487

通ってみた様  何故これで動くのかが納得しました。
現在はVB梅様のソースで問題なく動くのですが原理的に考えると現在は
1.Clickで押された状態(マウス)
2.Call mouse_event(&H2, 0, 0, 0, 0)'マウス左ボタンを押す
3.Call mouse_event(&H4, 0, 0, 0, 0)'マウス左ボタンを離す
4.実際にマウスを離す
というもので  押す-押す-離す-離す  という順序ですので正しい(?)ダブルクリックを発生させるのには2と3を入れ替えたら、と考えて実験しましたらこれでも動きました。原理が少し分かりましたので安心して使わせていただきます。ありがとうございました。


VB梅  2006-12-25 19:00:11  No: 97488

とらサンへ
こんにちわ、考え方が違うのでお話します。
Clickとは「押す-離す」の一連の動作を言います。
よってClickイベントは「押す-離す」の「離す」によって発生します。
今回の私のソースは
マウスの左ボタンを「押す-離す」でClickイベント発生
APIを使用して「押す-離す」と言う事をしています

    実マウス → API
「押す-離す」→「押す-離す」

また、DirBoxはダブルクリックで動作するのではなく
「押す-離す」→「押す」で動作しますから。
Private Sub Dir1_Click()
    Call mouse_event(&H2, 0, 0, 0, 0)'マウス左ボタンを押す
End Sub
と言うソースで動作します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加