CGraphic'i test etme - sorular ve öneriler - sayfa 5

 
o_O :

- Zumomo zor. Kaydırma çubuğu olmadığından. Ve dürüst olmak gerekirse, onların bu sınıfa dahil edilmesini istemezdim. Şu anda yalnızca CCanvas kullanıyor ve başka nesneler istemiyor. Ve bu çok iyi.

Yakınlaştırmayı kalıtım yoluyla kendi başıma uygulamayı planlıyorum, kaydırma çubukları koyacağım ve gerektiği gibi ölçeklendireceğim.

Kaydırma çubukları kötüdür. Normal grafiği herhangi bir bant olmadan döndürün - fare ve klavye ile.
 
fxsaber :
Kaydırma çubukları kötüdür. Normal grafiği herhangi bir bant olmadan döndürün - fare ve klavye ile.

kaydırılacak grafik olayı yok. MQL onları göndermez.

ancak sürükle bırak fareyi kolayca sürükleyip tekerleği döndürmeyebilirsiniz.

 
o_O :

ancak sürükle bırak fareyi kolayca sürükleyip tekerleği döndürmeyebilirsiniz.

Evet, ZoomPrice içinde kaydırıp yakınlaştıracağım.
 

@Roman Konopelko


Peki ya #36 ?


Ve başka bir sıfır bölme buldum

 

Açıklama yapabilirim (çoğaltmak için)

CurveAdd(dizi, CURVE_HISTOGRAM, "P/L"); hangi dizide 1 veya 0 eleman var?

ve böyle bir fahişenin yapıcısı tarafından yargılanarak m_xmax=m_xmin=0. neden daha fazla sıfır bölünme oldu

 
o_O :

@Roman Konopelko

Peki ya #36 ?
Ve başka bir sıfır bölme buldum

#36'da açıklananları uyguladı ve sıfır bölme hatasını düzeltti.

ValuesFunctionFormat'ın değişmediği tek şey:

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

Ve bir işleve bir işaretçi ve bunun için bir nesneye bir işaretçi alma/ayarlama yöntemlerini ayrı ayrı uyguladım:

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

Lütfen tuvaldeki renkle çalışmayı düzeltin.

şimdi alfa kanalını hesaba katmıyor. her yerde uint yerine renk .

Bu nedenle, tuval üzerine çizim yaparken, grafik boşlukları her yerdedir (saydam ızgaralar ve çerçeveler, çünkü renkli alfa kanalı = 0, yani tamamen şeffaftır)

Sadece bazı işlevlerde sürekli ColorToARGB'yi arayarak düzeltebildiniz

Örneğin

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


Ama neden? rengi bir uint türü yapmanız ve hemen bir alfa kanalıyla ayarlamanız gerekiyorsa

Buradaki gibi (ve diğer renk ayar işlevlerinde)

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

----

not.

Tuvalin kendisinin COLOR_FORMAT_XRGB_NOALPHA'ya sahip olması bu durumda önemli değildir.

 

1502 terminal güncellemesindeki düzeltmeleri kontrol etmeye karar verdi

ve tüm iyileştirmeler nerede yapıldı?

ne ValuesFunctionFormat ne de sabit zerodevide hataları

çok komik

gelmesi ile)

 

1510 kuruldu.

ValuesFunctionFormat'tır. Onunla her şey yolunda.

--

@Roman Konopelko 47. cümleye lütfen.

CGraphic kodunda bunlar sadece birkaç değişken ve fonksiyondur. Değiştirmek zor değil.

Ancak render sırasında şeffaflık sorununu ortadan kaldırır. Gerçekten de, renkli alfa kanalında = %100 şeffaflık. Yanlış olan ne.

 
o_O :

@Roman Konopelko 47. cümleye lütfen.

CGraphic kodunda bunlar sadece birkaç değişken ve fonksiyondur. Değiştirmek zor değil.

Ancak render sırasında şeffaflık sorununu ortadan kaldırır. Gerçekten de, renkli alfa kanalında = %100 şeffaflık. Yanlış olan ne.

CGraphic sınıfında istediğiniz gibi renk tipini her yerde uint ile değiştirdim.

Ayrıca CCanvas sınıfına, belirli bir kalınlıkta ilkelleri çizmenize izin veren yeni yöntemler ekledim:
   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);
Yeniliğe uygun olarak CCanvas, CCurve özelliklerini genişletti:
   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;         }
Artık çizgilerle bir eğri çizerken çizgilerin kalınlığını ve uçlarının stilini ayarlayabilirsiniz.

Misal:
#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();
  }
Sonuç:


Bu yöntemlerin uygulanması, hatların düzgünlük derecesinin seçilen filtreye bağlı olduğu Hızlı Ön Filtrelenmiş Hatlar algoritmasına dayanmaktadır. İhtiyaç olursa daha detaylı yazarım.
Dosyalar:
Canvas.mqh  144 kb
Axis.mqh  12 kb
Curve.mqh  22 kb
Graphic.mqh  86 kb