你好,我有一个包含多个框架的表单。
对于其中一些框架,我希望能够滚动内容(或至少处理鼠标滚轮事件)。
我尝试了以下方法:
为每个框架分别指定OnMouseWheel事件处理程序
重写父表单的MouseWheel事件:
procedure TFmReview.MouseWheelHandler(var Message: TMessage);
var Control: TControl;
begin
Control := ControlAtPos(ScreenToClient(SmallPointToPoint(TWMMouseWheel(Message).Pos)), False, True);
if Assigned(Control) and (Control <> ActiveControl) then
begin
ShowMessage(Control.Name);
Message.Result := Control.Perform(CM_MOUSEWHEEL, Message.WParam, Message.LParam);
if Message.Result = 0 then
Control.DefaultHandler(Message);
end else inherited MouseWheelHandler(Message);
end;
很遗憾,两种方法都似乎不起作用。
情况1下,事件从未触发,但是父表单的鼠标滚轮处理程序被触发。
情况2下,接收焦点的控件是包含我想要发送鼠标滚轮事件的框架的面板。
因此,简而言之,如何将鼠标滚轮事件定向到鼠标光标所在的最顶层控件(无论光标位于哪个框架/父级/窗体等)?