Delphi32.com - Home!
| Home/News | Downloads | Forums | D32 Magazine | Resources | Info and Facts |  
 
 Changing the display mode settings in code.


How do I change the display mode settings in code?   

    You can use the Windows API function EnumDisplaySettings() to get a list of valid mode settings, and use the Windows API function ChangeDisplaySettings() to actually change the display setting. Note that many drivers will not perform the reset without rebooting the computer, even though they are capable of doing so.

    Example:
    unit Unit ;
    interface
    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Spin;
    type
      PdmArray = ^TDmArray;
      TDmArray = array[0..0] of TDeviceMode;
    type
      TForm  = class(TForm)
        Memo : TMemo;
        SpinEdit : TSpinEdit;
        Button : TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button Click(Sender: TObject);
      private
        lpDmArray : PDmArray;
        NumModes : integer;
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      Form : TForm ;
    implementation
    {$R *.DFM}
    procedure TForm .FormCreate(Sender: TObject);
    var
      i : integer;  // auto-initialized to zero
      MoreModes : bool;
      dm : TDeviceMode;
    begin
      Memo .Lines.Clear;
      MoreModes := True;
      while MoreModes do begin
        MoreModes :=
          EnumDisplaySettings(nil,
                              i,
                              dm);
        Memo .Lines.Add('Mode ' +
          IntToStr(i) + ': ' +
          IntToStr(dm.dmBitsPerPel) + ' Bits Per Pixel ' +
          IntToStr(dm.dmPelsWidth) + ' x ' +
          IntToStr(dm.dmPelsHeight));
        Inc(i);
      end;
      NumModes := i;
      SpinEdit .MinValue := 0;
      SpinEdit .MaxValue := NumModes;
      GetMem(lpDmArray, sizeof(TDeviceMode) * NumModes);
      FillChar(lpDmArray^, sizeof(TDeviceMode) * NumModes, #0);
    {$IFOPT R+}
      {$DEFINE CKRANGE}
      {$R-}
    {$ENDIF}
      for i := 0 to (NumModes -  ) do
        EnumDisplaySettings(nil,
                            i,
                            lpDmArray[i]);
    {$IFDEF CKRANGE}
      {$UNDEF CKRANGE}
      {$R+}
    {$ENDIF}
    end;
    procedure TForm .Button Click(Sender: TObject);
    var
      ReturnVal : LongInt;
    begin
    {$IFOPT R+}
      {$DEFINE CKRANGE}
      {$R-}
    {$ENDIF}
      ReturnVal := ChangeDisplaySettings(lpDmArray[SpinEdit .Value],
                                         CDS_UPDATEREGISTRY);
    {$IFDEF CKRANGE}
      {$UNDEF CKRANGE}
      {$R+}
    {$ENDIF}
      with Memo .Lines do begin
        case ReturnVal of
          DISP_CHANGE_SUCCESSFUL: Add('DISP_CHANGE_SUCCESSFUL');
          DISP_CHANGE_RESTART   : Add('DISP_CHANGE_RESTART');
          DISP_CHANGE_BADFLAGS  : Add('DISP_CHANGE_BADFLAGS');
          DISP_CHANGE_FAILED    : Add('DISP_CHANGE_FAILED');
          DISP_CHANGE_BADMODE   : Add('DISP_CHANGE_BADMODE');
          DISP_CHANGE_NOTUPDATED: Add('DISP_CHANGE_NOTUPDATED');
        end;
      end;
    end;
    procedure TForm .FormDestroy(Sender: TObject);
    begin
      FreeMem(lpDmArray, sizeof(TDeviceMode) * NumModes);
    end;
    end.
    

     



  << Previous Faq     Complete List     Next Faq >>  



 
 Hits/month  2,500,000+ 
 Downloads
 (Since May 2000)
 7,393,709 
 Total Files  6,023 
 Forum msgs  7,670 
 Articles/FAQs  70+/900+ 
Kylix
Tips n Tricks
FAQs
Knowledge Base
Bug Listings
Articles
Books
Newsgroups
Links
Submissions
Testimonials
Advertising
Contact Us
About Us
Search Amazon:
Top Selling Software at Amazon

| Home/News | Downloads | Forums | Resources | Info and Facts | Testimonials |
  Site Search:
 


Comments/Problems: Webmaster@delphi32.com
Copyright © 1998-2006, Delphi32.com. All rights reserved.
Terms of Use