Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Получаем и устанавливаем различные режимы видеоадаптера

Delphi , ОС и Железо , Аудиокарта и Видеокарта

Получаем и устанавливаем различные режимы видеоадаптера

Подарили одному программисту на Новый 1998 год крутую видеокарточку. Ну, естественно, шампанское побоку, ящик пива - и сидит он в новогоднюю ночь, карточку новую ставит. Ставит драйвера, переставляет Винды - не работает девайс... Тут у него за спиной голос:
- Ебешься?
- Ебусь, - не поднимая головы отвечает программист.
- А хочешь по-настоящему?
- Хочу! - не поднимая голвы отвечает программист.
И сказал Билл Гейтс:
- Будет тебе в новом году Windows"98!

Display Device Modes

При разработке Windows приложения, иногда приходится учитывать тот факт, что оно в будущем будет работать на компьютерах с абсолютно разными мониторами и рабочими разрешениями, установленными на видео адаптере. Поэтому не лишне было бы включить в приложение такую возможность как установка различных разрешений видео адаптера.

В данной статье мы рассмотрим принципы работы с API функцией EnumDisplaySettings, которая позволяет получить список доступных разрешений дисплея, а так же с функцией ChangeDisplaySettings для смены текущего видео-режима.

Получение возможных видео-режимов

Итак, для того, чтобы получить информацию о всех возможных режимах адаптера, нам необходимо сделать серию вызовов функции EnumDisplaySettings. Вызывая эту функцию в цикле мы будем каждый раз получать доступный режим, до тех пор пока результат функции не станет отличным от True.

Данная функция имеет на входе переменную типа TDevMode, в которой помещаются параметры. Сам тип TDevMode имеет множество переменных, относящихся к видео адаптеру. А именно, он включает в себя разрешение видео адаптера в пикселях (dmPelsWidth, dmPelsHeight), разрядность цвета (в битах на пиксель), поддерживаемая при данном разрешении (dmBitsPerPel), частота обновления (dmDisplayFrequency) и другие.


procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  DevMode: TDevMode;
begin
  i:=0;
  while EnumDisplaySettings(nil,i,DevMode) do
  begin
    with Devmode do
      ListBox1.Items.Add(Format('%dx%d %d Colors',
      [dmPelsWidth,dmPelsHeight,1 shl dmBitsperPel]));
    Inc(i);
  end;
end;

Установка видео-режима

После того как мы получим все доступные режимы, то установить желательный не составляет особого труда. Для этого мы воспользуемся функцией ChangeDisplaySettings. Так же данная функция при необходимости обновит реестр Windows.


procedure TForm1.Button1Click(Sender: TObject);
var
  DevMode: TDeviceMode;
  liRetValue: Longint;
begin
  if EnumDisplaySettings(nil,Listbox1.ItemIndex,Devmode) then
    liRetValue := ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);

  SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0);
end;

Функция ChangeDisplaySettings возвращает значение long integer. Это значение можно использовать для определения успешности выполнения функции, сравнив со значениями из списка констант.

Внимание:

Не рекомендуется устанавливать значение видео-режима, который не присутствует в списке доступных. Это может привести к мерцанию экрана либо вообще к исчезновению изображения.

Внимание:

Многие адаптеры (особенно старые) могут не поддерживать смену разрешения без перезагрузки компьютера.

Внимание:

SendMessage используется для того, чтобы информировать все окна о смене видео-режима.

Отслеживание изменений дисплея

Для отслеживания изменений необходимо создать обработчик для перехвата сообщения WM_DISPLAYCHANGE. Обычно данный приём используется в случае, если приложения использует в своей работе графику, и его необходимо перезагрузить для смены разрешения, разрядности цвета и т.д.


...
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
...
  private
  procedure WMDisplayChange(var message:TMessage); message WM_DISPLAYCHANGE;
...

procedure TForm1.WMDisplayChange(var message: TMessage);
begin
  ShowMessage('Changes in display detected!');
  inherited;
end;

Скачать демонстрационный проект

Статья Получаем и устанавливаем различные режимы видеоадаптера раздела ОС и Железо Аудиокарта и Видеокарта может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



:: Главная :: Аудиокарта и Видеокарта ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
19.04.2024 07:00:56/0.0010979175567627/0