本帖最后由 caihua2003 于 2011-02-19 10:23:24 编辑

解决方案 »

  1.   

    你可以利用一些显卡驱动附带的工具,调用它们的API。
      

  2.   

    procedure ChangeOrientation(NewOrientation:DWORD);
    var
      dm      : TDeviceMode;
      dwTemp  : DWORD;
      dmDisplayOrientation : DWORD;
    begin
       ZeroMemory(@dm, sizeof(dm));
       dm.dmSize   := sizeof(dm);
       if EnumDisplaySettings(nil, DWORD(ENUM_CURRENT_SETTINGS), dm) then
       begin
          Move(dm.dmScale,dmDisplayOrientation,SizeOf(dmDisplayOrientation));
          // swap width and height
          if Odd(dmDisplayOrientation)<>Odd(NewOrientation) then
          begin
           dwTemp := dm.dmPelsHeight;
           dm.dmPelsHeight:= dm.dmPelsWidth;
           dm.dmPelsWidth := dwTemp;
          end;
          if dmDisplayOrientation<>NewOrientation then
          begin
            Move(NewOrientation,dm.dmScale,SizeOf(NewOrientation));
            if (ChangeDisplaySettings(dm, 0)<>DISP_CHANGE_SUCCESSFUL) then
             RaiseLastOSError;
          end;
       end;
    end;
    begin
      try
        ChangeOrientation(DMDO_180);
        Writeln('Changed to 180');
        Readln;
        ChangeOrientation(DMDO_270);
        Writeln('Changed to 270');
        Readln;
        ChangeOrientation(DMDO_90);
        Writeln('Changed to 90');
        Readln;
        ChangeOrientation(DMDO_DEFAULT);
        Writeln('Default Orientation restored');
        Readln;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
         readln;
    end.