Prueba CGraphic - preguntas y sugerencias - página 9

 
Dennis Kirichenko:

Anatoly, ¡muchas gracias! Ayudó en el punto 1. Sí, se me pasó el método del ejeCAxis::MaxGrace(const double value).

He aquí otro ejemplo breve:

   CAxis *x_axis=graph.XAxis();
   x_axis.AutoScale(true);
   x_axis.Min(0);
   x_axis.Max(m_max_data);
   x_axis.MinGrace(0.0);
   x_axis.MaxGrace(0.2);
   x_axis.DefaultStep(m_max_data/10);
 

Solicitud #1827124.


 
Anatoli Kazharski:

Solicitud #1827124.

El problema se ha solucionado de la siguiente manera:

Equipo deapoyo2018.01.15 14:30

El error aparecía al calcular con seguridad el resto de la división en el método CAxis::Mod.

Solía haber un método numérico implementado allí, sin usar la función MathMod, pero tu ejemplo mostró que la precisión de este método no es la mejor en algunos casos.

Así que tuve que cambiar este método a:

//+------------------------------------------------------------------+
//| Calculate the modulus (remainder) in a safe manner so that divide|
//| by zero errors are avoided                                       |
//+------------------------------------------------------------------+
double CAxis::Mod(const double x,const double y)
  {
//--- check 
   if(y==0)
      return(0);
//--- calculate modulus
   return (x>0)? MathMod(x,y): MathMod(x,y)+y;
  }

//---

El resultado con los mismos parámetros:


 

Inicialización en el experto CGraphic.

Si crea un gráfico en el Asesor Experto, por ejemplo

int OnInit()
  {
     
   CGraphic graphic;
   string name ="Graphic";   
   bool ch =graphic.Create(0,name,0,220,20,970,370);

   double x[24]={0,1,2,3,4,5,6,7,8,9,10};
   double y[24]={0,1,2,3,4,5,6,7,8,9,10};
   
   for(int i=0;i<10;i++)
     {
     y[i] =y[i]+Shift;
     }
   CCurve *curve=graphic.CurveAdd(x,y,CURVE_HISTOGRAM);
   curve.HistogramWidth(6);
   curve.Color(Green);
   curve.Name("Curve");
   
   graphic.CurvePlotAll();
   graphic.Update();
//   ChartRedraw();
   
  return(INIT_SUCCEEDED);       
  }

entonces, cuando se cambia un parámetro externo, el gráfico desaparece periódicamente. No a la primera. Puedes cambiar el parámetro 3-5 veces y se pierde al azar, y no para siempre. Se puede encontrar a través de la conmutación de los marcos de tiempo o el comercio automatizado (activado o desactivado).

¿Podemos hacer que no se pierda?

 
Photic:

Inicialización en el experto CGraphic.

Si crea un gráfico en el Asesor Experto, por ejemplo:

entonces, cuando se cambia el parámetro externo, el gráfico desaparece periódicamente. No desde la primera vez. Es posible cambiar el parámetro 3-5 veces y luego se pierde al azar en algún lugar, y no para siempre. Se puede encontrar cambiando los marcos de tiempo o el comercio automático (activado - no activado).

¿Puede hacer que no se pierda?

Se crea y destruye el objeto en el nivel local de la función OnInit.

Crear uno a nivel global.
 

El problema se solucionó reinstalando MT.

No me acostumbro al hecho de que pueda no haber un error cuando se produce un error.

 

¿Podríais decirme cómo cambiar la anchura de la leyenda o eliminar el espacio asignado a la misma?

 
¿Cómo puedo evitar que se escriban algunas líneas en la leyenda? Sólo tengo una línea que son puntos en la coordenada Y y necesito hacer estos puntos en diferentes colores, por lo que es una línea de diferente color y muestra la misma información, aunque está hecha con diferentes líneas, y sólo necesito poner información resumida sobre esta línea en la leyenda, hay muchas líneas de colores diferentes. ¿Cómo puedo hacerlo?
 

Y otra pregunta, ¿por qué especifico un color "Rojo", pero se muestra en el gráfico como azul, mientras que el Verde se muestra correctamente?

if(TypeInfo=="TP_FP")
{
   graphicP.HistoryNameSize(Point_K);//Устанавливает размер шрифта имени кривой
   graphicP.HistorySymbolSize(Point_K);//Получить/установить размер символов условных обозначений  

   CCurve *A=graphicP.CurveAdd(X,Y,Green,CURVE_POINTS,N_Model+"("+N+")");//Создает и добавляет кривую на график
   A.PointsFill(true);//Устанавливает флаг, указывающий, нужно ли выполнять заливку для точек, определяющих кривую при отрисовке точками. 
   A.PointsType(POINT_VERTICAL_DASH);//Устанавливает флаг, указывающий на тип точек, использующихся при отрисовке кривой точками.
}

if(TypeInfo=="FN")
{
   //graphicP.HistoryNameSize(1);//Устанавливает размер шрифта имени кривой
   //graphicP.HistorySymbolSize(1);//Получить/установить размер символов условных обозначений  

   CCurve *A=graphicP.CurveAdd(X,Y,Red,CURVE_POINTS,"");//Создает и добавляет кривую на график
   A.PointsFill(false);//Устанавливает флаг, указывающий, нужно ли выполнять заливку для точек, определяющих кривую при отрисовке точками. 
   A.PointsType(POINT_VERTICAL_DASH);//Устанавливает флаг, указывающий на тип точек, использующихся при отрисовке кривой точками.
}



 
Aleksey Vyazmikin:

Y otra pregunta, ¿por qué especifico un color "Rojo", pero se muestra en el gráfico azul, mientras que el Verde se muestra correctamente?



Lo he resuelto, el color tiene que ser ajustado de la siguiente manera

ColorToARGB(Red,256)