在不同的显示器分辨率下的Form大小变化问题(100分)

  • 主题发起人 主题发起人 yang xuewen
  • 开始时间 开始时间
Y

yang xuewen

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手,请速来教我。我所用电脑(笔记本)显示分辨率为1024*768,
当我所编的程序拷到800*600显示器的台式电脑中使用时,Form变得太小,不能
全部显示,如何解决这个问题?(不需调整显示器分辨率)
 
方法有很多
1、把你笔记本分辨率设置为800*600开发——凑合
2、自己计算控制大小及控件位置——麻烦
3、用控件(好像叫Resize什么的)——你自己试试
 
有无更多、更好的办法,多谢了。
 
设置一下Form和Form中控件的Anchors的属性。
 
你可以在进入你的程序时,修改屏幕的分辩率,以适应你的应用程序;
在退出时,再复原屏幕分辨率。
 
在OnCreate事件里,判断屏幕分辨率,据此改变Form宽度,高度
 
笔记本电脑的分辨率是不是不能随便设置?
 
请问hangzhou,如何修改屏幕的分辨率?详细点。
请问han,如何在onCreate做到判断分辨率,并设置Form的大小等。
 
分辨率更改为设计时的分辨率
procedure TForm1.FormCreate(Sender: TObject);
var
devmode:tDevicemode;
begin
if screen.width<>orignwidth then
begin
if EnumDisplaySettings(nil,0,devmode) then
begin
devmode.dmfields:=dm_pelswidth OR dm_pelsheight ;
devmode.dmpelswidth:=orignwidth; {宽度}
devmode.dmpelsheight:=orignheight;{高度}
ChangeDisplaySettings(devmode,0); {更改设置}
end;
end;
end;

 
如果是游戏的话,运行时改变系统的分辨率还可以,但如果是一般的应用程序,这样做似乎太
霸道了一些。
该Anchors的属性也不能适应不同屏幕的分辨率。好一点的办法是han的方法了,可又太麻烦
 
如果是我的话,就在我的程序中更改分辨率,让电脑的分辨率适应自己当时开发时的分辨率
还有一种方法是在Form的Resize事件中调整表单上的各个组件,适应新的分辨率。不过第
二种方法我觉得不太好调整,我赞同lzliang的意见。
 
在程序开始是检查分辨率,然后对form进行resize
 
是否可以设置Form的最大化窗口时,窗口为800*600,这样就不要修改程序了
 
可以用getsystemmetic来获取系统分辨率,可据此判断有几个显示器,及显示器的分辨率是
多大,然后根据情况调整你的窗体及窗体上的控件。当然如果你的窗体上控件很多且无规
律,那是很难的。我的办法是把相关的控件放到一个panel上,有的Panel是不调整大小
的,只调整位置,有的比较好调整大小的再调整。所有的调整都应当放到窗体的resize
事件中。不推荐每个控件都调整大小,会很难看的。比如只调整grid的大小,memo的大小
等。
 
下面的例子能够调整Form的分辨率,但相应的控件调整就不怎理想。
默认1024*768
procedure Screen_Change(FormOld:TForm) ;
var fwight,fHeight:integer;
begin
with FormOld do
begin
if (screen.width<>1024) then
begin
Fwight := width;
FHeight := Height;
Scaled := true;
Font.Size := (Width div fwight)*font.size;
Font.Size := (Height Div fHeight)* font.Size;
scaleby(screen.width,1024);
ScaleBy(Screen.Height,768);
Height:= longint(Height)*longint(screen.height) div 768;
width:= longint(width)*longint(screen.width) div 1024;
end;
end;
end;
 
我记得好像笔记体的分辨率不能随便改。不过,有的游戏又能自动更改分辨率。
 
后退
顶部