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;
end;