@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Access2000でホイールマウスイベントを取得する方法について・・・

1
投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2007-08-28 14:41
 お世話になっております。
Access2000のフォームにテキストボックスを一つ配置し、初期値として0を代入しておき、ホイールを上に回すとカウントアップ。下に回すとマイナス方向にカウントダウン。ホイールをクリックするとカウントを0に戻す。
という動作を実現したいと思っております。

http://support.microsoft.com/kb/278379/ja

を参考に、ActiveXDLLを作成しようとしているのですが、キャンセルイベントしか例がなく、実際どのようにすれば実現できるかご教授いただければ光栄です。

 参考になる情報だけでも結構ですので、何卒アドバイスのほどよろしくお願い申し上げます。
だんじり
大ベテラン
会議室デビュー日: 2007/08/10
投稿数: 155
お住まい・勤務地: 神奈川県
投稿日時: 2007-08-28 15:34
だんじりと申します。
私も以前リスト上にホイールマウスがきたときにホイールを動作させる
ソフトを組みましたので、そのコードを下に転記します。

概要は、リスト1_MouseMoveイベントプロシージャにMe!リスト1.SetFocus
を設定し、フォーカスがリスト1にあることを知らせます。


下はフォーム上の2つのリストがあり、マウスがリスト1の上にきたときに
ホイールマウスはリスト1を対象として動作し、リスト2に対しても同様な
コードを記載すると、ホイールを使うことが出来ます。ホイールをクリック
するとカウントを0に戻すにはホイールクリックイベントのようなものはな
いでしょうか。

Private Sub リスト1_MouseMove(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
Me!リスト1.SetFocus
End Sub


VB2005では List1_MouseMoveイベントプロシージャに Me.List1.Focus()
と記述して、フォーカスがリスト1にあることを知らせます。



[ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-28 15:58 ]

[ メッセージ編集済み 編集者: だんじり 編集日時 2007-08-28 22:47 ]
YAS
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 59
投稿日時: 2007-08-30 01:51
こんなナイスなサンプルがあったのですね。知りませんでした。
http://support.microsoft.com/kb/278379/jaのサンプルをホイールの回転を取得できるように変更します。
全部コピーすると問題がありそうなので,変更点のみ紹介します。
上がオリジナル,下が変更後です。

コード:

CMouseWheel.clsの変更点

Public Event MouseWheel(Cancel As Integer)
Public Event MouseWheel(intDelta As Integer, Cancel As Integer)

Public Sub FireMouseWheel()
Public Sub FireMouseWheel(intDelta As Integer)

RaiseEvent MouseWheel(intCancel)
RaiseEvent MouseWheel(intDelta, intCancel)

basSubClassWindow.basの変更点

CMouse.FireMouseWheel
CMouse.FireMouseWheel (GET_WHEEL_DELTA_WPARAM(wParam))

-----以下をbasSubClassWindow.basに追加-----------------------------------
'WinUser.h
'#define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam))
Private Function GET_WHEEL_DELTA_WPARAM(wParam As Long)
GET_WHEEL_DELTA_WPARAM = CInt(HIWORD(wParam))
End Function

'WinDef.h
'#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
Private Function HIWORD(l As Long) As Integer
HIWORD = CInt(l \ &H10000)
End Function
-----ここまで-------------------------------------

Accessのフォームのモジュールの変更点

Private Sub clsMouseWheel_MouseWheel(Cancel As Integer)
Private Sub clsMouseWheel_MouseWheel(intDelta As Integer, Cancel As Integer)



以上の変更で,intDeltaからホイールの回転が取得できると思います。
(通常,intDeltaは120か-120のどちらかです。)

[ メッセージ編集済み 編集者: YAS 編集日時 2007-08-30 01:54 ]

[ メッセージ編集済み 編集者: YAS 編集日時 2007-08-30 01:56 ]
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2007-08-30 08:29
なんと!!!できました!
ご教授いただきましてありがとうございました。感謝しております。
1

スキルアップ/キャリアアップ(JOB@IT)