procedure screenRate(form:Tform); //适应不同分辨率 begin form.scaled:=true; //screenHeight,screenWidth开发环境的分辨率 定义成常量 if(screen.Width<>screenWidth) then begin form.height:=longInt(form.height)*longint(screen.height) div screenHeight; form.width:=longInt(form.width)*longInt(screen.width) div screenWidth; form.scaleby(screen.width,screenWidth); end; end;
我觉得用anchors做好了比用scaleby要好
var V_CXScreen,V_CYScreen,V_Frequency:integer; //当前分辨率 V_EXScreen,V_EYScreen : Integer; //修改后的分辨率procedure TFmLmMain.DealSystemMetrics; var i: Integer; begin V_CXScreen := GetSystemMetrics(SM_CXSCREEN); //系统当前分辨率 V_CYScreen := GetSystemMetrics(SM_CYSCREEN); V_Frequency := GetDeviceCaps(GetDC(application.Handle),VREFRESH); if V_CXScreen >= 1024 then begin V_EXScreen := 1024; V_EYScreen := 768; end else begin V_EXScreen := 800; V_EYScreen := 600; end; if (V_EXScreen <> V_CXScreen) or (V_EYScreen <> V_CYScreen) then SetScreenParams(V_EXScreen, V_EYScreen,V_Frequency); end;function SetScreenParams(PnCX,PnCY:word;PnFrequency :Integer):boolean; var DevMode:TDeviceMode; begin Result:=EnumDisplaySettings(nil,0,DevMode); if Result then begin DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY; DevMode.dmPelsWidth:=PnCX; DevMode.dmPelsHeight:=PnCY; DevMode.dmDisplayFrequency:=PnFrequency; //刷新频率 Result:=(ChangeDisplaySettings(DevMode,CDS_UPDATEREGISTRY)=DISP_CHANGE_SUCCESSFUL) end; end;
begin
form.scaled:=true; //screenHeight,screenWidth开发环境的分辨率 定义成常量
if(screen.Width<>screenWidth) then
begin
form.height:=longInt(form.height)*longint(screen.height) div screenHeight;
form.width:=longInt(form.width)*longInt(screen.width) div screenWidth;
form.scaleby(screen.width,screenWidth);
end;
end;
V_CXScreen,V_CYScreen,V_Frequency:integer; //当前分辨率
V_EXScreen,V_EYScreen : Integer; //修改后的分辨率procedure TFmLmMain.DealSystemMetrics;
var
i: Integer;
begin
V_CXScreen := GetSystemMetrics(SM_CXSCREEN); //系统当前分辨率
V_CYScreen := GetSystemMetrics(SM_CYSCREEN);
V_Frequency := GetDeviceCaps(GetDC(application.Handle),VREFRESH);
if V_CXScreen >= 1024 then
begin
V_EXScreen := 1024;
V_EYScreen := 768;
end else
begin
V_EXScreen := 800;
V_EYScreen := 600;
end; if (V_EXScreen <> V_CXScreen) or (V_EYScreen <> V_CYScreen) then
SetScreenParams(V_EXScreen, V_EYScreen,V_Frequency); end;function SetScreenParams(PnCX,PnCY:word;PnFrequency :Integer):boolean;
var
DevMode:TDeviceMode;
begin
Result:=EnumDisplaySettings(nil,0,DevMode);
if Result then
begin
DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
DevMode.dmPelsWidth:=PnCX;
DevMode.dmPelsHeight:=PnCY;
DevMode.dmDisplayFrequency:=PnFrequency; //刷新频率 Result:=(ChangeDisplaySettings(DevMode,CDS_UPDATEREGISTRY)=DISP_CHANGE_SUCCESSFUL)
end;
end;
1、Easysize组件功能:根据屏幕分辨率自动调整窗体大小、窗体中各控件的比例,字体大小等。
2、Easysize组件使用方法:使用方法很简单,步骤如下:
A、将该组件拖到窗体上默认为FormResizer1;
B、FormCreate事件中加入:FormResizer1.InitializeForm;
C、FormResize事件中加入:FormResizer1.ResizeAll;就这样就ok了,把复杂的算法交给组件,是不是很简单。展示一下DEMO的效果图吧,见下图:图1、
图2、你看一下适合不适合你用,如果有问题继续讨论!!