各位大侠在代码如何改变显示器的分辨率

解决方案 »

  1.   

    function ChangeDisplay(width,height:word) :BOOL ;
    var
        lpDevMode :TDEVICEMODe ;
    begin
        result := EnumDisplaySettings(Nil ,0 ,lpDEVMode) ;
        if result then
        begin
            lpDevmode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT ;
            lpdevmode.dmPelsWidth := width ;
            lpdevmode.dmPelsHeight := height ;
            result := ChangeDisplaySettings(lpdevmode ,CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL ;
        end;
    end;
      

  2.   

    procedure ChangeDisplayMode(Freq:Integer);
    var DevMode:TDeviceMode;
        Index:Integer;
        OldX,OldY:Integer;
    begin
      OldX:=GetSystemMetrics(SM_CXSCREEN);  //分辨率宽
      OldY:=GetSystemMetrics(SM_CYSCREEN);  //分辨率高
      Index := 0;
      while EnumDisplaySettings(nil, Index, DevMode) do begin
        Inc(Index);
        with DevMode do begin
          if dmPelsWidth<>OldX then
            Continue;
          if dmPelsHeight<>OldY then
            Continue;
          if dmDisplayFrequency=0 then
            ChangeDisplaySettings(DevMode,CDS_UPDATEREGISTRY);
          if dmDisplayFrequency=Freq then
            ChangeDisplaySettings(DevMode,CDS_UPDATEREGISTRY);
        end;
      end;
    end;
      

  3.   

    定义两个全局变量。SCREENX,SCREENY:INTEGER;
    procedure Tmainwinform.FormCreate(Sender: TObject);
    var
      sx, sy: Integer;
      DevMode: TDeviceMode;
    begin
      sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
      sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
      //用于在程序结束时把分辨率 改回原始状态
      screenx := sx; //分辨率宽
      screeny := sy; //分辨率高
      if (sx <> 1024) and (sy <> 768) then
      begin
        DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
        DevMode.dmPelsWidth := 1024;
        DevMode.dmPelsHeight := 768;
        ChangeDisplaySettings(DevMode,0); //设置新的显示参数
      end;
    程序关闭时把分辨率修改为原来状态:
    procedure Tmainwinform.FormClose(Sender: TObject;
      var Action: TCloseAction);
    var
      sx, sy: Integer;
      DevMode: TDeviceMode;
    begin
             sx := GetSystemMetrics(SM_CXSCREEN); //分辨率宽
             sy := GetSystemMetrics(SM_CYSCREEN); //分辨率高
            if (sx <> screenx) and (sy <> screeny) then
            begin
               DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
               DevMode.dmPelsWidth := screenx;
               DevMode.dmPelsHeight := screeny;
               ChangeDisplaySettings(DevMode,0); //设置新的显示参数
            end;
        actiON:=cafree;
    end;//本代码编在1024×768,运行时自动将分辨率设为800×600,适应大小,参考一下吧。
    procedure TForm1.FormCreate(Sender: TObject);
    const
      orignwidth = 800;
      orignheight = 600;
    var
    devmode:tDevicemode;
    begin
    if screen.width<>orignwidth then
        begin
        if EnumDisplaySettings(nil,0,devmode) then
    begin
      devmode.dmfields:=dm_pelswidth OR dm_pelsheight
                                     OR dm_DisplayFrequency;
      devmode.dmpelswidth:=orignwidth; {宽度}
      devmode.dmpelsheight:=orignheight;{高度}
      devmode.dmDisplayFrequency:= 75;  {刷新率}
      ChangeDisplaySettings(devmode,0); {更改设置}
    end;
    end;
    end;
      

  4.   

    上面的代码,在2000下执行,刷新频率为最低,所以必改刷新频率,才够。。//获得当前系统显示刷新频率
    function GetDispSet():integer;
    var
      DeviceMode: TDeviceMode;
    begin
       result:=0;
       EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);
       result:=DeviceMode.dmDisplayFrequency;
    end;//改变系统显示刷新频率
    function ChangeDispSet(iFrequency:integer):integer;
    var
      DeviceMode:TDeviceMode;
    begin
       result:=0;
       EnumDisplaySettings(nil,Cardinal(-1), DeviceMode);
       DeviceMode.dmDisplayFrequency:=Cardinal(iFrequency);
       result:=ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
    end;国庆了,早点结账吧。多带点星回家。。
      

  5.   

    用 WINDOWSAPI 函数 EnumDisplaySettings 和 ChangeDisplaySettings,前者取当前显示模式信息,后者则更改显示设置procedureTForm1.FormCreate(Sender:TObject);
    var
        devmode:tDevicemode;
    begin
        if screen.width<>orignwidth then
        begin
            if EnumDisplaySettings(nil,0,devmode) then
            begin
                devmode.dmfields:=dm_pelswidthORdm_pelsheight;
                devmode.dmpelswidth:=orignwidth;{宽度}
                devmode.dmpelsheight:=orignheight;{高度}
                ChangeDisplaySettings(devmode,0);{更改设置}
            end;
        end;
    end;