如何动态修改显示器分辨率(100分)

  • 主题发起人 主题发起人 大风车
  • 开始时间 开始时间

大风车

Unregistered / Unconfirmed
GUEST, unregistred user!
最近在分辨率为800*600的环境下为公司开发了一个应用软件,由于公司显示器分辨率大都设为1024*768,于是用API函数ChangeDisplaySettings() 将其修改为800*600,可是开始菜单那一条状态栏却不见了,留下空白的一大块,好难看。请问各位高手如何能真正动态修改显示器分辨率?
 
因为你修改分辨率时,没有更新注册表
function TForm1.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, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL;
// ^^^^^^^^^^^^^^^^^^
end;

end;

 
转帖:
将机器分辨率更改为设计时的分辨率
这种方法不改变表单本身,而是将屏幕分辨率更改为与表单设计时用到的分辨率相同。它需要用到WINDOWS API函数EnumDisplaySettings 和ChangeDisplaySettings, 前者取当前显示模式信息,后者则更改显示设置,具体参数的含义请参见DELPHI帮助。设计时宽度常量和高度常量的定义如方法一。
procedure TForm1.FormCreate(Sender: TObject);
var
devmode:tDevicemode;
begin
if screen.width<>orignwidth then

begin
if EnumDisplaySettings(nil,0,devmode) then

begin
devmode.dmfields:=dm_pelswidth OR dm_pelsheight ;
devmode.dmpelswidth:=orignwidth; {宽度}
devmode.dmpelsheight:=orignheight;{高度}
ChangeDisplaySettings(devmode,0);
{更改设置}
end;
end;
end;
 
以下是如何调整分辨率的实现代码,但我不知道此代码应该写在哪里??请大侠指点,谢谢!!
function tdvd_mainform.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 SetScreenSize(W,H: Integer);
var
DevMode: TDevMode;
begin
if (w<640) or (h<480) then
exit;
if EnumDisplaySettings(nil,0,DevMode) then

begin
with DevModedo

begin
dmPelsWidth := W;
dmPelsHeight := H;
dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
end;
ChangeDisplaySettings(DevMode, 0);
end;
end;
 
以上方法只能修改分辨率,有没有考虑到刷新率呀?
以上方法一改变分辨率,刷新率就默认到60MHZ很难看的。看看很多游戏软件就可以做到
这一点。
 
后退
顶部