| |
| 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.
|
|
| Hits/month |
2,500,000+ |
Downloads (Since May 2000) |
7,393,709 |
| Total Files |
6,023 |
| Forum msgs |
7,670 |
| Articles/FAQs |
70+/900+ |
Top Selling Software at Amazon
|