将Form的Scaled设为true即可,
这样Form及其上的控件都适应屏幕的分辨率了
测分辨率的方法是:
GetDeviceCaps(GetDC(frmMain->Handle),HORZRES); //横
GetDeviceCaps(GetDC(frmMain->Handle),VERTRES); //纵
可测出是 640x480 , 800x600 , 1024x768 ......
动态设置分辩率 别人的代码
function DynamicResolution(x, y: WORD): Boolean;
var
lpDevMode: TDeviceMode;
begin
Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := x;
lpDevMode.dmPelsHeight := y;
Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end;
end;
还有一段,你参考一下
一般来说,在一种屏幕分辨率下设计的窗体换到另一种屏幕分辨率下去显示,
其大小会改变。要使窗体大小不依赖于屏幕分辨率,最简单的思路就是在运行
程序时将系统的屏幕分辨率设置为创建窗体时的屏幕分辨率,然后在退出程序时
再将屏幕分辨率恢复到初始值;还有一种思路是先比较两种分辨率大小,
再根据结果按比例扩大或缩小窗体。
这两种方法各有优缺点:前者会影响其他程序的显示,后者要做得完美就比较复杂,
需要修改窗体大小,各个控件的位置及字体大小等,但这可以通过技巧来完美地解决。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const
ScreenHeight: integer = 800;
ScreenWidth: integer = 600;
implementation
{$R *.DFM}
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);
//调用窗体的scaleBy函数,将窗体大小变为初始大小的x/ ScreenHeight倍。
//这是本程序的关键技巧,同时缩放的包括窗体上各组件和字体。
end;
end;
end.