Delphi中的鼠标滚轮事件

时间:2010-12-03 03:10:55

标签: delphi mousewheel

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

我有一个使用onMouseWheel的组件,我有MaxZoom MinZoom和Zoom属性有一个更好的选项,StretchDraw与位图我试图获取组件区域的位置

我理解我必须找到每个父项,直到找到tCustomform并添加所有Component的顶部和组件以获取对象位置以找到我的对象位置。是否有更好的方式

一旦我有了位置,我可以从鼠标光标位置缩放地图,如果鼠标位于我的物体上方以及放大的位置。

有任何人见过任何代码

2 个答案:

答案 0 :(得分:2)

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

私人声明

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表单(不在组件内部)检查它, 如果您想要缩放我们想要缩放的内容类型

答案 1 :(得分:1)

如果您正在编写组件,那么您应该尝试在组件中覆盖这两种方法:

function DoMouseWheelDown( Shift :TShiftState; MousePos :TPoint ) :Boolean; override;
function DoMouseWheelUp( Shift :TShiftState; MousePos :TPoint ) :Boolean; override;

是TControl的受保护动态方法。只要鼠标滚轮旋转,它们就会被调用。