Обсуждение статьи "Торговые инструменты на MQL5 (Часть 34): Замена штатных графических объектов интерактивным слоем рисования на холсте"

Опубликована статья Торговые инструменты на MQL5 (Часть 34): Замена штатных графических объектов интерактивным слоем рисования на холсте:

Мы заменяем штатные графические объекты MetaTrader движком рисования на основе холста, который попиксельно отрисовывает инструменты на растровом слое, охватывающем весь график. В статье реализованы постоянное хранение объектов с запоминанием стиля для каждого инструмента, точная проверка попадания, выделение, перетаскивание объекта целиком и управление маркерами. Также добавлены новые инструменты рисования линий, переработанная система категорий с действием удаления одним щелчком и предпросмотр с растягиваемым контуром для размещения несколькими щелчками.

В части 32 каждый инструмент рисования создавал штатный графический объект MetaTrader в тот момент, когда пользователь щелкал по графику. Трендовая линия становилась объектом OBJ_TREND, горизонтальная линия — объектом OBJ_HLINE, а прямоугольник — объектом OBJ_RECTANGLE. MetaTrader полностью управлял их жизненным циклом, отрисовкой и положением. Такой подход годится для простого размещения объектов, но передаёт управление терминалу, который взамен предоставляет очень мало возможностей. Вы не можете с пиксельной точностью определить, над каким объектом находится указатель мыши, перехватить перетаскивание конкретного маркера или отрисовать собственные круглые маркеры, предпросмотр с растягиваемым пунктирным контуром и плавающие информационные панели так, как это делает профессиональный инструмент рисования.

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

Реализация состоит из трёх уровней, каждый из которых опирается на предыдущий. Первый уровень — основа отрисовки: функции рисования графических примитивов и библиотека отрисовки линий для каждого инструмента. Второй уровень — управление объектами: структура для хранения каждого рисуемого объекта, управление жизненным циклом холста и движок перерисовки. Третий уровень — взаимодействие: система проверки попадания и инструмент "Указатель", который преобразует попадание в выделение, перетаскивание или удаление. Каждый уровень зависит от предыдущего, а вместе они заменяют все возможности, которые прежде предоставляли штатные графические объекты. Вот краткая наглядная схема того, чего мы хотим достичь.

АРХИТЕКТУРА ИНСТРУМЕНТОВ РИСОВАНИЯ НА ХОЛСТЕ


Автор: Allan Munene Mutiiria