嗨我有一个窗体里面有几个框架。Delphi 7 - 处理表单中嵌入框架的MouseWheel事件?
对于一些框架,我希望滚动的内容(或至少处理mousewheel事件)。
我曾尝试以下:
只需指定一个OnMouseWheel事件处理程序对每一帧
重写鼠标滚轮事件父窗体:
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中,接收焦点的控件是保存要发送mousewheel事件的帧的面板。
所以,简单地说,我怎样才能将mousewheel事件指向鼠标光标所在的最顶端控件(无论光标在哪个框架/父/表单等中)?
看看[这些SO答案] [ 1]他们可能会帮助。 [1]:http://stackoverflow.com/questions/2472743/what-is-the-best-method-for-implementing-mouse-wheel-activity-in-delphi-vcl-form –
可能的重复[如何指导鼠标滚轮输入来控制光标,而不是集中?](http://stackoverflow.com/questions/2251019/how-to-direct-the-mouse-wheel-input-to-control -under-cursor-instead-of-focused) – Kromster