Характеристики экрана

Несколько свойств, предоставляемых функцией TerminalInfoInteger, относятся к видео подсистеме компьютера.

Идентификатор

Описание

TERMINAL_SCREEN_DPI

разрешающая способность вывода информации на экран измеряется в количестве отображаемых точек на погонный дюйм (DPI, Dots Per Inch)

TERMINAL_SCREEN_LEFT

левая координата виртуального экрана

TERMINAL_SCREEN_TOP

верхняя координата виртуального экрана

TERMINAL_SCREEN_WIDTH

ширина виртуального экрана

TERMINAL_SCREEN_HEIGHT

высота виртуального экрана

TERMINAL_LEFT

левая координата терминала относительно виртуального экрана

TERMINAL_TOP

верхняя координата терминала относительно виртуального экрана

TERMINAL_RIGHT

правая координата терминала относительно виртуального экрана

TERMINAL_BOTTOM

нижняя координата терминала относительно виртуального экрана

Знание параметра TERMINAL_SCREEN_DPI позволяет задавать размеры графических объектов таким образом, чтобы они выглядели одинаково на мониторах с различной разрешающей способностью. Например, если требуется создать кнопку с видимым размером X сантиметров, то определить для неё количество экранных точек (пикселей) можно следующей функцией:

int cm2pixels(const double x)
{
   static const double inch2cm = 2.54// 1 дюйм равен 2.54 см
   return (int)(x / inch2cm * TerminalInfoInteger(TERMINAL_SCREEN_DPI));
}

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

Виртуальный экран из нескольких мониторов

Виртуальный экран из нескольких мониторов

Если в системе один монитор, то размер виртуального экрана полностью соответствует ему.

В координатах терминала не учитывается его возможная текущая максимизация (то есть, если главное окно максимизировано, свойства возвращают размер без максимизации, хотя терминал развернут на весь монитор).

В скрипте EnvScreen.mq5 проверим чтение экранных свойств.

void OnStart()
{
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_DPI));
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_LEFT));
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_TOP));
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_WIDTH));
   PRTF(TerminalInfoInteger(TERMINAL_SCREEN_HEIGHT));
   PRTF(TerminalInfoInteger(TERMINAL_LEFT));
   PRTF(TerminalInfoInteger(TERMINAL_TOP));
   PRTF(TerminalInfoInteger(TERMINAL_RIGHT));
   PRTF(TerminalInfoInteger(TERMINAL_BOTTOM));
}

А вот пример полученных записей в журнале.

TerminalInfoInteger(TERMINAL_SCREEN_DPI)=96 / ok
TerminalInfoInteger(TERMINAL_SCREEN_LEFT)=0 / ok
TerminalInfoInteger(TERMINAL_SCREEN_TOP)=0 / ok
TerminalInfoInteger(TERMINAL_SCREEN_WIDTH)=1440 / ok
TerminalInfoInteger(TERMINAL_SCREEN_HEIGHT)=900 / ok
TerminalInfoInteger(TERMINAL_LEFT)=126 / ok
TerminalInfoInteger(TERMINAL_TOP)=41 / ok
TerminalInfoInteger(TERMINAL_RIGHT)=1334 / ok
TerminalInfoInteger(TERMINAL_BOTTOM)=836 / ok

Помимо общих размеров экрана и окна терминала в MQL-программах довольно часто требуется анализировать текущий размер графика (дочернего окна внутри терминала). Для этих целей имеется специальный набор функций (в частности, ChartGetInteger), который мы рассмотрим в разделе Графики.