R
Regwolf
Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手,我编写了一个图形程序,该程序能读进固定格式的文件,这些文件中含有一些已知点的地理坐标。程序计算比例尺然后将这些点绘制到客户窗口。我编写的时候是在me下,一切正常。但在xp下运行时会出现一个问题,就是绘制出来的图形比客户窗口小了很多,而实际在me下运行时是占满整个客户区的。不知是怎么回事,请那位高手给点意见,谢谢。下面是我的计算比例尺的函数:
procedure TGeoDrv.AdjustScale; //调整地理坐标与逻辑坐标的比例以及地理坐标原点
Var Scale_X, Scale_Y : Real;
begin
Scale_X := (Xmax-Xmin)/CliHeight ;
Scale_Y := (Ymax-Ymin)/CliWidth ;
Scale := max(Scale_X, Scale_Y); //取大的比例才能保证网形可以完整显示且不变形
Scale := Scale*GetDeviceCaps(GetDC(Application.Handle),LOGPIXELSX)/254; //MM_TEXT与MM_LOMETRIC的比例,既是0.1mm的像素数,一般为96/254
Scale := Scale*1.05; //适当缩小网图
XOrg := Xmin - (CliHeight*max(Scale_X, Scale_Y)*1.05 - (Xmax-Xmin))/2 ; //设置地理坐标的起点并使网图居中
YOrg := Ymin - (CliWidth*max(Scale_X, Scale_Y)*1.05 - (Ymax-Ymin))/2 ;
end;
CliHeight和CliWidth分别是实际绘图的客户区域的高和宽。
需要强调的是,我绘图是直接在form上绘制的,没有用Paintbox或Image,我在form上放置了一个toolbar,一个statusbar,因此上面函数中的CliHeight值为form1.ClientHeight-StatusBar1.Height-ToolBar1.Height。我试过在xp和me下分别显示form1.ClientHeight的值,发现会差10。但这个不是原因,因为不管客户区的高和宽是什么值,因为上面函数的结果,都应该是占满整个客户区的。另外,映射模式是MM_LOMETRIC,所以要乘以96/254。
不是字符集的问题,我已经在view as text状态下将字符集改成GB2312,字体改成宋体了。而且其他的显示都很正常。
procedure TGeoDrv.AdjustScale; //调整地理坐标与逻辑坐标的比例以及地理坐标原点
Var Scale_X, Scale_Y : Real;
begin
Scale_X := (Xmax-Xmin)/CliHeight ;
Scale_Y := (Ymax-Ymin)/CliWidth ;
Scale := max(Scale_X, Scale_Y); //取大的比例才能保证网形可以完整显示且不变形
Scale := Scale*GetDeviceCaps(GetDC(Application.Handle),LOGPIXELSX)/254; //MM_TEXT与MM_LOMETRIC的比例,既是0.1mm的像素数,一般为96/254
Scale := Scale*1.05; //适当缩小网图
XOrg := Xmin - (CliHeight*max(Scale_X, Scale_Y)*1.05 - (Xmax-Xmin))/2 ; //设置地理坐标的起点并使网图居中
YOrg := Ymin - (CliWidth*max(Scale_X, Scale_Y)*1.05 - (Ymax-Ymin))/2 ;
end;
CliHeight和CliWidth分别是实际绘图的客户区域的高和宽。
需要强调的是,我绘图是直接在form上绘制的,没有用Paintbox或Image,我在form上放置了一个toolbar,一个statusbar,因此上面函数中的CliHeight值为form1.ClientHeight-StatusBar1.Height-ToolBar1.Height。我试过在xp和me下分别显示form1.ClientHeight的值,发现会差10。但这个不是原因,因为不管客户区的高和宽是什么值,因为上面函数的结果,都应该是占满整个客户区的。另外,映射模式是MM_LOMETRIC,所以要乘以96/254。
不是字符集的问题,我已经在view as text状态下将字符集改成GB2312,字体改成宋体了。而且其他的显示都很正常。