Открепление окна графика

Окна графиков в терминале могут быть откреплены от главного окна, после чего их можно двигать в произвольное место рабочего стола, включая другие мониторы. MQL5 позволяет узнать и изменить данную настройку: соответствующие свойства включены в перечисление ENUM_CHART_PROPERTY_INTEGER.

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

Описание

Тип значения

CHART_IS_DOCKED

Окно графика закреплено (по умолчанию true). Если установить значение false, то график можно перетащить за пределы терминала

bool

CHART_FLOAT_LEFT

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

int

CHART_FLOAT_TOP

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

int

CHART_FLOAT_RIGHT

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

int

CHART_FLOAT_BOTTOM

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

int

В скрипте ChartDock.mq5 установим слежение за данными свойствами.

void OnStart()
{
   const int flags[] =
   {
      CHART_IS_DOCKED,
      CHART_FLOAT_LEFTCHART_FLOAT_TOPCHART_FLOAT_RIGHTCHART_FLOAT_BOTTOM
   };
   ChartModeMonitor m(flags);
   ...
}

Если теперь запустить скрипт, а затем открепить график с помощью контекстного меню (отжать команду-переключатель Закреплен) и подвигать или изменить размер, получим в журнале соответствующие записи.

Initial state:
    [key] [value]
[0]    51       1
[1]    52       0
[2]    53       0
[3]    54       0
[4]    55       0
                               // открепили
CHART_IS_DOCKED 1 -> 0
CHART_FLOAT_LEFT 0 -> 299
CHART_FLOAT_TOP 0 -> 75
CHART_FLOAT_RIGHT 0 -> 1263
CHART_FLOAT_BOTTOM 0 -> 472
                               // изменили вертикальный размер
CHART_FLOAT_BOTTOM 472 -> 500
CHART_FLOAT_BOTTOM 500 -> 539
                               // изменили горизонтальный размер
CHART_FLOAT_RIGHT 1263 -> 1024
CHART_FLOAT_RIGHT 1024 -> 1023
                               // прикрепили обратно
CHART_IS_DOCKED 0 -> 1

На данном разделе завершается описание свойств, управляемых через ChartGet- и ChartSet-функции, потому подытожим материал с помощью общего скрипта ChartFullSet.mq5. Он отслеживает состояние всех свойств всех типов. Инициализация массива флагов производится просто заполнением последовательными индексами в цикле. Максимальное значение взято с запасом на случай появления новых свойств, а лишние несуществующие номера будут автоматически отброшены проверкой, встроенной в класс ChartModeMonitorBase (вспоминаем метод detect).

Активировав скрипт, попробуйте менять любые настройки, наблюдая за сообщениями программы в журнале.