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


         

Получение сведений о частоте развертки монитора


Модифицируем ранее созданный пример, добавив определение типа операционной системы, и, если это Windows NT - определение частоты развертки. С этой целью необходимо в первую очередь определить тип операционной системы.

Как определить тип операционной системы? Для этой цели воспользуемся функцией Windows API GetVersionEx. Но, прежде чем ее вызвать, следует создать структуру типа OSVERSIONINFO, содержащую сведения об имении версии операционной системы (подробное описание этой структуры можно найти в справке по функциям Windows API, поставляемой с обоими средствами разработки), и корректно определить ее размер с помощью функции sizeof.

Поместим еще одну метку на форму нашего примера и изменим обработчик события, связанного с нажатием на кнопку: В случае C++Builder он теперь имеет вид:

void __fastcall TForm1::Button1Click(TObject *Sender) { long int TC,BPP,CP,VR; OSVERSIONINFO OV; 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); } ; OV.dwOSVersionInfoSize=sizeof(OV); GetVersionEx(&OV); if (OV.dwPlatformId==VER_PLATFORM_WIN32_NT) { VR=GetDeviceCaps(Form1->Canvas->Handle,VREFRESH); Label3->Caption="Частота развертки: "+IntToStr(VR)+" Гц"; } else { Label3->Caption="Частота развертки не определется в данной ОС"; } }

Соответствующий код для Delphi выглядит так:

procedure TForm1.Button1Click(Sender: TObject); Var TC,BPP,CP,VR,x: integer; x1,x2:real; OV: TOSVersionInfo; 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); OV.dwOSVersionInfoSize:=SizeOf(OV); GetVersionEx(OV); if OV.dwPlatformID=VER_PLATFORM_WIN32_NT then begin VR:=GetDeviceCaps(Form1.Canvas.Handle,VREFRESH); Label3.Caption:='Частота развертки: '+IntToStr(VR)+' Гц'; end else Label3.Caption:='Частота развертки не определется в данной ОС'; end; end.

Если запустить это приложение в операционной системе Windows NT, оно отобразит сведения о частоте развертки:

Рис. 5. Приложение для определения частоты развертки под управлением Windows NT

Рис. 6. То же приложение под управлением Windows 95



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