测试CGraphic--问题和建议 - 页 4

 
Roman Konopelko:

即使你把它们变成虚拟的 ,你也不能在没有完全访问 CGraphics类成员 的情况下进行正常的重载,所以你必须把它们中的所有(大部分)声明为保护的

而这些函数***Plot只是被保护的


 
o_O:

而这些***Plot函数也同样受到保护

class CGraphic
  {
private:
   CArrayObj         m_arr_curves;
   CCanvas           m_canvas;
   //--- parameters background
   int               m_height;
   int               m_width;
   //--- parameters work space
   int               m_left;
   int               m_right;
   int               m_up;
   int               m_down;
   //--- default parameters work space
   int               m_left0;
   int               m_right0;
   int               m_up0;
   int               m_down0;
   //--- size of dash on the axes
   int               m_mark_size;
   //--- scaling parameters
   double            m_dx;
   double            m_dy;
我说的是CGraphic类的成员,现在它们都是私有的,如果不能访问m_canvas、m_dx、m_dy和其他子类中的成员,重载就无法工作。
 
Roman Konopelko:
我说的是CGraphic类的成员,现在它们都是私有的,如果不能访问m_canvas、m_dx、m_dy和其他子类中的成员,重载就无法工作。

好吧,那么一切就交给你了)我等着。

到目前为止,我已经在本地临时改变了它

 

在一些函数中(不是所有地方),如果有除法,是没有0检查的。

比如说

void CGraphic::CalculateXAxis(void)
  {
...
...
   double x_size=(m_x.Max()-m_x.Min());
   double xf_size=xf2-xf1;
//--- keep scaling parameters  
   m_dx=xf_size/x_size;

在这里,如果x.Max() == Min(),将发生zero_devide。

在Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScale等也是如此。

 
o_O:

在一些函数中(不是所有地方),如果有除法,是没有0检查的。

比如说

void CGraphic::CalculateXAxis(void)
  {
...
...
   double x_size=(m_x.Max()-m_x.Min());
   double xf_size=xf2-xf1;
//--- keep scaling parameters  
   m_dx=xf_size/x_size;

如果x.Max() == Min(),就会发生zero_devide。

在Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScale等也是如此。

谢谢你,我会改正的。

为了不使库中的大量检查超载,我试图在Axis::SelectAxisScal方法中考虑到所有情况。

附加的文件:
Axis.mqh  11 kb
 

1.这似乎是没有今天早上编辑的关于enum ENUM_AXIS_TYPE的文件。

---

2.测试了前页的ENUM_AXIS_TYPE

因为你是以回调函数的方式做ValuesFunctionFormat,你必须在函数中返回一些void* 参数。

typedef string(*DoubleToStringFunction)(double, void*);

CAxis 中添加

   DoubleToStringFunction m_values_func;
   void* m_cbdata; // <---

...

// изменить
   void              ValuesFunctionFormat(DoubleToStringFunction func, void* cbdata) { m_values_func=func; m_cbdata=cbdata; }

// добавить получение этого void*
   void* ValuesFunctionFormatCBData(void)    const { return m_c bdata; }


in CGraphic::CalculateXAxis

   DoubleToStringFunction xfunc=m_x.ValuesFunctionFormat();
   void* cbdata=m_x.ValuesFunctionFormatCBData(); // <---

...

         case AXIS_TYPE_CUSTOM:
           {
            m_xvalues[i]=(xfunc==NULL) ? NULL : xfunc(x, cbdata); // <---


----

这个回调参数需要传递一个指针到一个知道arrX阵列位置的对象

因为这个函数本质上是静态的,所以不可能知道到底是什么在调用它。


ZS。

这里是时间序列显示的结果,已经是这样了(我以后会问更多关于带读数的线,那里有一个不方便的坐标 :)

 
o_O:

这就是时间序列的结果,原则上已经是这样了(我稍后会问更多关于有读数的线,那里有获得坐标的尴尬 :)

请从空图的那一刻起制作一个视频或更长的动画。从GIF来看,我不明白它是什么。
 
fxsaber:
请从空图的那一刻起制作一个视频或更长的动画。我从GIF中没有得到。

这样好吗?

这位专家在罗马的画布+CGraphic 上工作。

在这种情况下,我正在从几个工具中建立一个P/L。
 
o_O:

这位专家在Roman的Canvas + CGraphic上工作。

在这种情况下,我从几个工具上建立P/L

现在更清楚了。十字线(以及可能的其他互动性)是罗曼库的内置(必要)功能,还是你继承了它?

我想在SB图形中看到交互性元素--十字准线、缩放(两个方向)和光标值的高亮显示。

也就是说,我通过EA/指示器做GraphPlot,一下子就得到了这样的功能。

 
fxsaber:

现在要更清楚地说明。十字线(可能还有其他互动性)是罗曼圣经的内置(必要)功能,还是你继承了它?

是的,我继承了它。

我想在SB图形中看到一些交互性的元素--十字准线、缩放(两边)和光标值的高亮。

我们将与主要的一个人进行交谈。我也需要一些东西。

- 需要背光(如果不是它,那么至少是GetNearY/X函数)。反正最好是通过继承来实现突出显示。在我们每个人的表述中都是不同的 )

- 现在还不需要crosshair本身,因为它是图表事件的结果,与库没有关系。

- 获得比例值--由像素坐标决定--是必须的。

- 使用zoomo很困难。因为没有滚动条。而且说实话,我也不希望他们在这个班上实施。现在,它只使用CCanvas,不要求任何其他对象。而这是非常好的。
我计划通过继承独立实现缩放,放上滚动条,并根据需要重新缩放。