不会那么复杂吧, if screen.Width <> 1024 then scaleby(screen.Width,1024); 就可以了,它会自动去调整,不过你在设置窗体的字体最好是:宋体,小四, 这样它转变时字体不会“变态”!!
在程序运行时调整分辨率,结束退出后恢复原来的分辨率,这样也不会影响个人爱好 procedure TmainFRM.FormCreate(Sender: TObject); if(Screen.width<>1024)then //在这里进行分辨率的调整,调成1024*768的 begin change:=true; flag:=EnumDisplaySettings(nil,0,DevMode); //取得旧的显示参数 if flag then begin screenWidth:=getdevicecaps(GetDc(0),HORZRES); screenHeigth:=getdevicecaps(GetDc(0),VERTRES); screenFrequency:=getdevicecaps(getdc(0),VREFRESH); DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY; DevMode.dmPelsWidth:=1024; DevMode.dmPelsHeight:=768; DevMode.dmDisplayFrequency:=screenFrequency; ChangeDisplaySettings(DevMode,0); //设置新的显示参数 end; end else change:=false;procedure TmainFRM.FormDestroy(Sender: TObject); //在这里恢复原来的分辨率 var flag:boolean; DevMode:Tdevmode; begin if change then begin flag:=EnumDisplaySettings(nil,0,DevMode); //取得旧的显示参数 if flag then begin DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY; DevMode.dmPelsWidth:=screenWidth; DevMode.dmPelsHeight:=screenHeigth; DevMode.dmDisplayFrequency:=screenFrequency; ChangeDisplaySettings(DevMode,0); //设置新的显示参数 end; end; end;
procedure TForm1.FormShow(Sender: TObject);
var
x,y:longint;
//默认分辨率为800x600
begin
label3.Color:=$0080FFFF;
label4.Color:=$0097DEE8;
label5.Color:=$0097DEE8;
label6.Color:=$0097DEE8;
panel2.Left:=0; //panel2是库存面板
panel2.Top:=403;
panel2.Height:=115;
panel3.Left:=0; //panel3是报表打印面板
panel3.Top:=431;
panel3.Height:=87;
panel5.Left:=0; // panel5是系统管理面板
panel5.Top:=459;
panel5.Height:=59;
paneL4.Top:=501;
h:=168;w:=424;
x := GetSystemMetrics(SM_CXSCREEN);
y := GetSystemMetrics(SM_CYSCREEN);
Str(x,a);
Str(y,b);
if (a='1024') and (b='768') then //分辨率为1024x768
begin
panel2.Top:=403+h;
panel3.Top:=431+h;
panel5.Top:=459+h;
paneL4.Top:=501+h;
image3.Visible:=true;
image1.Visible:=false;
end
else
begin
panel2.Top:=403;
panel3.Top:=431;
panel5.Top:=459;
paneL4.Top:=501;
image3.Visible:=false;
image1.Visible:=true;
end;
end;这是一个OUTLOOK 风格的界面,在800*600和1024*768下自适应的
if screen.Width <> 1024 then scaleby(screen.Width,1024);
就可以了,它会自动去调整,不过你在设置窗体的字体最好是:宋体,小四,
这样它转变时字体不会“变态”!!
procedure TmainFRM.FormCreate(Sender: TObject);
if(Screen.width<>1024)then //在这里进行分辨率的调整,调成1024*768的
begin
change:=true;
flag:=EnumDisplaySettings(nil,0,DevMode); //取得旧的显示参数
if flag then
begin
screenWidth:=getdevicecaps(GetDc(0),HORZRES);
screenHeigth:=getdevicecaps(GetDc(0),VERTRES);
screenFrequency:=getdevicecaps(getdc(0),VREFRESH);
DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
DevMode.dmPelsWidth:=1024;
DevMode.dmPelsHeight:=768;
DevMode.dmDisplayFrequency:=screenFrequency;
ChangeDisplaySettings(DevMode,0); //设置新的显示参数
end;
end
else
change:=false;procedure TmainFRM.FormDestroy(Sender: TObject); //在这里恢复原来的分辨率
var
flag:boolean;
DevMode:Tdevmode;
begin
if change then
begin
flag:=EnumDisplaySettings(nil,0,DevMode); //取得旧的显示参数
if flag then
begin
DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
DevMode.dmPelsWidth:=screenWidth;
DevMode.dmPelsHeight:=screenHeigth;
DevMode.dmDisplayFrequency:=screenFrequency;
ChangeDisplaySettings(DevMode,0); //设置新的显示参数
end;
end;
end;