我用下面这个程序可以将显示器分辨率改变,但是:当我由800*600改到1024*768的时候,任务栏不再屏幕下面了,网上错了1/3。不知道该怎么改。
procedure setscreen(newwidth, newheight, newfrquency:integer);
var
  devmode:Tdevicemode;
begin
  OldWidth:=GetSystemMetrics(SM_CXSCREEN);
  OldHeight:=GetSystemMetrics(SM_CYSCREEN);
  if (oldwidth<>newwidth) and (oldheight<>newheight) then
  begin
  DevMode.dmSize:=sizeof(TDeviceMode);
  EnumDisplaySettings(nil, DWORD(-1), DevMode);
  DevMode.dmFields:=DM_PELSWIDTH or DM_PELSHEIGHT or DM_DISPLAYFREQUENCY;
  DevMode.dmPelsWidth:=NewWidth;
  DevMode.dmPelsHeight:=NewHeight;
  OldFreq:= DevMode.dmDisplayFrequency;
  DevMode.dmDisplayFrequency:=newfrquency;
  ChangeDisplaySettings(DevMode,0);

解决方案 »

  1.   


    function TForm1.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 TForm1.Button1Click(Sender: TObject);
    begin
      getfbl;
      if s = Button1.caption then
        ShowMessage('Now is 640*480')
      else
        if DynamicResolution(640, 480) then
          ShowMessage('Now is 640*480');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      getfbl;
      if s = Button2.Caption then
        ShowMessage('Now is 800*600')
      else
        if DynamicResolution(800, 600) then
          showmessage('Now is 800 * 600')
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      getfbl;
      if s = button3.caption then
        showmessage('Now is 1024*768')
      else
        if DynamicResolution(1024, 768) then
          showmessage('Now is 1024*768');
    end;procedure TForm1.getfbl;
    var
      x, y:longint;
    begin
      x := GetSystemMetrics(SM_CXSCREEN);
      y := GetSystemMetrics(SM_CYSCREEN);
      s := IntToStr(x)+ '*' + IntToStr(y);
    end;