请教怎样实现图形的无缝平移?看了孙以义老师的《计算机地图制图》,书中给出的代码是平移过程中先移动位图,再将位图用canvas.draw画到客户区上。如果图形比客户区小就没有问题,但如果当前图形比客户区大,比如先进行局部放大再平移,则这样平移的效果是只能移动客户区中显示的一部分,图形被切割了。我尝试使图形在移动时随时重画,在mousemove过程中用一个bmp画当前的图形,然后canvas.draw到客户区再repaint,但是结果在平移过程中图形只是在原地闪烁而没有移动,试了一天了还没有解决,没办法了来向高人求救,是我的方法有问题还是方法没错没有正确实现?最好是能提供点代码,关键部分就行。mousemove过程。如果只是画橡皮线然后显示最终的位置就不必了。谢谢!
解决方案 »
- 小弟作了一个扫号器,连续输错几次数码后,会出现验证吗,但如果关闭软件,换掉IP后,验证码又会消失,怎样在软件没有关闭的情况上,不让出现验证吗。
- 东进语音卡,取得按键值的问题
- 急!!! 编译出错问题!!!
- 大家帮忙看看这个控件怎么实现?高分求助
- 下面这个转换成delphi 要怎么转换??请大家帮帮咯
- 调用过程的问题
- 谁能给点思路:把ASP文件中非服务器脚本部分全部加密,然后再编个IE补丁解密执行。在线...
- 问题! 学习delphi的问题?
- SQL2000数据库内的BMP如何转换成JPG?
- delphi 调用指针函数的问题!DLL 里有个指针函数,调用的时候怎么在type里定义????
- 请问:在delphi中怎么判断系统是否安装了打印机??---------在线等待!!!
- 安装程序运行时客户端出现没有注册的错误?
begin
_Draw(MovePt, Point(x,y));
MovePt:= Point(x, y);
end;
procedure TPanTool._Draw(BeginPt, EndPt: TPoint);
begin
GDrv.Pan(BeginPt.X, BeginPt.Y, EndPt.X, EndPt.Y);
GDrv.DrawMap(BlArray); //11111111111
GDrv.Canvas.Draw(0,0,GDrv.OffScrBMP); //11111111111GDrv是一个TGeoDrvWithDoubleBuffer类对象。有两个成员OffScrBMP和DoubleBuffered,前者是一个Bitmap类对象,绘图时在OffScrBMP中绘图然后载入窗体,DoubleBuffered是一个boolean变量,记录是否打开双缓冲。GDrv.Pan过程是计算平移后世界坐标原点的平移量,GDrv.DrawMap过程是在OffScrBMP中绘图。这两个过程是没有问题的,我的放大缩小局部放大功能都已经实现了,平移的过程如果把加注释的那两句改成Form1.repaint;就可以正常平移,但因为不停repaint所以会闪烁,因为FormPaint()过程中有清屏的语句。但如果不改,平移时会在左下角出现一个小窗口,平移时可以在小窗口里看到移动的画面,而窗体上又没有图形,直到松开鼠标才出现。我怀疑是OffScrBMP的尺寸的原因,但在状态栏输出尺寸数值时又没有错,不知道是怎么回事?对了,我改变了绘图的映射模式,是MM_Lometric模式。请教各位了,实在不行我就还是repaint了算了。