Советы пользователям Delphi и C++Builder


         

Получение сведений о видеорежиме


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

Обычно для этой цели используется функция Windows API GetDeviceCaps, использующая в качестве входного параметра контекст графического устройства (каковым является экран). В данном примере мы воспользуемся обычной формой VCL для доступа к этому контексту, используя ее свойство Canvas.

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

Создадим простейшее приложение для определения этих параметров. С этой целью поместим на форму кнопку и несколько меток.

Рис. 3. Форма приложения для определения цветового разрешения экрана.

Создадим обработчик события, связанный с нажатием на кнопку. В C++Builder он выглядит следующим образом:

void __fastcall TForm1::Button1Click(TObject *Sender) { long int TC,BPP,CP,VR; BPP=GetDeviceCaps(Form1->Canvas->Handle,BITSPIXEL); CP=GetDeviceCaps(Form1->Canvas->Handle,PLANES); TC=pow(pow(2,BPP),CP); Label1->Caption="Бит на пиксел: "+IntToStr(BPP); if (TC<3) { Label2->Caption="Монохромный дисплей "; } else { Label2->Caption="Число цветов: "+IntToStr(TC); } ; }

Аналогичный код для Delphi имеет вид:

procedure TForm1.Button1Click(Sender: TObject); Var TC,BPP,CP,VR,x: integer; x2:real; begin BPP:=GetDeviceCaps(Form1.Canvas.Handle,BITSPIXEL); CP:=GetDeviceCaps(Form1.Canvas.Handle,PLANES); x2:=intpower(2,BPP); x2:=intpower(x2,CP); TC:=round(x2); Label1.Caption:='Бит на пиксел: '+IntToStr(BPP); if (TC<3) then Label2.Caption:='Монохромный дисплей ' else Label2.Caption:='Число цветов: '+IntToStr(TC); end;

Запущенное приложение выглядит примерно так:

Рис. 4. Приложение для определения цветового разрешения экрана.

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



Содержание раздела