![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
- С зумомо сложно. Так как нет полос прокруток. И если честно я бы не хотел чтоб их внедряли в этот класс. Он сейчас юзает только CCanvas, и не просит других объектов. И это очень хорошо.
Зум я планирю реализовывать самостоятельно наследованием, поставлю полосы прокрутки и отмасштабирую как надо.
Полосы прокрутки - зло. Крутите же обычный чарт без каких-либо полос - мышкой и клавой.
нет событий чарта для прокрутки. их МQL не шлёт.
но можно запросто просто тягать мышкой dragndrop а не крутить колесо.
но можно запросто просто тягать мышкой dragndrop а не крутить колесо.
@Roman Konopelko
Что по поводу #36 ?
И нашел еще один zero divide
могу сделать уточнение (чтоб воспроизвести)
была добавлена курва CurveAdd(arrY, CURVE_HISTOGRAM, "P/L"); у кторой массив arrY размером 1 или 0 элеменов.
и судя по конструктору такой курвы m_xmax=m_xmin=0. отчего и было дальше zero divide
@Roman Konopelko
Что по поводу #36 ?
И нашел еще один zero divide
Реализовал описанное в #36 и исправил ошибку zero divide.
Единственное, что ValuesFunctionFormat не стал изменять на:
void ValuesFunctionFormat(DoubleToStringFunction func, void* cbdata) { m_values_func=func; m_cbdata=cbdata; }
А реализовал методы по получению\установки указателя на функцию и указателя на объект для нее по отдельности:
void ValuesFunctionFormat(DoubleToStringFunction func) { m_values_func=func; }
void *ValuesFunctionFormatCBData(void) const { return(m_values_cbdata); }
void ValuesFunctionFormatCBData(void *cbdata) { m_values_cbdata=cbdata; }
Исправьте пожалуйста в канвасе работу с цветом.
сейчас он без учета альфа канала. везде color вместо uint.
Из-за этого при рисовании на канвасе везде просветы чарта (прозрачные гриды и рамки, из-за того что в color альфа канал =0, то есть полностью прозрачный)
Только в некоторых функциях вы исправляли это, постоянно вызывая ColorToARGB
например
{
...
//--- 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 и задать его сразу с альфа каналом
Как тут (и в других функциях задания цвета)
{
...
//--- 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 посмотрите предложение #47 пожалуйста.
В коде CGraphic это всего несколько переменныхи функций. Заменить не сложно.
Зато убирает проблему прозрачности при отрисовке. Ведь в color альфа канал =100% прозрачность. Что есть неправильно.
@Roman Konopelko посмотрите предложение #47 пожалуйста.
В коде CGraphic это всего несколько переменныхи функций. Заменить не сложно.
Зато убирает проблему прозрачности при отрисовке. Ведь в color альфа канал =100% прозрачность. Что есть неправильно.
Так же добавил новые методы в класс CCanvas, которые позволяют рисовать примитивы с заданной толщиной:
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);
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; }
Пример:
//+------------------------------------------------------------------+
//| 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, в котором степень сглаженности линий основывается на выбранном фильтре. Если есть необходимость распишу подробнее.