地图热点问题,高分求救!
yfd 2002-12-23 11:34:53 我这个问题的应用背景是:
有一个小系统要求有地图导航功能,这样,屏幕上的地图必须要能支持“热点”,即鼠标移动到地图上的某个区域时(OnMouseMove事件),系统要将这个区域变成另外一种颜色,表示这个区域被选中。
我用TImage显示地图,并尝试了下面几种方法实现地图“热点”:
方法一:
鼠标移动到地图上一定区域的时候,将屏幕上和鼠标所在点的颜色相同的点的颜色改成被选中的颜色(通过操作Image->Canvas->Pixels[][]来实现),由于我事先对地图做了特殊处理,使不同区域的颜色各不相同,所以这种方法可以实现地图“热点”,但是对屏幕上所有的点逐一检查并设置颜色的操作非常慢,而事件又非常频繁,所以这种方法速度太慢,无法使用。
方法二:
由于地图上的热点不多(20个左右),我预先将地图上所有可能出现的热点的情况生成了20多个静态图片(所以程序启动时比较慢),然后在OnMouseMove事件时用Image->Canvas->CopyRect方法将生成的静态图片拷贝到屏幕上来,用这个办法速度提高了不少,但是还是不够满意。
方法三:
方法三和方法二差不多,也预先生成了静态图片,关键是在OnMouseMove事件时,用
OldImage->Visible=0;
NewImage->Visible=1;
的方法实现图片切换,这样图片切换的速度大大加快了,速度不成问题了,但是切换图片的时候屏幕会闪烁。
请问:
有没有什么更好的办法?
怎么防止屏幕闪烁?