在Win2000中,改变分辨率时,怎样才能控制任务栏正常显示?(50分)

  • 主题发起人 主题发起人 lihuihj
  • 开始时间 开始时间
L

lihuihj

Unregistered / Unconfirmed
GUEST, unregistred user!
在Win2000中,改变分辨率时,怎样才能控制任务栏的不正常呢(在分辨率小于调整前的分辨率时,不能显示出来,而在分辨率大于调整前的分辨率时,会出现在桌面的中间,呈现出一个窗口模样)?
 
我的机子怎么没这个问题?
 
来自:老朱, 时间:2000-10-22 3:14:00, ID:372346
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;


 
非常感谢‘少爷的拐杖’的回答,不过我就是用此方法调整时,任务栏出现不正常,
而用Win2000显示属性里调整很正常,就是用
EnumDisplaySettings() 和ChangeDisplaySettings()这两个API函数调整时,有问题?
请哪位高手帮我解决一下!!
 
谢谢各位,我在以前的问题中找到答案了!!!!!!!!
 
我也遇到过该问题,但还没有解决,lihuihj 你把解决办法说出来,让俺也学习学习[:D]
 
是呀是呀说出来吧
 
将ChangeDisplaySettings这个API函数中的第二个参数改为CDS_UPDATEREGISTRY或者1即可!!!
请看下面这个函数:


// 更改分辨率
function DynamicResolution(x,y,z:word):Boolean;
var
lpDevMode:TDeviceMode;
begin
Result:=EnumDisplaySettings(nil,0,lpDevMode);
if Result then
begin
lpDevMode.dmFields:=DM_PELSWIDTH OR DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
lpDevMode.dmPelsWidth:=X;
lpDevMode.dmPelsHeight:=Y;
lpDevMode.dmDisplayFrequency:=Z;
Result:=ChangeDisplaySettings(lpDevMode,CDS_UPDATEREGISTRY)=DISP_CHANGE_SUCCESSFUL;
end;
end;
 
多人接受答案了。
 
后退
顶部