测试CGraphic--问题和建议 - 页 5 12345678910111213 新评论 fxsaber 2016.12.20 19:48 #41 o_O:- 使用zoomo很困难。因为没有滚动条。而且说实话,我也不希望他们在这个班上实施。现在它只使用CCanvas,而不要求其他对象。而这是非常好的。我计划通过继承独立实现缩放,放上滚动条,并根据需要重新缩放。滚动条 是邪恶的。你可以用鼠标和键盘来旋转一个没有任何条形的普通图表。 --- 2016.12.20 20:15 #42 fxsaber: 滚动条是邪恶的。你可以用鼠标和键盘旋转一个没有任何条形的普通图表。没有用于滚动的图表事件。 MQL不发送它们。但你可以简单地用鼠标拖动,而不是旋转转盘。 fxsaber 2016.12.20 20:33 #43 o_O:但你可以简单地用鼠标拖动,而不是旋转转盘。 是的,这就是我在ZoomPrice中滚动和缩放的方式。 --- 2016.12.22 10:08 #44 @罗曼-科诺佩尔科36号 呢? 并发现另一个零除法 --- 2016.12.22 12:08 #45 我可以澄清一下(重现)添加了一条CurveAdd(arrY, CURVE_HISTOGRAM, "P/L")曲线;它有一个大小为1或0元素的ArrY阵列。而从这个曲线构造器来看,m_xmax=m_xmin=0。 Roman Konopelko 2016.12.22 14:59 #46 o_O:@罗曼-科诺佩尔科36号 呢? 并发现另一个零除法实施了#36,修正了除零错误。唯一的一点是,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 ColorGenerator.mqh 4 kb Curve.mqh 21 kb Graphic.mqh 86 kb --- 2016.12.25 12:56 #47 请修复kanvas中的颜色处理问题。现在它不考虑阿尔法通道了。颜色 而不是uint 到处都是。正因为如此,当在画布上绘图时,到处都有图表的间隙(透明的网格和框架,因为在颜色中,alpha通道=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 类型,并且 用alpha通道来设置它,那么为什么?如这里(以及其他颜色的功能)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并不重要。 Testing CGraphic - questions 在交易中应用 OLAP(第四部分):定量和可视化分析测试器报告 DoEasy 函数库中的图形(第七十五部分):处理基本图形元素图元和文本的方法 --- 2016.12.31 17:34 #48 决定检查终端更新1502中的修复措施所有的改进都是在哪里进行的?没有ValuesFunctionFormat,没有修复错误的zerodevide大笑节日快乐 ) --- 2017.01.24 11:47 #49 安装了1510。ValuesFunctionFormat在那里,它是确定的。--@罗曼-科诺佩尔科 请看第47 句。在CGraphic代码中,它只是一些变量和函数。替换并不困难。 但它消除了渲染中的透明度问题。因为在颜色中alpha通道=100%的透明度,这是错误的。 Roman Konopelko 2017.01.31 14:46 #50 o_O:@罗曼-科诺佩尔科 请看第47 句。CGraphic代码中只有几个变量和函数。替换并不困难。 但它消除了渲染时的透明度问题。事实上,在颜色中alpha通道=100%的透明度,这是错误的。 在CGraphic类中,我已经按照你的建议,在所有地方用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(); } 结果。 这些方法的实现是基于快速预滤波线的 算法,其中线的平滑程度是基于所选择的过滤器。如果有必要,我将更详细地描述它。 附加的文件: Canvas.mqh 144 kb Axis.mqh 12 kb ColorGenerator.mqh 4 kb Curve.mqh 22 kb Graphic.mqh 86 kb Testing CGraphic - questions CCurve - LinesWidth CCurve - CustomPlotFunction 12345678910111213 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
- 使用zoomo很困难。因为没有滚动条。而且说实话,我也不希望他们在这个班上实施。现在它只使用CCanvas,而不要求其他对象。而这是非常好的。
我计划通过继承独立实现缩放,放上滚动条,并根据需要重新缩放。
滚动条是邪恶的。你可以用鼠标和键盘旋转一个没有任何条形的普通图表。
没有用于滚动的图表事件。 MQL不发送它们。
但你可以简单地用鼠标拖动,而不是旋转转盘。
但你可以简单地用鼠标拖动,而不是旋转转盘。
@罗曼-科诺佩尔科
36号 呢?
并发现另一个零除法
我可以澄清一下(重现)
添加了一条CurveAdd(arrY, CURVE_HISTOGRAM, "P/L")曲线;它有一个大小为1或0元素的ArrY阵列。
而从这个曲线构造器来看,m_xmax=m_xmin=0。
@罗曼-科诺佩尔科
36号 呢?
并发现另一个零除法
实施了#36,修正了除零错误。
唯一的一点是,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; }
请修复kanvas中的颜色处理问题。
现在它不考虑阿尔法通道了。颜色 而不是uint 到处都是。
正因为如此,当在画布上绘图时,到处都有图表的间隙(透明的网格和框架,因为在颜色中,alpha通道=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 类型,并且 用alpha通道来设置它,那么为什么?
如这里(以及其他颜色的功能)
{
...
//--- 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
大笑
节日快乐 )
安装了1510。
ValuesFunctionFormat在那里,它是确定的。
--
@罗曼-科诺佩尔科 请看第47 句。
在CGraphic代码中,它只是一些变量和函数。替换并不困难。
但它消除了渲染中的透明度问题。因为在颜色中alpha通道=100%的透明度,这是错误的。
@罗曼-科诺佩尔科 请看第47 句。
CGraphic代码中只有几个变量和函数。替换并不困难。
但它消除了渲染时的透明度问题。事实上,在颜色中alpha通道=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();
}
这些方法的实现是基于快速预滤波线的 算法,其中线的平滑程度是基于所选择的过滤器。如果有必要,我将更详细地描述它。