钱不多,但问题很容易?????????????(50分)

  • 主题发起人 主题发起人 dear
  • 开始时间 开始时间
D

dear

Unregistered / Unconfirmed
GUEST, unregistred user!
我的问题是:要能在不同屏幕分辨率下,当我在Image中画直线时能得到直线精确的长度,
如xx厘米(最好是毫米)。举个例:如何分别在1024X768和800X600得到120.33厘米的直线(要跟我用直尺量的一样长。
 
以毫米为单位画一个10mm*10mm矩形的范例:
function GetXFactor: Extended;
begin
Result := Screen.Width * 2.54 / 640;
end;

function GetYFactor: Extended;
begin
Result := Screen.Height * 2.54 / 480;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Rectangle(Trunc(10 * GetXFactor), Trunc(10 * GetYFactor),
Trunc(110 * GetXFactor), Trunc(110 * GetYFactor));
end;
 
老兄能否解释一下??Screen.Width----屏幕的宽度什么意思???,为什么要乘2.54?
除640是什么意思?分辨率??
我能不能得到在不同分辨率下每个象素的实际大小:???mm
 
用GetDeviceCaps可以达到屏幕长,宽的以毫米为单位
 
各种控件的计量单位。
 
Croco的代码大概是给出了640X480的画法,
既然原理清楚了,可以使用Enmu....(忘了)
获得屏幕实际分辨率,代入不同的数据。

不过您的精确度也太...高了吧,有这么精确
的显示器吗?天哪,Delphi真是万能!
 
先要用GetDeviceCaps取得系统的分辨率,然后再根据分辨率来做其他就简单了,,主要
是分辨率的问题解决。。
 
但是.....屏幕是可调的。如果我调节过实际显示了长和宽,那怎么办???
 
to :loopy
老兄既然你认为简单那就说出来听听!!!!!!1
 
to :loopy
老兄既然你认为简单那就说出来听听!!!!!!1
 
精确?不可能吧?
我更换了显示器怎么办,98总是说我的显示器是“未知显示器”。
 
我不知你为何要这样做,但实际上即使你能通过程序计算并画出“精确长度”,用直尺去
屏幕上量也是不可能达到你的要求的,会有点误差,因为会有很多因素影响到屏幕显示,
举个简单例子:显示器都可以调整垂直或水平方向的显示宽度,如果两台一模一样的显示
器显示一模一样的直线,当其中一台显示器的垂直或水平方向的显示比例与另一台不同时,
你就不可能量出同样的长度来。
不知你是否明白我的意思?
如果你认为这些可以不必考虑的话,可以去看看API函数getdevicecaps。
 
2.54是吋和厘米之间转换的比例系数。
 
这个问题一开始就错了,正如Soul所说屏幕是可调的!!那如果我用笔记本,想想你在屏幕上
画120.33MM的线会在一般电脑上显示为多少呢???
看看Photoshop等作图软件,都是软件自带上一个标尺,并不是你买软件时,软件商给你一把
直尺。在软件上画一根长120.33MM的线,只有在你打印出来(最好是印刷出来)就是120.33MM,
想屏幕上实现永远不可能!!
 
多人接受答案了。
 
后退
顶部