如下程序: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;例如:
  //窗口显示模式为800*600
  DynamicResolution(800,600);此时,如果系统分辨率不是800*600,程序将自动改为800*600!!!

解决方案 »

  1.   

    //Ex:SetRes(800,600);   
    //   SetRes(640,480);   
    procedure SetRes(XRes, YRes: DWord);   
    var   
     OLDX,OLDY:INTEGER;  
     lpDevMode : TDeviceMode;   
    begin   
     lpDevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT;   
     lpDevMode.dmPelsWidth:=XRes;   
     lpDevMode.dmPelsHeight:=YRes;   
     ChangeDisplaySettings(lpDevMode, 0);   
    end;   
      

  2.   

    我的竹叶有完整的程序,一个可以显示图标在任务栏,然后点击
    弹出菜单显示所有可能的分辨率并可以动态改变,不过是VB的
    www.applevb.com
      

  3.   

    发送一个Poweroff的消息即可。到网易的Delphi版的精华区里面找找,具体的我不及得了。
      

  4.   

    {关闭显示器}  
    SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0);  
       
       {打开显示器}  SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, -1);