请参阅this prior related question。虽然那里的答案确实有效,但在涉及某些类型的控件时,我还有其他问题,例如TDBGrid
。如果TDBGrid
当前具有焦点,但鼠标指向另一个控件以进行滚动,则TDBGrid
无论如何都会滚动,从而导致两个不同的控件同时滚动。这种情况发生在我迄今为止发现的每个解决方案中,与滚动鼠标下方的控件有关。
如何防止此行为并确保仅鼠标滚动下的控件,而不是其他内容?
答案 0 :(得分:0)
此代码适用于我。
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var
Control: TWinControl;
begin
if Msg.message = WM_MOUSEWHEEL then
begin
// Find control at mouse cursor
Control := FindVCLWindow(Msg.pt);
if Assigned(Control) then
begin
// Try to scroll
if Control.Perform(CM_MOUSEWHEEL, Msg.wParam, Msg.lParam) <> 0 then
Handled := True
else
// If no scroll was performed by control,
// then detrmine if message control is at mouse cursor.
// If not, then supress message
if Control.Handle <> Msg.hwnd then
Handled := True;
end;
end;
end;