我的程序在:800*600  频率为85HZ 时 ,显示正常
我想通过程序人为是将用户显示器的分辩率改为:800*600,刷新频率为85hz
用户退出程序时将其还原
这应该如何实现?

解决方案 »

  1.   

    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;
    函数都有了,给分吧
      

  2.   

    更正一下,上面的分辨率应为刷新率
    我试了试 yuanscar(塑料树)的函数,可以改分辨率,但刷新率成60Hz了,怎么解决
      

  3.   

    var
       DeviceMode:  TDeviceMode;result:integer;
    begin
         EnumDisplaySettings(nil,  Cardinal(-1),  DeviceMode);
         result:=DeviceMode.dmDisplayFrequency;
         showmessage(inttostr(result)+'hz'); {捕获屏幕刷新率}var
       DeviceMode:TDeviceMode;result,iFrequency:integer;
    begin
         iFrequency:=85;
         EnumDisplaySettings(nil,Cardinal(-1),  DeviceMode);
         DeviceMode.dmDisplayFrequency:=Cardinal(iFrequency);
         result:=ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
    end; {改变屏幕刷新率}
      

  4.   

    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 DynamicRefresh;
    var
       DeviceMode:TDeviceMode;
       result,iFrequency:integer;
    begin
         EnumDisplaySettings(nil,  Cardinal(-1),  DeviceMode);
         result:=DeviceMode.dmDisplayFrequency;{捕获屏幕刷新率}
         iFrequency:=85;
         EnumDisplaySettings(nil,Cardinal(-1),  DeviceMode);
         DeviceMode.dmDisplayFrequency:=Cardinal(iFrequency);
         result:=ChangeDisplaySettings(DeviceMode,CDS_UPDATEREGISTRY);
    end; {改变屏幕刷新率}procedure TForm1.Button1Click(Sender: TObject);
    begin
      DynamicResolution(800, 600);
      DynamicRefresh;
    end;
    end.
      

  5.   

    呵呵,只不过是yuanscar(塑料树)和 jabcf(金) 的弄到了一起。
    不过也想问问yuanscar(塑料树),你的这个函数为什么会将刷新率变成60Hz了呢??