Правильная посадка за компьютером:
- руки на ширине плеч,
- ноги полусогнуты или вытянуты под столом,
- глаза выпучены,
- монитор включен.
procedure TForm1.Button1Click(Sender: TObject);
var
DC: THandle; // display context
Bits: integer; // bits per pixel
HRes: integer; // horizontal resolution
VRes: integer; // vertical resolution
DM: TDevMode; // to Save EnumDisplaySettings
ModeNum: longint; // video mode number
Ok: Bool;
fre: integer; // refresh rate begin
DC := GetDC(Handle);
Bits := GetDeviceCaps(DC, BITSPIXEL);
HRes := GetDeviceCaps(DC, HORZRES);
VRes := GetDeviceCaps(DC, VERTRES);
fre := GetDeviceCaps(DC, VREFRESH);
// Show Current Resolution
Edit1.Text := Format('%d bit, %d x %d', [Bits, HRes, VRes]);
ReleaseDC(Handle, DC); // Show all modes available ModeNum := 0; // The 1st one
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 dobegin
Inc(ModeNum); // Get next one
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;
Перевод контента на русский язык:
Код, который вы предоставили, написан на Delphi и предназначен для получения всех возможных разрешений экрана и частот обновления, доступных на системе.
Вот разбивка того, что код делает:
Процедура Button1Click вызывается при клике кнопки.
Она получает текущий контекст отображения (DC) с помощью функции GetDC.
Затем она получает количество бит на пиксель (Bits), горизонтальное разрешение (HRes), вертикальное разрешение (VRes) и частоту обновления (fre) с помощью функции GetDeviceCaps.
Процедура отображает текущее разрешение в текстовом поле (Edit1) в формате "X бит, Y x Z".
Она освобождает контекст отображения с помощью функции ReleaseDC.
Код затем перечисляет все доступные режимы экрана с помощью функции EnumDisplaySettings. Эта функция заполняет структуру TDevMode информацией о каждом режиме.
Для каждого режима она добавляет элемент в список (ListBox1) в формате "X бит, Y x Z at Z Hz", где X - количество бит на пиксель, Y - ширина и высота разрешения экрана, а Z - частота обновления.
Цикл в конце продолжается до тех пор, пока не будет доступных режимов. В каждой итерации она увеличивает номер режима (ModeNum) и вызывает функцию EnumDisplaySettings снова, чтобы получить информацию о следующем режиме.
В альтернативном решении:
Вместо использования функции GetDeviceCaps для получения текущего разрешения, вы можете использовать функцию SystemParametersInfo с действием SPI_ GETSYSTEMPARAMS, чтобы получить параметры системы, включая разрешение экрана и частоту обновления.
Кроме того, вместо использования цикла для перечисления всех доступных режимов, вы можете использовать функцию EnumDisplaySettings с флагом ESDS_FORCE, чтобы получить все доступные режимы сразу. Это может улучшить производительность, если есть много доступных режимов.
Вот обновленная версия кода, которая включает в себя эти предложения:
procedureTForm1.Button1Click(Sender:TObject);varDC:THandle;Bits:integer;HRes,VRes:integer;fre:integer;DM:TDevMode;ModeNum:longint;begin// Получение текущего разрешения и частоты обновления с помощью SystemParametersInfoSystemParametersInfo(SPI_GETSYSTEMPARAMS,0,nil,0);Edit1.Text:=Format('%d бит, %d x %d at %d Hz',[SystemParameters.smXSizePixels,SystemParameters.smXSizePixels,SystemParameters.smYSizePixels,SystemParameters.smXVirtualSize]);// Перечисление всех доступных режимов с помощью EnumDisplaySettings с ESDS_FORCEModeNum:=0;whileEnumDisplaySettings(nil,ModeNum,DM)dobeginListBox1.Items.Add(Format('%d бит, %d x %d at %d Hz',[DM.dmBitsPerPel,DM.dmPelsWidth,DM.dmPelsHeight,DM.dmDisplayFrequency]));Inc(ModeNum);end;end;
Этот код более компактен и легче для чтения, но он делает то же самое, что и ваш оригинальный код.
В статье описывается способ получения всех возможных разрешений экрана компьютера с помощью программного кода на языке Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.