Prüfung von CGraphic - Fragen und Anregungen - Seite 5

 
o_O:

- Es ist schwierig mit Zoomo. Da es keine Bildlaufleisten gibt. Und um ehrlich zu sein, würde ich nicht wollen, dass sie in dieser Klasse eingeführt werden. Momentan verwendet es nur CCanvas und fragt nicht nach anderen Objekten. Und das ist sehr gut.

Ich plane, den Zoom unabhängig durch Vererbung zu implementieren, Scrollbalken einzufügen und die Skalierung nach Bedarf anzupassen.

Bildlaufleisten sind böse. Sie können ein normales Diagramm ohne Balken drehen - mit Maus und Tastatur.
 
fxsaber:
Bildlaufleisten sind böse. Sie können ein normales Diagramm ohne Balken drehen - mit der Maus und der Tastatur.

Es gibt keine Diagrammereignisse für das Scrollen. MQL sendet sie nicht.

Sie können aber auch einfach mit der Maus ziehen, anstatt das Rad zu drehen.

 
o_O:

aber Sie können einfach mit der Maus ziehen, anstatt das Rad zu drehen.

Ja, so kann ich in ZoomPrice blättern und zoomen.
 

@Roman Konopelko


Was ist mit der Nummer 36?


Und eine weitere Nullteilung gefunden

 

Ich kann Folgendes klarstellen (zur Reproduktion)

eine CurveAdd(arrY, CURVE_HISTOGRAM, "P/L") Kurve wurde hinzugefügt; sie hat ein Array arrY der Größe 1 oder 0 Elemente.

und nach diesem Kurvenkonstruktor zu urteilen ist m_xmax=m_xmin=0.

 
o_O:

@Roman Konopelko

Was ist mit der Nummer 36?
Und eine weitere Nullteilung gefunden

#36 implementiert und den Fehler bei der Nullteilung behoben.

Das einzige Problem ist, dass sich ValuesFunctionFormat nicht geändert hat:

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

Und implementierte Methoden, um einen Zeiger auf eine Funktion und einen Zeiger auf ein Objekt für diese Funktion separat zu erhalten/zu setzen:

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

Bitte korrigieren Sie die Farbbehandlung im Kanvas.

Jetzt wird der Alphakanal nicht mehr berücksichtigt. color statt uint ist überall.

Aus diesem Grund gibt es beim Zeichnen auf der Leinwand überall Diagrammlücken (transparente Gitter und Rahmen, da bei Farbe der Alphakanal =0, d.h. völlig transparent)

Nur in einigen Funktionen haben Sie das Problem durch den ständigen Aufruf von ColorToARGB behoben

z.B..

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


Aber warum? wenn Sie Farbe ein uint-Typ und setzen Sie es mit Alpha-Kanal machen wollen

Wie hier (und in anderen Farbfunktionen)

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.

Die Tatsache, dass die Leinwand selbst COLOR_FORMAT_XRGB_NOALPHA hat, ist in diesem Fall nicht wichtig.

 

beschlossen, die Korrekturen im Terminal-Update 1502 zu überprüfen

wo werden alle Verbesserungen vorgenommen?

Kein ValuesFunctionFormat, keine Fehlerbehebungen zerodevide

LOL

Frohe Feiertage )

 

1510 installiert.

ValuesFunctionFormat vorhanden ist, ist es in Ordnung.

--

@Roman Konopelko siehe Satz bitte.

In CGraphic-Code sind es nur ein paar Variablen und Funktionen. Die Ersetzung ist nicht schwierig.

Aber es beseitigt das Problem der Transparenz beim Rendering. Denn in Farbe ist Alphakanal =100% Transparenz, was falsch ist.

 
o_O:

@Roman Konopelko siehe Satz bitte.

Im CGraphic-Code gibt es nur wenige Variablen und Funktionen. Die Ersetzung ist nicht schwierig.

Aber es beseitigt das Problem der Transparenz beim Rendern. In der Tat, in Farbe Alpha-Kanal = 100% Transparenz, die falsch ist.

In der CGraphic-Klasse habe ich den Farbtyp an allen Stellen durch uint ersetzt, wie Sie vorgeschlagen haben.

Außerdem habe ich neue Methoden in der CCanvas-Klasse hinzugefügt, die es erlauben, Primitive mit einer bestimmten Dicke zu zeichnen:
   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);
Im Einklang mit der Innovation von CCanvas habe ich die Eigenschaften von CCurve erweitert:
   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;         }
Beim Zeichnen einer Kurve mit Linien können Sie nun die Dicke der Linien und den Stil ihrer Enden festlegen.

Beispiel:
#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();
  }
Ergebnis:


Die Umsetzung dieser Methoden basiert auf dem Algorithmus Fast Prefiltered Lines, bei dem der Grad der Linienglättung vom gewählten Filter abhängt. Falls erforderlich, werde ich sie ausführlicher beschreiben.
Dateien:
Canvas.mqh  144 kb
Axis.mqh  12 kb
Curve.mqh  22 kb
Graphic.mqh  86 kb