Hola,
No respondo a tu pregunta. Sin embargo, me parece que sería bueno conocer las resoluciones de pantalla disponibles, por si acaso tuviera algo que ver el problema conque tratemos de cambiar a una resolución, sencillamente, no disponible.
El siguiente código lo recogí "por ahí",... de veras no apunté de dónde y ahora no lo recuerdo. Necesitas un formulario, un botón, un "listbox" y un "edit".
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
DC: THandle; Bits: Integer; HRes: Integer; VRes: Integer; DM: TDevMode; ModeNum: Longint; Ok: Bool;
fre: Integer; begin
DC := GetDC(Handle);
Bits := GetDeviceCaps(DC, BITSPIXEL);
HRes := GetDeviceCaps(DC, HORZRES);
VRes := GetDeviceCaps(DC, VERTRES);
fre := GetDeviceCaps(DC, VREFRESH);
Edit1.Text := Format('%d bit, %d x %d', [Bits, HRes, VRes]);
ReleaseDC(Handle, DC); ModeNum := 0;
EnumDisplaySettings(nil, ModeNum, DM);
ListBox1.Items.Add(Format('%d bit, %d x %d bei %d Hz', [DM.dmBitsPerPel,
DM.dmPelsWidth, DM.dmPelsHeight, Dm.dmDisplayFrequency]));
Ok := True;
while Ok do
begin
Inc(ModeNum); Ok := EnumDisplaySettings(nil, ModeNum, DM);
ListBox1.Items.Add(Format('%d bit, %d x %d bei %d Hz', [DM.dmBitsPerPel,
DM.dmPelsWidth, DM.dmPelsHeight, Dm.dmDisplayFrequency]));
end;
end;
En el "listbox" te aparecerá una lista con las resoluciones soportadas (o eso creo) y en el "edit" la que esté en uso. Siempre puedes adaptar el código más o menos según tus necesidades.