【发布时间】:2011-12-25 23:11:20
【问题描述】:
您好,我有一个表格,里面有几个框架。
对于某些帧,我希望滚动内容(或至少处理鼠标滚轮事件)。
我尝试了以下方法:
只需为每一帧分配一个 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 中,接收焦点的控件是持有我希望向其发送鼠标滚轮事件的框架的面板。
那么,简单地说,我如何将鼠标滚轮事件引导到鼠标光标所在的最顶层控件(无论光标在哪个框架/父级/窗体等)?
【问题讨论】:
-
看看 [这些 SO 答案][1] 他们可能会有所帮助。 [1]:stackoverflow.com/questions/2472743/…
标签: delphi focus mousewheel tform tframe