请教怎样操作显示器分辨率?(50分)

  • 主题发起人 主题发起人 anbi
  • 开始时间 开始时间
A

anbi

Unregistered / Unconfirmed
GUEST, unregistred user!
请教怎样操作显示器分辨率?
 
var
Ret,Sw,Sh: Integer;
lpDevMode : TDeviceMode;
begin
if GetDeviceCaps(GetDC(Application.Handle),HORZRES)<>1024 then begin
if Application.MessageBox('请将分辨率调整为:1024*768,然后再运行本程序!'#13'想立即切换吗?'#13'切换可能需要几秒钟,其间屏幕可能会闪烁。'#13'如果新设置应用不正常,15秒钟内,系统将自动恢复原来的设置。','提示',Mb_IconInformation+Mb_YesNO)=IdYes then begin
Sw:=GetDeviceCaps(GetDC(Application.Handle),HORZRES);
Sh:=GetDeviceCaps(GetDC(Application.Handle),VERTRES);
EnumDisplaySettings(nil, 0, lpDevMode);
lpDevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth:=1024;
lpDevMode.dmPelsHeight:=768;
ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY);
end else begin
Application.Terminate;
Exit;
end;
end;
end;
 
procedure SetRes(XRes, YRes: DWord);
var
lpDevMode : TDeviceMode;
begin
EnumDisplaySettings(nil, 0, lpDevMode);
lpDevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth:=XRes;
lpDevMode.dmPelsHeight:=YRes;
ChangeDisplaySettings(lpDevMode, 0);
end;
******************
设置屏幕颜色深度
procedure Toggle;
var
i : LongInt;
b : LongInt;
DevM : TDEVMODE;
h: HDC;
w: HWND;

IsToggled: Boolean;
PreviousBitsPerPixel: Integer;

begin
IsToggled := not IsToggled;
w:=GetDesktopWindow;
h:=GetDC(w);
try
if IsToggled then
begin {change to 8 bit}
PreviousBitsPerPixel := GetDeviceCaps(h, BITSPIXEL);
i := -1;
Repeat
Inc(i);
Until EnumDisplaySettings(pchar(0), i, DevM) = False;
DevM.dmFields := DM_BITSPERPEL;
DevM.dmBitsPerPel := 8;
b := ChangeDisplaySettings(DevM, 0);
if ((GetDeviceCaps(h, RASTERCAPS) and RC_PALETTE) = 0) or
(b <> DISP_CHANGE_SUCCESSFUL) then
begin
showmessage('can''t use palettes');
IsToggled := False;
end
end else {Change mform to palette values and perform desired 8 bit display}
else begin {change back value}
i := -1;
Repeat
Inc(i);
Until EnumDisplaySettings(pchar(0), i, DevM) = False;
DevM.dmFields := DM_BITSPERPEL;
DevM.dmBitsPerPel := PreviousBitsPerPixel;
b := ChangeDisplaySettings(DevM, 0);
if b <> DISP_CHANGE_SUCCESSFUL then showmessage( 'Error restoring origional display');
end;
finally
ReleaseDC(w,h);
end;
 
后退
顶部