Active Control

01/12/2015 - 11:03 von Lothar Geyer | Report spam
Ich habe zwei Grids auf einer Form. Nun möchte ich mit der Maus
scrollen, und zwar immer das Grid, über dem sich die Maus befindet. Und
zwar ohne das Grid durch einen Klick als aktives Control zu markieren.
So ungefàhr wie das im Thunderbird auch geht.

Kann ich da einfach im _MouseMove ein Set Me.ActiveControl=MeinGrid setzen?

Falls Nein: wie macht man das dann?

Lothar Geyer
 

Lesen sie die antworten

#1 Klaus Ketelaer
01/12/2015 - 17:58 | Warnen spam
Am 01.12.2015 um 11:03 schrieb Lothar Geyer:
Ich habe zwei Grids auf einer Form. Nun möchte ich mit der Maus
scrollen, und zwar immer das Grid, über dem sich die Maus befindet. Und
zwar ohne das Grid durch einen Klick als aktives Control zu markieren.
So ungefàhr wie das im Thunderbird auch geht.

Kann ich da einfach im _MouseMove ein Set Me.ActiveControl=MeinGrid setzen?

Falls Nein: wie macht man das dann?

Lothar Geyer



Ich habe das gerade mal getestet.

Ich habe einen MouseHook gesetzt, und dann sowas gemacht:

Public Function MouseProc(ByVal uMsg As Long, ByVal wParam As Long,
lParam As MOUSELLHOOKSTRUCT) As Long
Static hWindow As Long

Dim p As POINTAPI
Dim hwnd As Long


If uMsg >= 0 Then
Select Case uMsg
Case HC_ACTION
Select Case wParam
Case WM_LBUTTONDOWN
Case WM_LBUTTONUP
Case WM_RBUTTONDOWN
Case WM_RBUTTONUP
Case WM_MBUTTONDOWN
Case WM_MBUTTONUP
Case WM_MOUSEMOVE
Call GetCursorPos(p)
hwnd = WindowFromPoint(p.X, p.Y)
If hwnd <> hWindow Then
If (GetParent(hwnd) = hParent) Then
hWindow = hwnd
Call SetFocus(hWindow)
Debug.Print hWindow
End If
End If
Case WM_MOUSEWHEEL
Case Else
End Select
Case HC_NOREMOVE
End Select
End If

MouseProc = CallNextHookEx(hMouseHook, uMsg, wParam, lParam)
End Function

Das ist nur mal so hingeschmiert und kann sicherlich noch optimiert
werden. Es funzt mit einer Form voller Controls bestens;-)

Ähnliche fragen