Delphi 7-处理窗体中嵌入帧的鼠标滚轮事件?
嗨,我有一个里面有几个框架的表格 对于某些帧,我希望滚动内容(或者至少处理mousewheel事件) 我尝试了以下方法: 只需为每个帧分配onmouseheel事件处理程序 覆盖父窗体的鼠标滚轮事件:Delphi 7-处理窗体中嵌入帧的鼠标滚轮事件?,delphi,focus,mousewheel,tform,tframe,Delphi,Focus,Mousewheel,Tform,Tframe,嗨,我有一个里面有几个框架的表格 对于某些帧,我希望滚动内容(或者至少处理mousewheel事件) 我尝试了以下方法: 只需为每个帧分配onmouseheel事件处理程序 覆盖父窗体的鼠标滚轮事件: procedure TFmReview.MouseWheelHandler(var Message: TMessage); var Control: TControl; begin Control := ControlAtPos(ScreenToClient(SmallPointToP
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;
过程TFmReview.mouseweelHandler(var消息:TMessage);
var控制:TControl;
开始
控件:=ControlAtPos(屏幕到客户端(SmallPointToPoint(TWMMouseWheel(Message.Pos)),False,True);
如果分配了(控制)和(控制活动控制),则
开始
ShowMessage(Control.Name);
Message.Result:=Control.Perform(CM_mouseweel,Message.WParam,Message.LParam);
如果Message.Result=0,则
Control.DefaultHandler(消息);
结束继承的MouseWheelHandler(消息);
结束;
不幸的是,两者似乎都不起作用
- 在案例1中,事件永远不会触发,但会触发父窗体鼠标滚轮处理程序
- 在案例2中,接收焦点的控件是保存我希望向其发送鼠标滚轮事件的帧的面板李>
因此,简单地说,我如何将鼠标滚轮事件定向到鼠标光标所在的最顶端控件(无论光标位于哪个帧/父/窗体等)?要将鼠标滚轮处理延迟到当前鼠标光标所在的控件上,请使用如下代码在主帧窗体中重写该方法:
type
TMainForm = class(TForm)
private
procedure MouseWheelHandler(var AMessage: TMessage); override;
public
{ Public declarations }
end;
implementation
procedure TMainForm.MouseWheelHandler(var AMessage: TMessage);
var
Control: TWinControl;
begin
Control := FindVCLWindow(SmallPointToPoint(TWMMouseWheel(AMessage).Pos));
if Assigned(Control) then
begin
AMessage.Result := Control.Perform(CM_MOUSEWHEEL, AMessage.WParam,
AMessage.LParam);
if AMessage.Result = 0 then
Control.DefaultHandler(AMessage);
end
else
inherited MouseWheelHandler(AMessage);
end;
看看[这些答案][1]它们可能会有所帮助。[1] :由于某些原因,此代码可能重复。当我滚动到TMA上方时,此代码会产生StackOverflow