Библиотеки: Easy Canvas - страница 15

 
Nikolai Semko #:

Приветствую!
Вы наверное скачиваете zip файл. Никогда его не скачивайте. Это недоработка MQ. Когда я обновляю версию, zip файл не перезаписывается, а доступа у меня нет к нему. 
Кликните мышкой по самому файлу iCanvas.mqh или скопируйте из просмотра



Благодарю! 
 
Последняя версия 1.53
Файлы:
iCanvas.mqh  71 kb
 
Nikolai Semko #:
Последняя версия 1.53

Николай, только скачал либу, буду пробовать, очень интересно и спасибо! А в ZIP в кодобазе до сих пор лежит старая версия 1.09!!! Хорошо, что я прочитал комменты и скачал напрямую. Я бы на вашем месте обязательно написал про этот выдающийся баг в ветку MT5, mql5, mql5.com предложения по улучшению !

MT5, mql5, mql5.com предложения по улучшению. - Сделайте реалистичные предложения по улучшению платформы MT5, языка mql5 и сайта и услуг Mql5 Com.
MT5, mql5, mql5.com предложения по улучшению. - Сделайте реалистичные предложения по улучшению платформы MT5, языка mql5 и сайта и услуг Mql5 Com.
  • 2013.06.15
  • www.mql5.com
удерживая клавишу CTRL при перетаскивании точки привязки. Модифицировать OnChartEvent для обработки нажатия на кнопку. Всплывающее окно появляется автоматически после третьего символа или вы можете вызвать его с помощью CTRL SPACE
 
Alexey Volchanskiy #:

Николай, только скачал либу, буду пробовать, очень интересно и спасибо! А в ZIP в кодобазе до сих пор лежит старая версия 1.09!!! Хорошо, что я прочитал комменты и скачал напрямую. Я бы на вашем месте обязательно написал про этот выдающийся баг в ветку MT5, mql5, mql5.com предложения по улучшению !

Спасибо Алексей!
Писал уже больше 4 лет назад.  

 
Николай, можно ли использовать вашу библиотеку для отрисовки динамически изменяющихся "прямоугольников" привязаных к свечам, чтобы заменить ими использующиеся сейчас объекты типа OBJ_RECTANGLE. Нужно для того чтобы визуально красиво отображалось наложение прямоугольников (т.е. наличие прозрачности).
Возможно есть пример такого использования?
 
Peter Vorobyev #:
Николай, можно ли использовать вашу библиотеку для отрисовки динамически изменяющихся "прямоугольников" привязаных к свечам, чтобы заменить ими использующиеся сейчас объекты типа OBJ_RECTANGLE. Нужно для того чтобы визуально красиво отображалось наложение прямоугольников (т.е. наличие прозрачности).
Возможно есть пример такого использования?

Конечно можно, но смотря для какого случая. 
Если прямоугольников не много (~<1000) и им не надо делать часто ресайз, то можно обойтись стандартным CCanvas. В этом случае каждый прямоугольник - это отдельный канвас, привязанный к координатам цена-время. Будет необходимо позаботиться о "подчистки за собой", чтобы объкты не плодились безконтрольно. 
Если же объектов много и они часто меняеют свои свойства, то проще будет воспользоваться этой библиотекой. 
В этом случае вы создаете массив структур- виртуальных прямоугольников с необходимыми свойствами и выводите их на видимый чарт при наступлении события изменения чарта или при вашем событии изменения каких-либо свойств.
Это самый производительный вариант, и объект канваса(битмапа) здесь будет один, растянутый на весь экран. Но в этом варианте будет небольшое отставания графических объектов от чарта при вертикальном и горизонтальном скроллинге. 


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

ЗЫ нет пример Test_iCanvas.mq5 не очень подходящий, т.к. я там реализовал все по кривому через таймер. Надо переписать этот пример. Тупое было решение, сбивающее с толку.
Ну посмотрите еще примеры здесь и здесь. Правда в этим примерах нет привязки к цена-вреямя. Для этого нужно польноваться функциями X и Y для перевода координат цена-время в координаты XY
 
спасибо, за развернутый ответ.
а не планируете о реализации в вашей библиотеке объекта - прямоугольник позволяющего рисовать прямоугольник (создавать/перемещать/изменять) с заданными свойствами наподобие обычного графического объекта?
 
Peter Vorobyev #:
спасибо, за развернутый ответ.
а не планируете о реализации в вашей библиотеке объекта - прямоугольник позволяющего рисовать прямоугольник (создавать/перемещать/изменять) с заданными свойствами наподобие обычного графического объекта?

не совсем понятно, что Вы имеете ввиду.

Есть разные функции для рисования прямоугольников. Это достаточно чтобы создавать, перемещать и изменять.

Да, можно создать любой объект в виде структуры или класса в вашем стороннем коде, в котором прописать метод вывода на экран используя этот класс iCanvas или CCanvas, но нет смысла все возможные вариации реализаций делать внутри графической библиотеки. Важны только примитивы. У меня, конечно, есть своя расширенная функция этой библиотеки. Она в разы больше этой, но в ней кроме меня никто не разберется. Для себя и писал. 

 
Nikolai Semko #:

не совсем понятно, что Вы имеете ввиду.

Есть разные функции для рисования прямоугольников. Это достаточно чтобы создавать, перемещать и изменять.

Да, можно создать любой объект в виде структуры или класса в вашем стороннем коде, в котором прописать метод вывода на экран используя этот класс iCanvas или CCanvas, но нет смысла все возможные вариации реализаций делать внутри графической библиотеки. Важны только примитивы. У меня, конечно, есть своя расширенная функция этой библиотеки. Она в разы больше этой, но в ней кроме меня никто не разберется. Для себя и писал. 

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

 
Peter Vorobyev #:

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

вот подходящий для вас пример советника:

#include <Canvas\iCanvas_CB.mqh> //https://www.mql5.com/ru/code/22164

//+------------------------------------------------------------------+
int OnInit() {
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {}
//+------------------------------------------------------------------+
void OnTick() {
   Draw();
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam) {
   if (id == CHARTEVENT_CHART_CHANGE || id == CHARTEVENT_MOUSE_MOVE) Draw();
}
//+------------------------------------------------------------------+
void Draw() {
   static uint last = 0;         //
   uint cur = GetTickCount();    //  Необходимо для оптимизации производительности
   if (cur-last<25) return;      //  Особенно важно для тестера
   last = cur;                   //
   if (Canvas.tester) ChartChanged();   // для корректной работы в тестере.
   Canvas.Erase(0x00FFFFFF);   // такая маска нужна для корректного вывода шрифтов
   Canvas.CurentFont("Calibri Light", 16,16,0xFF000000);
   for (int shift = -1000; shift<=1000; shift+=50 ) {
      uint clr = (Canvas.Grad((shift+1000.0)/2000.0) & 0x00FFFFFF)|0x40000000;
      int bar = Round(Canvas.Bar(double(_MouseX+shift)));
      double price  = iHigh(_Symbol,PERIOD_CURRENT,bar);
      int x = int(Canvas.X(double(bar)));
      int y = (int)_Y(price);
      Canvas.FillRectangleA(x,y,x+150,y-60,clr);
      
      _CommXY(x+5,y-55,"high = "+DoubleToString(price,_Digits));
      _Comment("bar = "+(string)bar);
      _Comment("time = " + TimeToString(iTime(_Symbol,PERIOD_CURRENT,bar))); 
   }
   Canvas.Update();
}


для работы нужна версия iCanvas 1.54

Файлы:
Причина обращения: