Тестируем CGraphic - вопросы и предложения - страница 5

 
o_O:

- С зумомо сложно. Так как нет полос прокруток. И если честно я бы не хотел чтоб их внедряли в этот класс. Он сейчас юзает только CCanvas, и не просит других объектов. И это очень хорошо.

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

Полосы прокрутки - зло. Крутите же обычный чарт без каких-либо полос - мышкой и клавой.
 
fxsaber:
Полосы прокрутки - зло. Крутите же обычный чарт без каких-либо полос - мышкой и клавой.

нет событий чарта для прокрутки. их МQL не шлёт.

но можно запросто просто тягать мышкой dragndrop а не крутить колесо.

 
o_O:

но можно запросто просто тягать мышкой dragndrop а не крутить колесо.

Да, так скроллю и зуммирую в ZoomPrice.
 

@Roman Konopelko


Что по поводу #36  ?


И нашел еще один zero divide

 

могу сделать уточнение (чтоб воспроизвести)

была добавлена курва CurveAdd(arrY, CURVE_HISTOGRAM, "P/L");  у кторой массив arrY размером 1 или 0 элеменов.

и судя по конструктору такой курвы m_xmax=m_xmin=0.  отчего и было дальше zero divide

 
o_O:

@Roman Konopelko

Что по поводу #36  ?
И нашел еще один zero divide

Реализовал описанное в #36 и исправил ошибку zero divide.

Единственное, что ValuesFunctionFormat не стал изменять на:

void              ValuesFunctionFormat(DoubleToStringFunction func, void* cbdata) { m_values_func=func; m_cbdata=cbdata; }

А реализовал методы по получению\установки указателя на функцию и указателя на объект для нее по отдельности:

   DoubleToStringFunction ValuesFunctionFormat(void)    const { return(m_values_func);    }
   void              ValuesFunctionFormat(DoubleToStringFunction func) { m_values_func=func; }
   void             *ValuesFunctionFormatCBData(void)   const { return(m_values_cbdata);  }
   void              ValuesFunctionFormatCBData(void *cbdata) { m_values_cbdata=cbdata;   }
Файлы:
Axis.mqh  12 kb
Curve.mqh  21 kb
Graphic.mqh  86 kb
 

Исправьте пожалуйста в канвасе работу с цветом.

сейчас он без учета альфа канала. везде color вместо uint.

Из-за этого при рисовании на канвасе везде просветы чарта (прозрачные гриды и рамки, из-за того что в color альфа канал =0, то есть полностью прозрачный)

Только в некоторых функциях вы исправляли это, постоянно вызывая ColorToARGB

например

void CGraphic::CreateBackground(void)
  {
...
//--- create background
   m_canvas.FillRectangle(0,0,m_width,m_up-1,ColorToARGB(m_background.clr,255));
   m_canvas.FillRectangle(0,m_height-m_down+1,m_width,m_height,ColorToARGB(m_background.clr,255));
   m_canvas.FillRectangle(0,m_up,m_left-1,m_height-m_down,ColorToARGB(m_background.clr,255));
   m_canvas.FillRectangle(m_width-m_right+1,m_up,m_width,m_height-m_down,ColorToARGB(m_background.clr,255));


Но зачем? если нужно сделать цвет типом uint и задать его сразу с альфа каналом

Как тут (и в других функциях задания цвета)

void CGraphic::SetDefaultParameters(void)
  {
...
//--- sets the default values for grid
   m_grid.clr_line=ColorToARGB(clrWhiteSmoke);
   m_grid.clr_axis_line=ColorToARGB(clrSilver);
   m_grid.clr_frame=ColorToARGB(clrBlack);
   m_grid.clr_background=ColorToARGB(clrWhite);

----

PS.

То что сам канвас с COLOR_FORMAT_XRGB_NOALPHA это не важно в данном случае.

 

решил проверить исправления в обнове терминала 1502

и где же все сделанные улучшения??

ни ValuesFunctionFormat,  ни исправленных багов zerodevide

LOL

с наступившим )

 

установил 1510.

ValuesFunctionFormat есть.  С ним всё ок.

--

@Roman Konopelko посмотрите предложение пожалуйста.

В коде CGraphic это всего несколько переменныхи функций. Заменить не сложно.

Зато убирает проблему прозрачности при отрисовке. Ведь в color альфа канал =100% прозрачность.  Что есть неправильно.

 
o_O:

@Roman Konopelko посмотрите предложение пожалуйста.

В коде CGraphic это всего несколько переменныхи функций. Заменить не сложно.

Зато убирает проблему прозрачности при отрисовке. Ведь в color альфа канал =100% прозрачность.  Что есть неправильно.

В классе CGraphic заменил во всех местах тип color на uint, как вы и просили.

Так же добавил новые методы в класс CCanvas, которые позволяют рисовать примитивы с заданной толщиной:
   void              LineThickVertical(const int x,const int y1,const int y2,const int size,const uint clr,const uint style,ENUM_LINE_END end_style);
   void              LineThickHorizontal(const int x1,const int x2,const int y,const int size,const uint clr,const uint style,ENUM_LINE_END end_style);
   void              LineThick(const int x1,const int y1,const int x2,const int y2,const int size,const uint clr,const uint style,ENUM_LINE_END end_style);
   void              PolylineThick(const int &x[],const int &y[],const int size,const uint clr,const uint style,ENUM_LINE_END end_style);
   void              PolygonThick(const int &x[],const int &y[],const int size,const uint clr,const uint style,ENUM_LINE_END end_style);
В соответствия с нововведение CCanvas расширил свойства CCurve:
   ENUM_LINE_END     LinesEndStyle(void)                      const { return(m_lines_end_style); }
   int               LinesWidth(void)                         const { return(m_lines_width);     }
   void              LinesEndStyle(ENUM_LINE_END end_style)   { m_lines_end_style=end_style; }
   void              LinesWidth(const int width)              { m_lines_width=width;         }
Теперь при отрисовки кривой линиями можно задавать толщину линий и стиль её концов.

Пример:
#include <Graphics\Graphic.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   double x[] = { -100, -40, -10, 20, 30, 40, 50, 60, 70, 80, 120 };
   double y[] = { -5, 4, -10, 23, 17, 18, -9, 13, 17, 4, 9 };
   CGraphic graphic;
   graphic.Create(0,"G",0,30,30,780,380);
//--- plot curve
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_LINES);
   curve.LinesSmooth(true);
   curve.LinesStyle(STYLE_DOT);
   curve.LinesEndStyle(LINE_END_ROUND);
   curve.LinesWidth(10);
   graphic.CurvePlotAll();
   graphic.Update();
  }
Результат:


Реализация данных методов основа на алгоритме Fast Prefiltered Lines, в котором степень сглаженности линий основывается на выбранном фильтре. Если есть необходимость распишу подробнее.
Файлы:
Canvas.mqh  144 kb
Axis.mqh  12 kb
Curve.mqh  22 kb
Graphic.mqh  86 kb
Причина обращения: