Code:

function GetNumColors: LongInt;

var

BPP: Integer;

DC: HDC;

begin

DC := CreateDC('DISPLAY', nil, nil, nil);

if DC <> 0 then

   begin

     try

       BPP := GetDeviceCaps(DC, BITPIXEL) * GetDeviceCaps(DC, PLANES);

     finally

       DeleteDC(DC);

     end;

     case BPP of

       1: Result := 2;

       4: Result := 16;

       8: Result := 256;

       15: Result := 32768;

       16: Result := 65536;

       24: Result := 16777216;

     end;

   end

else

   Result := 0;

end;

 

 

Code:

function GetDisplayFrequency: Integer;

{©Drkb v.3}

 

var

DeviceMode: TDeviceMode;

 

begin

EnumDisplaySettings(nil, Cardinal(-1), DeviceMode);

Result := DeviceMode.dmDisplayFrequency;

end;

 

  Display Device Modes

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

 

 

Code:

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;

 

Иногда требуется, чтобы программа работала при чётко заданных параметрах монитора: разрешение, глубина цвета, частота обновления… Определить текущее разрешение просто, достаточно обратиться к объекту TScreen и посмотреть значения его полей Width и Height. А вот чтобы установить свои значения требуется обратиться к функции Api: ChangeDisplaySettings. Если мы хотим вернуть текущие настройки по завершении работы программы, то перед вызовом изменений надо запомнить эти настройки например таким образом: