Делаем краудсорсовый проект по Canvas - страница 31

 
Реter Konow:
Перефразирую: в итоге у вас будет один советник с интерфейсом, несмотря на то, что одну часть делаю я, а вторая часть находится у вас. Это не помешает собрать воедино две части в один советник.
Хотя, можно пойти по иному пути. Я опубликую конструктор, а вы с моей помощью спроектируете нужный вам gui. Потом, распечатаете ядро, вставите его в движок, который подключите инклюдником к советнику. Так даже лучше, потому что сразу научитесь писать графику на языке разметки и сможете самостоятельно корректировать.
 
В общем, так и поступим. Я опубликую конструктор и буду здесь учить проектировать на нем gui. Документации пока нет, поэтому, кому интересно, следите за обучением. 

В обучение будут входить следующие темы:

1. Создание функционального gui.
2. Оформление стилей.
3. Распечатка и подключение файла ядра и движка к приложению (очень просто - как инклюдник).
4. Подключение элементов gui к приложению через функционал API (файл API создается автоматически).

Ждите публикации в этой ветке.
 
Реter Konow:
В общем, так и поступим. Я опубликую конструктор и буду здесь учить проектировать на нем gui. Документации пока нет, поэтому, кому интересно, следите за обучением. 

В обучение будут входить следующие темы:

1. Создание функционального gui.
2. Оформление стилей.
3. Распечатка и подключение файла ядра и движка к приложению (очень просто - как инклюдник).
4. Подключение элементов gui к приложению через функционал API (файл API создается автоматически).

Ждите публикации в этой ветке.

Принято!

 
---:

видео не записал, но скидываю пример. набросал по быстрому.

там 600 раскрывающихся списков.

поводите мышкой - при каждой событии и смене цвета происходит перерисовка общего CCanvas. получите ту самую интерактивность.

Итоговый размер можете видеть в свойствах битмапа - 1500х600 px (для сравнения с вашими 800 х 500 и 250 мс лагом). Что равно 900 000 точек, и перерисовываются все мгновенно.  Ни о каких секундах  речи быть не может.

Каждый список отрисовывается сначала у себя на своём канвасе в своём размере (чтоб не выйти за границы) и потом только плюхается на общий. То есть имеем 600 вызовов ResourceCreate на каждое событие от мышки.
Это значит, как видите по скорости реакции, что кадров достаточно и мультики показывать.

Разработчики MT дали удовлетворительный инструмент без тормозов (я про ResourceCreate битмапов)

А в открытом коде данный пример возможно увидеть? 

 
Алексей Барбашин:

Печально что проект ушел в закрытый режим (

Да никуда он не ушел.

 
Алексей Барбашин:

А в открытом коде данный пример возможно увидеть? 

А что вам не понятно в работе с канвасом?

1. он реагирует на события, как все другие графические объекты. То есть можно отслеживать координаты мышки при ее перемещении, реагировать на событие нажатия мыши и клавиатуры.

2. можно независимо менять цвет каждого пикселя.

Что еще надо? А дальше нужно немного мозгов и желания бессмысленно потратить много времени.

 
Привет. 
 
Dmitry Fedoseev:

А что вам не понятно в работе с канвасом?

1. он реагирует на события, как все другие графические объекты. То есть можно отслеживать координаты мышки при ее перемещении, реагировать на событие нажатия мыши и клавиатуры.

2. можно независимо менять цвет каждого пикселя.

Что еще надо? А дальше нужно немного мозгов и желания бессмысленно потратить много времени.

Ну сам канвас не реагирует на события. А то что можно менять каждый пиксель то это и так понятно.

Меня интересовала реализация фрагментарной перерисовки канваса.

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

 
Алексей Барбашин:

Ну сам канвас не реагирует на события. А то что можно менять каждый пиксель то это и так понятно.

Меня интересовала реализация фрагментарной перерисовки канваса.

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

Сам по себе канвас не реагирует на события, но она сам по себе и не существует.

Фрагментарная перерисовка - стоит начать делать и прояснится, если есть такая цель. Думаю должен быть массив элементов управления, у каждого элемента управления определены границы. Когда надо перерисовать какой-то элемент управления, надо пройтись по всем элементам управления, посмотреть, какие еще попадают в эту область, и только их перерисовать. Хотя бы так. 

 
Dmitry Fedoseev:

Сам по себе канвас не реагирует на события, но она сам по себе и не существует.

Фрагментарная перерисовка - стоит начать делать и прояснится, если есть такая цель. Думаю должен быть массив элементов управления, у каждого элемента управления определены границы. Когда надо перерисовать какой-то элемент управления, надо пройтись по всем элементам управления, посмотреть, какие еще попадают в эту область, и только их перерисовать. Хотя бы так. 

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

В итоге получаем что WndObject содержит в себе полное описание наиболее общих свойств любого элемента управления (размеры, расположение, цвет фона, цвет границы, толщина границы, текст, картинка и так далее и так далее). Кроме того этот же класс содержит ссылку на родительский элемент управления. То есть если для элемента родитель не указан, тогда он создает свой объект канваса на графике, в противном случае он рисуется на канвасе родителя. В зависимости от положения (самостоятельный, подчиненный) рассчитываются и координаты расположения элемента. Дополнительно этот же объект имеет и массив, который содержит исходное описание области родителя, которую занимает этот элемент. Сама идея такая: если изменяется только сам элемент то перед его прорисовкой область пикселей заполняется матрицей пикселей родителя, а только потом накладывается новое состояние элемента управления. при таком подходе не требуется каждый раз перерисовывать весь канвас, ведь перерисовка - это обход всех элементов массива, причем рекурсивно при вложенных элементах. Для отрисовки и обновления конкретного элемента управления предполагается две функции: одна рисует элемент поверх родителя (или на чистом холсте) при создании всего контрола, вторая обновляет отображение только заданного элемента управления. Ну как-то так. 

Пока "потерялся" в событийной модели: после каких изменений какие слои нужно перерисовывать.

Николай в своих примерах показывает что в принципе не стоит заморачиваться над хранением данных локальных областей поскольку перерисовка всего канваса работает настолько быстро что нет необходимости опускаться да частностей, достаточно всегда перерисовывать все сразу.
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
Причина обращения: