动态更改屏幕分辨率(100分)

  • 主题发起人 主题发起人 入门
  • 开始时间 开始时间

入门

Unregistered / Unconfirmed
GUEST, unregistred user!
  function Resolution(X,Y:word):boolean;

  var

  DevMode:TDeviceMode;

  begin

  Result:=EnumDisplaySettings(nil,0,DevMode);

  if Result then

  begin

  DevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT;

  DevMode.dmPelsWidth:=X;

  DevMode.dmPelsHeight:=Y;

  Result:=ChangeDisplaySettings(DevMode,0)=DISP_CHANGE_SUCCESSFUL;

  end;

  end;

  接着,在form中放个button,caption为"800×600",然后在其OnClick事件
中写下

  if Resolution(800,600) then ShowMessage('800×600模式!');
但是改变后的屏幕很是不尽人意,
而且如果由800*600变到(例如)640*480再变回来,屏幕就变的一塌糊涂,
不知为什么?
 
老问题了,请参见以下两个问题。
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=100029
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=119218
 
本来可以省100分,呜呜!
 
关键是Result:=ChangeDisplaySettings(DevMode,0)=DISP_CHANGE_SUCCESSFUL
~~
改为Result:=ChangeDisplaySettings(DevMode,CDS_UPDATEREGISTRY)=DISP_CHANGE_SUCCESSFUL

LONG ChangeDisplaySettings(
LPDEVMODE lpDevMode, // graphics mode
DWORD dwflags // graphics mode options
);
dwflags -------

0:The graphics mode for the current screen will be changed dynamically.
CDS_UPDATEREGISTRY The graphics mode for the current

CDS_UPDATEREGISTRY:The graphics mode for the current screen will be changed
dynamically and the graphics mode will be updated in the
registry. The mode information is stored in the USER profile.
 
KCZ说的对,可以结束了
 
后退
顶部