请问如何取得当前显示器的水平、垂直分辨率?(50分)

  • 主题发起人 主题发起人 孟林
  • 开始时间 开始时间
screen.height
screen.width
 
是分辨率亚!!!!!!!!!
 
没错啊,你以为它是什么?
 
不可理喻
 
xeen说的对呀!
除非你要的是垂直刷新频率!
 
screen.pixelperinch
是1英寸长度上分布的像素数,但这个只是处置方向上的。我需要水平、垂直两个方向的。
有一个API:GetDeviceCaps可以得到设备的分辨率,
但是需要screen的handle作为参数。

 
screen.height
screen.width
得到的就是当前显示器的分辨率,
得到的值如果是800 ,600 就是说800*600
其它的也一样,没有什么怀疑的,
 
说明一下:

分辨率是指单位长度上分布的像素数。
对此,有什么疑问吗?
 
如下: [:)]
procedure TForm1.Button1Click(Sender: TObject);
var x,y:longint;
begin
x := GetSystemMetrics(SM_CXSCREEN); //得到显示器水平区域
y := GetSystemMetrics(SM_CYSCREEN); //得到显示器垂直区域
ShowMessage('显示器水平区域:'+inttostr(x));
ShowMessage('显示器垂直区域:'+inttostr(y));
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var x,y,x1,y1:longint;
DC:HDC;
c:Double;
begin
DC:=GetDC(0);
try
x := GetDeviceCaps(DC,HORZSIZE);//这是显示器显示区域的宽,单位为mm
y := GetDeviceCaps(DC,VERTSIZE);//这是显示器显示区域的高,单位为mm
ShowMessage('显示器垂直高度:'+inttostr(x));
c:=SQRT(SQR(x)+SQR(y));//对角线长(mm).
c:=c/10/2.54;

ShowMessage('显示器水平分辨率:'+FloatToStr(c));//这是显示器可显示区域大小.
//比如我的显示器是17''的纯平,显示区域为15.748''.
x1 := GetDeviceCaps(DC,HORZRES);//这是显示器显示区域的宽,单位为象素
y1 := GetDeviceCaps(DC,VERTRES);//这是显示器显示区域的高,单位为象素
ShowMessage('显示器水平分辨率:'+FloatToStr(x1/x));
//这是你所说的水平单位长度mm上的象素个数,我的是3.2(1024*768).
ShowMessage('显示器水平分辨率:'+FloatToStr(y1/y));
//这是你所说的垂直单位长度mm上的象素个数,我的是3.2(1024*768).
finally
ReleaseDC(0,DC);
end;
end;
 
GetDeviceCaps(GetDC(0),LOGPIXELSX);
GetDeviceCaps(GetDC(0),LOGPIXELSY);
即得到所求。
 
接受答案了.
 
后退
顶部