鼠标滚轮实现缩放的问题

wyyxl2002 2010-05-05 04:22:46
我想使用鼠标滚轮实现自定义倍率的缩放,实现步骤如下:
设置属性axMap1.MousewheelSupport = MapXLib.MousewheelSupportConstants.miMousewheelNoAutoScroll;
然后就可以使用鼠标滚轮实现缩放,但是缩放倍率始终是系统默认的2倍。
添加鼠标滚轮事件
this.axMap1.MouseWheelEvent += new AxMapXLib.CMapXEvents_MouseWheelEventHandler(this.axMap1_MouseWheelEvent);
在事件实现函数里面按照自定义的倍率设置map的zoom属性。
但是运行时发现,map是先缩放到函数里面设定的倍率,然后按照系统默认的2倍率进行缩放,相当于缩放了两次。
请教一下怎么屏蔽系统默认的缩放,如果设置axMap1.MousewheelSupport=miNoMousewheelSupport,就无法响应MouseWheelEvent 事件。

...全文
500 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_shu_jie 2012-10-10
  • 打赏
  • 举报
回复
我也遇到了,不知道怎么解决,是想实现缩放到一定倍数后便不能再缩放的功能,后来想了一个变态的方法勉强能应付
procedure TFrmMain.Map1MouseWheel(ASender: TObject; Flags: Integer;
zDelta: Smallint; var X, Y: Single; var EnableDefault: WordBool);
var mapX,mapY:double;
begin
if zDelta=120 then//滚轮向前放大
if map1.Zoom<StartZoom*0.5 then begin//StartZoom 为我的初始大小integer类型,避免double类型小数不准确问题
map1.Zoom:=map1.Zoom*2;//这里是为了解决自动放大两倍而先缩小2倍抵消用
end
else if zDelta=-120 then//滚轮向后缩小
if (Round(map1.zoom)>=StartZoom) then begin
map1.Zoom:=map1.Zoom*0.5;//这里是为了解决自动缩小两倍而先放大2倍抵消用
end
end;

最终有个问题就是,一旦滚轮转的太快或者一直转仍然会继续放大缩小,唉,我能做的只有这么多了
zhouguoyu2010 2010-10-07
  • 打赏
  • 举报
回复
js函数能够实现吧
jefferyyangkai 2010-09-17
  • 打赏
  • 举报
回复
这个涉及windows的消息响应,估计mapx滚轮变化可能发出了两个消息,你自定义接受了一个,但是另一个还是间接的触发了默认的2倍变化的函数。
yanpeng1hao 2010-08-14
  • 打赏
  • 举报
回复
跟你的鼠标滚轮设置有关,其它是程序控制,我没用这个,是js做的
weike021996 2010-07-01
  • 打赏
  • 举报
回复
mark
gsxingzhewujiang 2010-06-25
  • 打赏
  • 举报
回复
bbbbbbbbbbbbbbbbbbbb

2,142

社区成员

发帖
与我相关
我的任务
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
  • 地理信息系统
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧