Test CGraphic - domande e suggerimenti - pagina 5

 
o_O:

- È difficile con Zoomo. Poiché non ci sono barre di scorrimento. E ad essere onesti, non vorrei che fossero implementati in questa classe. Al momento usa solo CCanvas, e non chiede altri oggetti. E questo è molto buono.

Ho intenzione di implementare lo zoom in modo indipendente per eredità, mettere le barre di scorrimento e ridimensionare come necessario.

Lebarre di scorrimento sono il male. È possibile ruotare un grafico normale senza barre - con mouse e tastiera.
 
fxsaber:
Le barre di scorrimento sono il male. Puoi far girare un grafico normale senza barre - con il mouse e la tastiera.

non ci sono eventi del grafico per lo scorrimento, MQL non li invia.

Ma si può semplicemente trascinare con il mouse invece di girare la ruota.

 
o_O:

ma si può semplicemente trascinare con il mouse invece di girare la ruota.

Sì, è così che scorro e faccio lo zoom in ZoomPrice.
 

@Roman Konopelko


E il numero 36?


E ha trovato un altro zero divide

 

Posso chiarire (per riprodurre)

è stata aggiunta una curva CurveAdd(arrY, CURVE_HISTOGRAM, "P/L") che ha un array arrY di dimensione 1 o 0 elementi.

e a giudicare da questo costruttore di curve m_xmax=m_xmin=0.

 
o_O:

@Roman Konopelko

E il numero 36?
E ha trovato un altro zero divide

Implementato #36 e corretto l'errore di divisione dello zero.

L'unica cosa è che ValuesFunctionFormat non è cambiato in:

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

E ha implementato metodi per ottenere/impostare un puntatore a una funzione e un puntatore a un oggetto separatamente:

   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;   }
File:
Axis.mqh  12 kb
Curve.mqh  21 kb
Graphic.mqh  86 kb
 

Si prega di sistemare la gestione dei colori in kanvas.

Ora non tiene conto del canale alfa. color invece di uint è ovunque.

A causa di ciò, quando si disegna su tela, ci sono lacune grafiche ovunque (griglie e cornici trasparenti, perché nel colore il canale alfa =0, cioè completamente trasparente)

Solo in alcune funzioni l'hai risolto chiamando costantemente ColorToARGB

ad esempio

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));


Ma perché? Se volete rendere il colore un tipo uint e impostarlo con il canale alfa

Come qui (e in altre funzioni di colore)

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.

Il fatto che la tela stessa abbia COLOR_FORMAT_XRGB_NOALPHA non è importante in questo caso.

 

ha deciso di controllare le correzioni nell'aggiornamento 1502 del terminale

dove sono stati fatti tutti i miglioramenti?

Nessun ValuesFunctionFormat, nessuna correzione di bug zerodevide

LOL

buone vacanze )

 

installato 1510.

ValuesFunctionFormat è lì, è OK.

--

@Roman Konopelko vedi la frase per favore.

Nel codice CGraphic sono solo alcune variabili e funzioni. La sostituzione non è difficile.

Ma elimina il problema della trasparenza nel rendering. Perché in colore canale alfa =100% di trasparenza, che è sbagliato.

 
o_O:

@Roman Konopelko vedi la frase per favore.

Ci sono solo poche variabili e funzioni nel codice CGraphic. La sostituzione non è difficile.

Ma elimina il problema della trasparenza durante il rendering. Infatti, in colore canale alfa = 100% di trasparenza, che è sbagliato.

Nella classe CGraphic ho sostituito il tipo di colore con uint in tutti i punti, come hai suggerito.

Ho anche aggiunto nuovi metodi nella classe CCanvas, che permettono di disegnare primitive con un determinato spessore:
   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);
In linea con l'innovazione di CCanvas, ho esteso le proprietà di 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;         }
Ora potete specificare lo spessore delle linee e lo stile delle sue estremità quando disegnate una curva con linee.

Esempio:
#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();
  }
Risultato:


L'implementazione di questi metodi è basata sull'algoritmo Fast Prefiltered Lines, in cui il grado di levigatezza delle linee è basato sul filtro selezionato. Se necessario, lo descriverò più dettagliatamente.
File:
Canvas.mqh  144 kb
Axis.mqh  12 kb
Curve.mqh  22 kb
Graphic.mqh  86 kb