Type TFooClass = class(TControl); //在此加入聲明 var BaseForm: TBaseForm; Const ScreenWidth=1024; //此為設計時的分辨率的寬 現假設為:800 x 1024implementation{$R *.DFM}procedure TBaseForm.FormCreate(Sender: TObject); var I,NewFormWidth,OldFormWidth: Integer; begin if (screen.width <> ScreenWidth) then //變更窗體及控件大小及字體,以適應不同分辨率的要求 begin OldFormWidth := Width; Scaled := True; ScaleBy(Screen.Width, ScreenWidth); NewFormWidth := Width; for i := ControlCount - 1 downto 0 do TFooClass(Controls[i]).Font.Size := (NewFormWidth div OldFormWidth)*TFooClass(Controls[i]).Font.Size; end; end;
可以让显示器适应你的软件,软件运行时变成你设置的,退出后回到原来状态. var main: Tmain; oldwidth,oldheight,oldfreq:integer;//记录原来状态 procedure Tmain.FormCreate(Sender: TObject); begin setscreen(1024,768,85);//设置新的状态 end; procedure Tmain.FormDestroy(Sender: TObject); begin setscreen(oldwidth,oldheight,oldfreq);//恢复原来的状态 end; procedure Tmain.setscreen(newwidth, newheight, newfrquency:integer); var devmode:Tdevicemode; begin OldWidth:=GetSystemMetrics(SM_CXSCREEN); OldHeight:=GetSystemMetrics(SM_CYSCREEN); if (oldwidth<>newwidth) and (oldheight<>newheight) then begin DevMode.dmSize:=sizeof(TDeviceMode); EnumDisplaySettings(nil, DWORD(-1), DevMode); DevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY; DevMode.dmPelsWidth:=NewWidth; DevMode.dmPelsHeight:=NewHeight; OldFreq:= DevMode.dmDisplayFrequency; DevMode.dmDisplayFrequency:=newfrquency; ChangeDisplaySettings(DevMode,0); end; end; //显示器烧了可别怪我!:)
screen.height屏幕的大小Form1.Scaled := false;
TFooClass = class(TControl); //在此加入聲明
var
BaseForm: TBaseForm;
Const
ScreenWidth=1024; //此為設計時的分辨率的寬 現假設為:800 x 1024implementation{$R *.DFM}procedure TBaseForm.FormCreate(Sender: TObject);
var
I,NewFormWidth,OldFormWidth: Integer;
begin
if (screen.width <> ScreenWidth) then //變更窗體及控件大小及字體,以適應不同分辨率的要求
begin
OldFormWidth := Width;
Scaled := True;
ScaleBy(Screen.Width, ScreenWidth);
NewFormWidth := Width;
for i := ControlCount - 1 downto 0 do
TFooClass(Controls[i]).Font.Size := (NewFormWidth div OldFormWidth)*TFooClass(Controls[i]).Font.Size;
end;
end;
var
main: Tmain;
oldwidth,oldheight,oldfreq:integer;//记录原来状态
procedure Tmain.FormCreate(Sender: TObject);
begin
setscreen(1024,768,85);//设置新的状态
end;
procedure Tmain.FormDestroy(Sender: TObject);
begin
setscreen(oldwidth,oldheight,oldfreq);//恢复原来的状态
end;
procedure Tmain.setscreen(newwidth, newheight, newfrquency:integer);
var
devmode:Tdevicemode;
begin
OldWidth:=GetSystemMetrics(SM_CXSCREEN);
OldHeight:=GetSystemMetrics(SM_CYSCREEN);
if (oldwidth<>newwidth) and (oldheight<>newheight) then
begin
DevMode.dmSize:=sizeof(TDeviceMode);
EnumDisplaySettings(nil, DWORD(-1), DevMode);
DevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
DevMode.dmPelsWidth:=NewWidth;
DevMode.dmPelsHeight:=NewHeight;
OldFreq:= DevMode.dmDisplayFrequency;
DevMode.dmDisplayFrequency:=newfrquency;
ChangeDisplaySettings(DevMode,0);
end;
end;
//显示器烧了可别怪我!:)