Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получить все возможные разрешения экрана

Delphi , ОС и Железо , Монитор и Экран

Получить все возможные разрешения экрана

Правильная посадка за компьютером:
- руки на ширине плеч,
- ноги полусогнуты или вытянуты под столом,
- глаза выпучены,
- монитор включен.


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 do 
  begin 
    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 и предназначен для получения всех возможных разрешений экрана и частот обновления, доступных на системе.

Вот разбивка того, что код делает:

  1. Процедура Button1Click вызывается при клике кнопки.
  2. Она получает текущий контекст отображения (DC) с помощью функции GetDC.
  3. Затем она получает количество бит на пиксель (Bits), горизонтальное разрешение (HRes), вертикальное разрешение (VRes) и частоту обновления (fre) с помощью функции GetDeviceCaps.
  4. Процедура отображает текущее разрешение в текстовом поле (Edit1) в формате "X бит, Y x Z".
  5. Она освобождает контекст отображения с помощью функции ReleaseDC.
  6. Код затем перечисляет все доступные режимы экрана с помощью функции EnumDisplaySettings. Эта функция заполняет структуру TDevMode информацией о каждом режиме.
  7. Для каждого режима она добавляет элемент в список (ListBox1) в формате "X бит, Y x Z at Z Hz", где X - количество бит на пиксель, Y - ширина и высота разрешения экрана, а Z - частота обновления.

Цикл в конце продолжается до тех пор, пока не будет доступных режимов. В каждой итерации она увеличивает номер режима (ModeNum) и вызывает функцию EnumDisplaySettings снова, чтобы получить информацию о следующем режиме.

В альтернативном решении:

Вместо использования функции GetDeviceCaps для получения текущего разрешения, вы можете использовать функцию SystemParametersInfo с действием SPI_ GETSYSTEMPARAMS, чтобы получить параметры системы, включая разрешение экрана и частоту обновления.

Кроме того, вместо использования цикла для перечисления всех доступных режимов, вы можете использовать функцию EnumDisplaySettings с флагом ESDS_FORCE, чтобы получить все доступные режимы сразу. Это может улучшить производительность, если есть много доступных режимов.

Вот обновленная версия кода, которая включает в себя эти предложения:

procedure TForm1.Button1Click(Sender: TObject);
var
  DC: THandle;
  Bits: integer;
  HRes, VRes: integer;
  fre: integer;
  DM: TDevMode;
  ModeNum: longint;
begin
   // Получение текущего разрешения и частоты обновления с помощью SystemParametersInfo
  SystemParametersInfo(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_FORCE
  ModeNum := 0;
  while EnumDisplaySettings(nil, ModeNum, DM) do
  begin
    ListBox1.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




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Монитор и Экран ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-03 09:12:26/0.013017177581787/1