Содержание материала

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

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

Code:

...

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;

 

 

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

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

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

  

function EnumDisplaySettings(lpszDeviceName: PWideChar; iModeNum: DWORD;

var lpDevMode: TdeviceMode): BOOL; stdcall;

 

Параметры

 

lpszDeviceName

Указатель на нуль-терминальную строку, определяющую экранное устройство, видеорежимы которого мы хотим получить. В Windows 95 and 98 (и в наших приложениях :)) ), lpszDeviceName должно быть равно Nil.

iModeNum

Номер видеорежима

lpDevMode

Структура, в которой будет возвращена информация о видеорежиме. Cтруктура довольно сложна и используется не только для видео устройств, но нам понадобятся только следующие ее поля.

Поле Описание

 

DmBitsPerPel

Количество бит на пиксел

DmPelsWidth

Ширина в пикселях

DmPelsHeight

Высота в пикселях

DmDisplayFlags

DM_GRAYSCALE - Черно-белое устройство

DM_INTERLACED - Черезстрочная развертка.

Если флаг не установлен, подразумевается построчная развертка

dmDisplayFrequency

Частота обновления экрана

DmPosition

Windows 98, Windows 2000: Номер монитора для конфигураций с несколькими мониторами

DmFields

Поле dmFields используется при смене видеорежима для указания, какие именно из параметров устройства мы хотим изменить. Каждый бит поля определяет необходимость смены одного из параметров. Возможные значения:

DM_BITSPERPEL - Изменить количество бит на пиксель на значение указанное в поле dmBitsPerPel.

DM_PELSWIDTH - Изменить ширинку экрана на значение указанное в поле dmPelsWidth.

DM_PELSHEIGHT - Изменить выстоу экрана на значение указанное в поле dmPelsHeight

DM_DISPLAYFLAGS - Изменить флаги.

DM_DISPLAYFREQUENCY - Изменить частоту обновления dmDisplayFrequency.

DM_POSITION - Windows 98, Windows 2000: изменить номер монитора.

Если lpDevMode равно nil, из реестра берется информация о видеорежиме установленном по умолчанию. Передавая в lpDevMode nil и в dwFlags 0 можно получить настройки текущего видеорежима.

Добавить комментарий

Не использовать не нормативную лексику.

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

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить