敬请各位帮忙,这是一个未成年人的问题,我烦死了!!!!!!!!!!!!!!!!!!!!!!!!!!! (100分)

  • 主题发起人 主题发起人 ccaolii
  • 开始时间 开始时间
C

ccaolii

Unregistered / Unconfirmed
GUEST, unregistred user!
一个未成年程序员的问题!真的呀,我才17岁呀!是不是未成年呀!
如何使一个控件的宽度为1厘米,在不同的分辨率下,怎么算呀?还有
hdc是屏幕句柄,HORZRES表示水平,但我就不知道这个缩放比例怎样用,我的水平真的太低
了,请求大家帮忙,一个下午时间,什么也没做出来,气死我了!!!!!谢谢大家!
GetDeviceCaps(hdc,HORZRES)* 1000 div 254
最好代码是BCB的,delphi的也可以!
 
大家帮我呀,我知道你们都知道是怎样去做,小弟在这里跟你们跪下了,求你了,ccaolii
放声大哭,求求你们了!
 
你太可怜了,唉。。。
 
更朋友,有一天我中奖了,我一定不会忘了你的!
 
有一个scaleby(具体怎么拼有点忘了)的函数取得当前分辨率的比例,根据这个你可以
做任何控件动态调整。另外,提个建议,程序员要多自己琢磨,别人给的原代码可以解决你这个问题,但你还是没
有掌握学习方法,别的问题你一样解决不了。
 
至不至于下跪啊?

windows里面我记得每inch有多少像素点是有规定的。换算一下不就ok了?

例如A4的纸长度是297.0mm,换成pixes是1122,
那么1cm不就是。。。。


 
if your monitor is 38 cm then, your component.width is 1/38 monitor,the scale won't
change,now you must know how to done it!
Other you can see the property of the TScreen;
 
先把窗体给管住:
Form1.Scaled := False;
 
A4的纸长度是297.0mm,换成pixes是1122,是怎样换成的呀,大家就做好人做到低吧!
 
请你们用你们的金指在键盘上敲击几正行吗?
 
以前的显示器通常象素点之间距离为0.28MM
不过现在有些显示器的点距达到0.25MM了

就这么换算吧
 
未成年人的问题?太迷惑人了 [;)]

Windows只提供逻辑pixels per inch (PPI)转换,换句话说,这个值是一定的,
查阅GetDeviceCaps 函数LOGPIXELSX LOGPIXELSY 部分

 
800X600 为28.22X21.17厘米
1024X768 为36.12X27.09厘米
怎么算,你自己看着办
 
助人为快乐之本,呵呵!以后请不要再出此骇世惊俗之语了!
归于正题:
1>“如何使一个控件的宽度为1厘米”,可以利用OnResize事件来改变控件的大小。
个人以为用GetSystemMetrics实现固定窗体大小,就足矣。无非是个适应不同分辨率的问题。利用screen的属性及SCALE过程可以自动调整控件大小适应不同分辨率。
2>“GetDeviceCaps(hdc,HORZRES)* 1000 div 254”是什么意思?是不是要获得屏幕的水平宽度?
那么用GetDeviceCaps(GetDC(Form1.Handle), HORZRES)即可!
在C++builder中该函数使用如下:
HDC hdc=GetDC(NULL); //获得屏幕设备描述表句柄
int i=GetDeviceCaps(hdc, HORZRES); //查询屏幕水平分辨率,并返回在变量i中
int j=GetDeviceCaps(hdc, VERTRES); //查询屏幕水平分辨率,并返回在变量j中
ReleaseDC(NULL, hdc); //释放屏幕设备描述表
而如果要缩放屏幕比例,怎么用GetDeviceCaps呢?当然是用ChangeDisplaySettings函数。
建议你多看看HELP文档,里面对函数的调用说得很详细![8D]
 
这个程序在14"和21"显示器上运行会有同样的结果吗?
操作系统又怎么知道显示器有多大?PNP????
 
由此来看,定制1cm宽度的控件有两种可能:
1:完成可能实现,是个适应不同分辨率的问题。
2:是不可能的。问题的关键不在于不同分辨率如何算而在于要知道显示器的Pixel的长和宽。
 
谢谢各位的回答,也许是我没有说明白,我的问题是这样的!
我不知道photoshop上的新建是如何实现的,就是它在新建的时候能输入模板的大小,比例宽
度为多少厘米什么的,我就想实现它这种的,而且他的标尺也能对应上它的模板宽度!如何
做呀,最好有一个例程,让我看看,如没有提点意见也行!感激!!!!!!!!
 
在photoshop中1厘米大约为28点pixels
如800X600 乘以28 为790.16X592.76
不用计算,直接用就行,在什么分辨率下都不会变
 
如果你把大小都定死了,还让人调分辨率干什么?
photoshop?你试过在各种分辨率下,各种显示条件下它的处理方法了吗?
 
下段函数求返回显示器上面相当于打印机纸张大小的一个矩形
function GetPageRect: TRect;
var
ScreenDC: HDC;
PageWidth, PageHeight: integer;
PrnWidth, PrnHeight: real;
begin
ScreenDC := GetDC(0);
try
VRes := GetDeviceCaps(ScreenDC, VertRes); //屏幕高度方向像素
VSize := GetDeviceCaps(ScreenDC, VertSize); //屏幕高度(毫米)
finally
ReleaseDC(0, ScreenDC);
end;

try
PrnWidth := GetDeviceCaps(Printer.Handle, HorzSize) / 10; //打印纸宽度(厘米)
PrnHeight := GetDeviceCaps(Printer.Handle, VertSize) / 10; //打印纸高度(厘米)
except
PrnWidth := 20.3;
PrnHeight := 26.8;
end;

PixelsPerCM := (VRes * 10) div VSize; (屏幕分辨率 像素/厘米)
PageWidth := Round(PrnWidth * PixelsPerCM);
PageHeight := Round(PrnHeight * PixelsPerCM);
result := Rect(0, 0, PageWidth, PageHeight);
end;
 
后退
顶部