var
    dmScreenSettings:  DEVMODE;  
begin
    with  dmScreenSettings  do
    begin
        dmSize  :=  SizeOf(dmScreenSettings);
        dmPelsWidth:=800;
        dmPelsHeight:=600;
        dmBitsPerPel:=8;              //256色
        dmFields:=DM_BITSPERPEL;
    end;
    ChangeDisplaySettings(dmScreenSettings,0);
end;我用以上程序更改了1024*768,32位色为800*600,256色后任务栏却不出现了。
不知道为什么,请各位帮忙指点一下,我用的是2000系统

解决方案 »

  1.   

    换一种方法:
    procedureTForm1.FormCreate(Sender:TObject);
    var
    devmode:tDevicemode;
    beginifEnumDisplaySettings(nil,0,devmode)then
    begin
    devmode.dmfields:=dm_pelswidthORdm_pelsheight;
    devmode.dmpelswidth:=orignwidth;{宽度}
    devmode.dmpelsheight:=orignheight;{高度}
    ChangeDisplaySettings(devmode,0);{更改设置}end;
    end; 以上代码我都试过是可以的
      

  2.   

    呵呵是dmFields没正确的赋值的原因
            dmFields:=DM_BITSPERPEL                     //修改色深
          Or DM_PELSWIDTH  Or DM_PELSHEIGHT         //修改分辨率
          Or DM_DISPLAYFREQUENCY                    //修改刷新频率
    你这里只要  dmFields:=DM_BITSPERPEL                     //修改色深
          Or DM_PELSWIDTH  Or DM_PELSHEIGHT         //修改分辨率
    即可dmFields的值直接影响你改变设备模式的结果