type
Rueckmeldung = record
permiss: byte;
DMode: _devicemodeA;
end;
function AufloesungTesten(sizex, sizey, FarbTiefe: DWord): Rueckmeldung;
var DevMode: _devicemodeA;
i: Integer;
begin
i := 0;
Result.permiss := 0;
DevMode.dmSize := sizeof(_devicemodeA);
while EnumDisplaySettings(nil, i, DevMode) do begin
with DevMode do
if (dmPelsWidth = sizex) and (dmPelsHeight = SizeY) and
(dmBitsPerPel = FarbTiefe) then begin
case ChangeDisplaySettings(DevMode, CDS_TEST) of
DISP_CHANGE_RESTART: begin Result.permiss := 1;
Result.DMode := DevMode;
end;
DISP_CHANGE_BADFLAGS, DISP_CHANGE_FAILED, DISP_CHANGE_BADMODE,
DISP_CHANGE_NOTUPDATED:
exit;
else begin Result.permiss := 2;
Result.DMode := DevMode;
end;
end;
exit;
end;
Inc(i);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
waagerecht, senkrecht, FarbBits: DWord;
erg: Rueckmeldung;
begin
waagerecht := 800;
senkrecht := 600;
FarbBits := 16; // 8,16,24,32
erg := AufloesungTesten(waagerecht, senkrecht, FarbBits);
case erg.permiss of
0: begin showmessage('Umschalten nicht möglich');
exit;
end;
1: showmessage('Neustart erforderlich');
end;
ChangeDisplaySettings(erg.DMode, CDS_UPDATEREGISTRY)
end;