组件中的Delphi鼠标滚轮事件

组件中的Delphi鼠标滚轮事件,delphi,mousewheel,Delphi,Mousewheel,我想写一个使用鼠标滚轮缩放的组件 类似谷歌地球的东西 我有一个使用onMouseWheel的组件,我有属性MaxZoom MinZoom和Zoom有一个更好的选项,就是使用位图StretchDraw,我正在尝试获取表单中组件区域的位置 据我所知,我必须找到每个父对象,直到找到tCustomform并添加所有组件的顶部和左侧组件,以获得对象位置以找到我的对象位置。有更好的办法吗 一旦我有了位置,我可以从鼠标光标位置缩放地图,如果鼠标在我的对象上,从哪里缩放 是否有人看到任何代码请这取决于您要缩放的

我想写一个使用鼠标滚轮缩放的组件 类似谷歌地球的东西

我有一个使用onMouseWheel的组件,我有属性MaxZoom MinZoom和Zoom有一个更好的选项,就是使用位图StretchDraw,我正在尝试获取表单中组件区域的位置

据我所知,我必须找到每个父对象,直到找到tCustomform并添加所有组件的顶部和左侧组件,以获得对象位置以找到我的对象位置。有更好的办法吗

一旦我有了位置,我可以从鼠标光标位置缩放地图,如果鼠标在我的对象上,从哪里缩放


是否有人看到任何代码请

这取决于您要缩放的内容类型; 我将只在这里发布如何获得车轮移动了多长时间

论私下申报

private
{ Private declarations }
procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
关于创建或任何其他启动过程

OnMouseWheel := formMouseWheel; // depends on you 
FormMouseWheel是这样来的

procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
// your code here 
// WheelDelta returns you - or + values (in my computer -120 and + 120 ; 
// It depends on control panel mouse wheel settings)

//   If it is a font make the font size bigger or 
// if it is a image 
 // strech := true;
//  increase width and height of the Timage
//and put them inside a scrollbox
// 
end;
我用vcl表格检查了它(不是内部组件),
如果您想缩放post-us您想缩放什么类型的内容如果您正在编写组件,那么您应该尝试覆盖组件中的以下两种方法:

function DoMouseWheelDown( Shift :TShiftState; MousePos :TPoint ) :Boolean; override; function DoMouseWheelUp( Shift :TShiftState; MousePos :TPoint ) :Boolean; override; 函数domouseheeldown(Shift:TShiftState;MousePos:TPoint):布尔值;推翻 函数DoMouseWheelUp(Shift:TShiftState;鼠标点:TPoint):布尔值;推翻
这些都是受保护的动态控制方法。每当鼠标滚轮旋转时,它们就会被调用

我不认为这可以在一个组件中可靠地完成,因为鼠标滚轮消息并不总是到达鼠标下的窗口。根据我的观察,轮子信息有时只发送到“窗体”窗口,有时只发送到鼠标下的窗口,有时它们同时发送到两个窗口!我解决这个问题的方法是将消息从表单窗口转发到相关的子组件,在子组件中我编写了一些代码,以避免重复激活。问题是,我的解决方案需要表单的协作,因此它不是“自包含的”。请参阅,和。