要改变监视器分辨率可以用这两个函数: EnumDisplaySettings() ChangeDisplaySettings()Example: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;
定义两个全局变量screenx,screeny:integer; 此文转字小虫的回复帖子(好象是,要不就是阿呆) procedure TForm1.FormCreate(Sender: TObject); var sx, sy: Integer; DevMode: TDeviceMode; begin sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽 sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高 //用于在程序结束时把分辨率 改回原始状态 screenx := sx; //分辨率宽 screeny := sy; //分辨率高 if (sx <> 1024) and (sy <> 768) then begin DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT; DevMode.dmPelsWidth := 800; DevMode.dmPelsHeight := 600; ChangeDisplaySettings(DevMode,0); //设置新的显示参数 end; end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var sx, sy: Integer; DevMode: TDeviceMode; begin sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽 sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高 if (sx <> screenx) and (sy <> screeny) then begin DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT; DevMode.dmPelsWidth := screenx; DevMode.dmPelsHeight := screeny; ChangeDisplaySettings(DevMode,0); //设置新的显示参数 end; actiON:=cafree; end;
分辨率好办,就是刷新频率没有办法完成,尽管它devmode提供参数,但却不能成功。
pr_IntScWidth:=Screen.Width; pr_IntScHeight:=Screen.Height; if (Screen.Width <> 800) or (Screen.Height <> 600) then begin if Com_ChangeDisSetting(800,600) = False then begin Com_ShowDlg('提示','无法改变屏幕分辨率!',1,1,'NO'); Halt; end; end;
EnumDisplaySettings()
ChangeDisplaySettings()Example: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.FormCreate(Sender: TObject);
var
sx, sy: Integer;
DevMode: TDeviceMode;
begin
sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
//用于在程序结束时把分辨率 改回原始状态
screenx := sx; //分辨率宽
screeny := sy; //分辨率高
if (sx <> 1024) and (sy <> 768) then
begin
DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
DevMode.dmPelsWidth := 800;
DevMode.dmPelsHeight := 600;
ChangeDisplaySettings(DevMode,0); //设置新的显示参数
end;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
sx, sy: Integer;
DevMode: TDeviceMode;
begin
sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
if (sx <> screenx) and (sy <> screeny) then
begin
DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
DevMode.dmPelsWidth := screenx;
DevMode.dmPelsHeight := screeny;
ChangeDisplaySettings(DevMode,0); //设置新的显示参数
end;
actiON:=cafree;
end;
pr_IntScHeight:=Screen.Height; if (Screen.Width <> 800) or (Screen.Height <> 600) then
begin
if Com_ChangeDisSetting(800,600) = False then
begin
Com_ShowDlg('提示','无法改变屏幕分辨率!',1,1,'NO');
Halt;
end;
end;
他的方法可以实现,但改了以后又存在刷新问题,不知那位朋友可以告知?~~
ChangeDisplaySettings()