CGraphic 테스트 - 질문 및 제안 - 페이지 5

 
o_O :

- 주모모는 어렵다. 스크롤바가 없기 때문입니다. 그리고 솔직히 말해서, 나는 그들이 이 수업에 소개되는 것을 원하지 않습니다. 현재 CCanvas만 사용하고 다른 개체를 요구하지 않습니다. 그리고 이것은 매우 좋습니다.

나는 상속에 의해 자체적으로 확대/축소를 구현할 계획이며 스크롤 막대를 넣고 필요한 만큼 크기를 조정합니다.

스크롤바 는 악입니다. 마우스와 키보드를 사용하여 밴드 없이 일반 차트를 회전합니다.
 
fxsaber :
스크롤바는 악입니다. 마우스와 키보드를 사용하여 밴드 없이 일반 차트를 회전합니다.

스크롤할 차트 이벤트가 없습니다. MQL은 그것들을 보내지 않습니다.

그러나 드래그 앤 드롭으로 마우스를 드래그하고 휠을 돌리지 않고 쉽게 드래그할 수 있습니다.

 
o_O :

그러나 드래그 앤 드롭으로 마우스를 드래그하고 휠을 돌리지 않고 쉽게 드래그할 수 있습니다.

예, ZoomPrice를 스크롤하고 확대하겠습니다.
 

@로만 코노펠코


#36 은 어떻습니까?


그리고 또 다른 영분할을 찾았습니다.

 

(재현하기 위해) 해명할 수 있다

CurveAdd(arrY, CURVE_HISTOGRAM, "P/L"); 배열 arrY에는 1개 또는 0개의 요소가 있습니다.

그런 창녀의 생성자로 판단 m_xmax=m_xmin=0. 왜 그것이 더 제로 디바이드 였습니까?

 
o_O :

@로만 코노펠코

#36 은 어떻습니까?
그리고 또 다른 영분할을 찾았습니다.

#36 에 설명된 것을 구현하고 영분할 오류를 수정했습니다.

ValuesFunctionFormat이 변경되지 않은 유일한 것:

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

그리고 함수에 대한 포인터와 그에 대한 개체에 대한 포인터를 별도로 가져오거나 설정하는 메서드를 구현했습니다.

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

캔버스의 색상으로 작업을 수정하십시오.

이제 알파 채널을 고려하지 않습니다. 모든 곳 에서 uint 대신 색상 을 지정합니다.

이 때문에 캔버스에 그릴 때 차트 간격이 도처에 있습니다(색상에서 알파 채널 = 0, 즉 완전히 투명하기 때문에 투명한 격자 및 프레임)

일부 기능에서만 ColorToARGB를 지속적으로 호출하여 수정했습니다.

예를 들어

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


하지만 왜? 색상을 단위 유형으로 만들고 알파 채널로 즉시 설정해야 하는 경우

여기와 같이(다른 색상 설정 기능에서도)

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

----

추신.

이 경우 캔버스 자체에 COLOR_FORMAT_XRGB_NOALPHA가 있다는 사실은 중요하지 않습니다.

 

터미널 업데이트 1502에서 수정 사항을 확인하기로 결정

그리고 모든 개선 사항은 어디에 있습니까??

ValuesFunctionFormat도 수정된 zerodevide 버그도 아닙니다.

ㅋㅋㅋ

와)

 

1510을 설치했습니다.

ValuesFunctionFormat은 입니다. 그에게는 모든 것이 괜찮습니다.

--

@Roman Konopelko 는 문장 을 참조하십시오.

CGraphic 코드에서 이것들은 단지 몇 가지 변수와 함수일 뿐입니다. 교체는 어렵지 않습니다.

그러나 렌더링할 때 투명도 문제를 제거합니다. 실제로, 색상 알파 채널에서 = 100% 투명도입니다. 뭐가 잘못 되었 니.

 
o_O :

@Roman Konopelko 는 문장 을 참조하십시오.

CGraphic 코드에서 이것들은 단지 몇 가지 변수와 함수일 뿐입니다. 교체는 어렵지 않습니다.

그러나 렌더링할 때 투명도 문제를 제거합니다. 실제로, 색상 알파 채널에서 = 100% 투명도입니다. 뭐가 잘못 되었 니.

CGraphic 클래스에서 요청한 대로 모든 위치에서 색상 유형을 uint로 대체했습니다.

또한 CCanvas 클래스에 주어진 두께로 기본 요소를 그릴 수 있는 새로운 메서드를 추가했습니다.
   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);
혁신에 따라 CCurve는 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;         }
이제 선으로 곡선을 그릴 때 선의 굵기와 끝 부분의 스타일을 설정할 수 있습니다.

예시:
#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();
  }
결과:


이러한 방법의 구현은 선의 부드러움 정도가 선택한 필터를 기반으로 하는 Fast Prefiltered Lines 알고리즘을 기반으로 합니다. 필요하시면 더 자세히 쓰겠습니다.
파일:
Canvas.mqh  144 kb
Axis.mqh  12 kb
Curve.mqh  22 kb
Graphic.mqh  86 kb
사유: