gpt4 book ai didi

windows - 鼠标滚轮事件

转载 作者:可可西里 更新时间:2023-11-01 10:01:26 25 4
gpt4 key购买 nike

我有一个包含许多控件( TreeView 、备忘录、列表框、面板等)的表单。

我想在鼠标悬停在组件上并滚动滚轮时自动移动这些控件的滚动条。

就像rad studios inspector bar , tool box , project manger 的工作方式一样。

并且无法在每个控件上键入相同的代码(目前已超过 11 个控件)

[Edited]

Thanks for all of your answers but

controls like buttons don't have scroll-bars so their parents (like panels , frames ) must be moved when mouse wheel is moved over the buttons (child controls)

最佳答案

向您的表单添加一个 TApplicationEvents,并添加一个 OnMessage 处理程序:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
pnt: TPoint;
ctrl: TWinControl;
begin
if Msg.message = WM_MOUSEWHEEL then
begin
if not GetCursorPos(pnt) then Exit;
ctrl := FindVCLWindow(pnt);
if Assigned(ctrl) then
begin
SendMessage(ctrl.Handle, Msg.message, Msg.wParam, Msg.lParam);
Handled := true; // or maybe Msg.message := WM_NULL;
end;
end;
end;

更新

David Heffernan [查看评论] 想出了一个改进此代码的聪明方法:

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
pnt: TPoint;
ctrl: TWinControl;
begin
if Msg.message = WM_MOUSEWHEEL then
begin
if not GetCursorPos(pnt) then Exit;
ctrl := FindVCLWindow(pnt);
if Assigned(ctrl) then
Msg.hwnd := ctrl.Handle;
end;
end;

关于windows - 鼠标滚轮事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5606622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com