VB6+XPでいじっています。
ソフト全体にシングルクリックで動くように統一したいのですが現在はディレクトリBOXだけがダブルクリックでないと動かないのがイマイチです。現在はDir1.changeにコードを書いていますが何かシングルクリックで動かす方法があったら教えてください。(ClickやMouseDownなどではだめでした)
とらサンへ
こんにちは
マウスの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
VB梅様 いつもご教示大変ありがとうございます。一見したところINDEXに相当するものが見当たらないのでこれをChangeのように使うにはどのようにしたらよいものかと悩んでいましたが試しにコピペしてみましたらこれだけのコードで思った動きが得られました。現在は理解はしていないものの希望通りの動きに大満足ですので当面は結果オーライで組み込ませていただきました。
mouse_eventなどというものは初めての出会いなのでキーワードでググって見ましたら幾つかの解説がみつかりました。現時点では「コードからマウスのイベントを起こす」程度の知識ですが。いつも大変助かります。ありがとうございました。
クリックイベントで強制クリック=ダブルクリック、ということかと
通ってみた様 何故これで動くのかが納得しました。
現在はVB梅様のソースで問題なく動くのですが原理的に考えると現在は
1.Clickで押された状態(マウス)
2.Call mouse_event(&H2, 0, 0, 0, 0)'マウス左ボタンを押す
3.Call mouse_event(&H4, 0, 0, 0, 0)'マウス左ボタンを離す
4.実際にマウスを離す
というもので 押す-押す-離す-離す という順序ですので正しい(?)ダブルクリックを発生させるのには2と3を入れ替えたら、と考えて実験しましたらこれでも動きました。原理が少し分かりましたので安心して使わせていただきます。ありがとうございました。
とらサンへ
こんにちわ、考え方が違うのでお話します。
Clickとは「押す-離す」の一連の動作を言います。
よってClickイベントは「押す-離す」の「離す」によって発生します。
今回の私のソースは
マウスの左ボタンを「押す-離す」でClickイベント発生
APIを使用して「押す-離す」と言う事をしています
実マウス → API
「押す-離す」→「押す-離す」
また、DirBoxはダブルクリックで動作するのではなく
「押す-離す」→「押す」で動作しますから。
Private Sub Dir1_Click()
Call mouse_event(&H2, 0, 0, 0, 0)'マウス左ボタンを押す
End Sub
と言うソースで動作します。
ツイート | ![]() |