Windows提供给我们两个API函数,可以动态调整显示器的分辨率,他们是EnumDisplaySettings() 和ChangeDisplaySettings(),下面这个例子就是了 function DynamicResolution(X, Y: word): BOOL; 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;procedure TForm1.Button1Click(Sender: TObject); begin if DynamicResolution(640, 480) then ShowMessage('Now is 640*480'); end; procedure TForm1.Button2Click(Sender: TObject); begin if DynamicResolution(800, 600) then ShowMessage('Now is 800*600'); end;
//Return values for ChangeDisplaySettings // DISP_CHANGE_SUCCESSFUL = 0; // DISP_CHANGE_RESTART = 1; // DISP_CHANGE_FAILED = -1; // DISP_CHANGE_BADMODE = -2; // DISP_CHANGE_NOTUPDATED = -3; // DISP_CHANGE_BADFLAGS = -4; // DISP_CHANGE_BADPARAM = -5;//改变刷新率 function ChangeDisplayFrequency(dwFrequency:DWORD): LongInt; var DeviceMode: TDeviceMode; begin EnumDisplaySettings(nil,Cardinal(-1), DeviceMode); DeviceMode.dmDisplayFrequency := dwFrequency; Result := ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY); end;//得到刷新率 function GetDisplayFrequency: DWORD; var DeviceMode: TDeviceMode; begin EnumDisplaySettings(nil, Cardinal(-1), DeviceMode); Result := DeviceMode.dmDisplayFrequency; end;//改变系统分辨率 function Resolution(X,Y:DWORD):LongInt; var DevMode:TDeviceMode; begin if EnumDisplaySettings(nil,0,DevMode) then begin DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT; DevMode.dmPelsWidth:=X; DevMode.dmPelsHeight:=Y; Result:=ChangeDisplaySettings(DevMode,0); end else //非法的失败 Result := -1; end;
function DynamicResolution(X, Y: word): BOOL;
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;procedure TForm1.Button1Click(Sender: TObject);
begin
if DynamicResolution(640, 480) then
ShowMessage('Now is 640*480');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if DynamicResolution(800, 600) then
ShowMessage('Now is 800*600');
end;
GetSystemMetrics(SM_CXSCREEN); 分辩率高
Screen: TScreen;
begin
showmessage('分辨率为:'+inttostr(Screen.Width)+'×'+inttostr(Screen.Height))
end;
GetSystemMetrics(SM_CYSCREEN); 分辩率高
楼上的认真点了!!!!
delphi中本来就提供了一个默认Screen: TScreen,不用声明。
如可以在formcreate中写:
showmessage(Format('x:%d,y:%d',[Screen.Width,Screen.Height]));
// DISP_CHANGE_SUCCESSFUL = 0;
// DISP_CHANGE_RESTART = 1;
// DISP_CHANGE_FAILED = -1;
// DISP_CHANGE_BADMODE = -2;
// DISP_CHANGE_NOTUPDATED = -3;
// DISP_CHANGE_BADFLAGS = -4;
// DISP_CHANGE_BADPARAM = -5;//改变刷新率
function ChangeDisplayFrequency(dwFrequency:DWORD): LongInt;
var
DeviceMode: TDeviceMode;
begin
EnumDisplaySettings(nil,Cardinal(-1), DeviceMode);
DeviceMode.dmDisplayFrequency := dwFrequency;
Result := ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
end;//得到刷新率
function GetDisplayFrequency: DWORD;
var
DeviceMode: TDeviceMode;
begin
EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
Result := DeviceMode.dmDisplayFrequency;
end;//改变系统分辨率
function Resolution(X,Y:DWORD):LongInt;
var
DevMode:TDeviceMode;
begin
if EnumDisplaySettings(nil,0,DevMode) then
begin
DevMode.dmFields:=DM_PELSWIDTH Or DM_PELSHEIGHT;
DevMode.dmPelsWidth:=X;
DevMode.dmPelsHeight:=Y;
Result:=ChangeDisplaySettings(DevMode,0);
end
else //非法的失败
Result := -1;
end;