Sim*_*mon 6 delphi focus mousewheel tframe tform
嗨,我有一个内部有几个框架的表格.
对于某些帧,我希望滚动内容(或至少处理鼠标轮事件).
我尝试过以下方法:
只需为每个帧分配一个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;
Run Code Online (Sandbox Code Playgroud)
不幸的是,两者似乎都没有用.
因此,简单地说,如何将鼠标滚轮事件指向鼠标光标所在的最顶层控件(无论光标位于哪个帧/父/窗体等)?
要将鼠标滚轮处理推迟到当前鼠标光标所在的位置,请使用如下代码TWinControl
在主框架中覆盖该方法:MouseWheelHandler
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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3046 次 |
最近记录: |