一般来说,在一种屏幕分辨率下设计的窗体换到另一种屏幕分辨率下去显示,
其大小会改变。要使窗体大小不依赖于屏幕分辨率,最简单的思路就是在运
行程序时将系统的屏幕分辨率设置为创建窗体时的屏幕分辨率,然后在退出
程序时再将屏幕分辨率恢复到初始值;还有一种思路是先比较两种分辨率大
小,再根据结果按比例扩大或缩小窗体。这两种方法各有优缺点:前者会影
响其他程序的显示,后者要做得完美就比较复杂,
需要修改窗体大小,各个控件的位置及字体大小等,
但这可以通过技巧来完美地解决。
看如下代码:
procedure TForm1.FormCreate(Sender: TObject);
var
x, y: LongInt;
begin
form1.scaled := true;
//窗体可以缩放
x := getSystemMetrics(SM_CXSCREEN);
y := getSystemMetrics(SM_CYSCREEN);
//程序运行时获取目标机器的屏幕分辨率
if (x <> ScreenHeight) or (y <> ScreenWidth) then
//目标机器的屏幕分辨率与作者机器的屏幕分辨率不同
begin
form1.height:=form1.height*x DIV ScreenHeight;
form1.width:=form1.width*y DIV ScreenWidth;
scaleBy(x,ScreenHeight);
end;
end;