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

 
Artyom Trishkin :

일반적으로 나는 당신에게 설명하는 것에 지쳤습니다. 원하는 사람 - 그는 이해할 것입니다.

이것은 정상적인 현상이므로 양해해 주셔서 감사합니다. 이제 코드의 오류를 분석할 때 이를 알고 고려하겠습니다. 그러나 오류를 재설정하고 싶습니다. 이것이 불가능할 때와 오류가 아닌 기능이라고 부를 때 다른 것입니다. 따라서 기능이 기존 전통에 의해 설명될 때입니다.

 
Aleksey Vyazmikin :


이 코드를 가리킴 - D.PointsFill( false );

오류는 X 및 Y 배열의 크기가 다르기 때문에 발생했습니다. 로그에 이에 대해 기록할 수 없었던 이유는 미스터리였습니다.

 
Aleksey Vyazmikin :

이것은 정상적인 현상이므로 양해해 주셔서 감사합니다. 이제 코드의 오류를 분석할 때 이를 알고 고려하겠습니다. 그러나 오류를 재설정하고 싶습니다. 이것이 불가능할 때와 오류가 아닌 기능이라고 부를 때 다른 것입니다. 따라서 기능이 기존 전통에 의해 설명될 때입니다.

한 가지만 기억하십시오. _LastError에는 실제 오류 코드뿐만 아니라 함수 작동에 대한 메시지 코드도 포함되어 있습니다. 논의 중인 경우에는 개체가 없다는 사실의 코드가 그냥 입력되어 있습니다. 그리고 그것은 모두 특정 이름을 가진 개체가 요청되는 컨텍스트에 따라 다릅니다. 개체를 수정하는 경우 이러한 코드는 이해할 필요가 있음을 나타냅니다. 내 개체가 갑자기 사라진 이유는 ..이고 새 개체를 만들려면 그러한 개체가 없다는 코드가 표시됩니다. 그 반대입니다. 모든 것이 정상이며 만들 수 있습니다.

그리고 규칙을 만드십시오. 함수의 반환 결과를 확인하고 실제 오류가 반환되면 그때도 오류 코드를 분석해야 합니다.

귀하의 예에서는 캔버스 객체가 성공적으로 생성 되었다는 사실로 스스로를 속이고 어딘가에 오류가 있다고 생각합니다.

 
Artyom Trishkin :

한 가지만 기억하십시오. _LastError에는 실제 오류 코드뿐만 아니라 함수 작동에 대한 메시지 코드도 포함되어 있습니다. 논의 중인 경우에는 개체가 없다는 사실의 코드가 그냥 입력되어 있습니다. 그리고 그것은 모두 특정 이름을 가진 개체가 요청되는 컨텍스트에 따라 다릅니다. 개체를 수정하는 경우 이러한 코드는 이해할 필요가 있음을 나타냅니다. 내 개체가 갑자기 사라진 이유는 ..이고 새 개체를 만들려면 그러한 개체가 없다는 코드가 표시됩니다. 그 반대입니다. 모든 것이 정상이며 만들 수 있습니다.

그리고 규칙을 만드십시오. 함수의 반환 결과를 확인하고 실제 오류가 반환되면 그때도 오류 코드를 분석해야 합니다.

귀하의 예에서는 캔버스 객체가 성공적으로 생성 되었다는 사실로 스스로를 속이고 어딘가에 오류가 있다고 생각합니다.

좋아요, 오류를 분석할 때 설명한 방식으로 생각하려고 합니다. 고맙습니다.

범례의 크기를 변경하고 생성된 곡선에 대한 정보가 이 범례에 배치되는 것을 금지하는 것에 대해 관심 없이 남겨진 이 스레드에서 내 질문에 대답할 수 있습니까?

 
Aleksey Vyazmikin :

좋아요, 오류를 분석할 때 설명한 방식으로 생각하려고 합니다. 고맙습니다.

범례의 크기를 변경하고 생성된 곡선에 대한 정보가 이 범례에 배치되는 것을 금지하는 것에 대해 관심 없이 남겨진 이 스레드에서 내 질문에 대답할 수 있습니까?

할 수 없습니다. 시간이 걸립니다. 안타깝게도 존재하지 않습니다. 죄송합니다.

 
Aleksey Vyazmikin :

좋아요, 오류를 분석할 때 설명한 방식으로 생각하려고 합니다. 고맙습니다.

  1. 오류 코드 재설정 - ResetLastError()
  2. 함수라고 함
  3. 그녀가 무엇을 되찾았는지 확인하십시오.
  4. 정확히 오류를 반환한 경우(함수의 잘못된 실행 코드는 특정 함수에 대한 도움말 참조)
    1. GetLastError()를 사용하여 오류가 정확히 무엇인지 지정하십시오.
    2. 프로그램에서 그렇지 않은 경우 코드를 참조하십시오. 또는
    3. 프로그램의 논리에서 제공하는 경우 이러한 오류에 대해 프로그램 논리에서 반응합니다(예: 잘못된 중지).
    4. ...
    5. ...
    6. 등. ...
  5. 오류가 아닌 질문에 대한 간단한 답변을 반환하는 경우
    1. 프로그램 논리에 내재된 작업을 수행하고 마지막 오류 코드는 확인하지 마십시오. 오류에 대한 설명이 아니라 기능 요청에 대한 답변만 있기 때문입니다.
    2. 글쎄, 내가 즉시 생각하지 못하는 다른 것이 ...
  6. 즐기다


 
Artyom Trishkin :

할 수 없습니다. 시간이 걸립니다. 안타깝게도 존재하지 않습니다. 죄송합니다.

이해했다. 아시는 분이나 시간 있는 분 기다리겠습니다. 그러나 이것은 도서관의 일반적인 수단으로는 할 수 없다는 것을 이해합니다.

 

CGraphic::CreateAxes 오류:

       //--- draw mark and set y value
       int yi_width=m_canvas.TextWidth(yvalue);
      m_canvas. TextOut (m_left-yi_width-m_mark_size-m_gap,m_yc[i]-yh/ 2 ,yvalue, ColorToARGB ( clrBlack ) , TA_LEFT );
       if (m_mark_size> 0.0 )
         m_canvas.LineHorizontal(x1,x2,m_yc[i], ColorToARGB ( clrBlack ) );
...
       //--- draw mark and set y value
      m_canvas. TextOut (m_xc[i]-xw/ 2 ,y2+m_gap,xvalue, ColorToARGB ( clrBlack ) );
       if (m_mark_size> 0.0 )
         m_canvas.LineVertical(m_xc[i],y1,y2, ColorToARGB ( clrBlack ) );

선택된 것 대신에 각각 m_y.Color()m_x.Color( ) 가 있어야 합니다.

CGraphic에서 상속하고 CreateAxes(다행히도 가상)를 재정의하면 해결됩니다.

 

동일한 CGraphic::CreateAxes 는 독립적으로 설정할 수 없는 m_grid.clr_frame 을 사용합니다 .

 void CGraphic::CreateAxes( void )
  {
...
//--- create frame
   m_canvas.Rectangle(m_left,m_up,m_width-m_right,m_height-m_down, m_grid.clr_frame );

값을 설정하는 방법을 추가해야 합니다.

 void               GridFrameColor( const uint clr)        { m_grid.clr_frame=clr;       }
 

차트에 수평선이 그려 지지 않는 이유는 무엇입니까? 좌표가 int이고 double이 아닌 이유는 무엇입니까?

 //+------------------------------------------------------------------+
//|                                                   Test_CLine.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property script_show_inputs
#include <Graphics\Graphic.mqh>
#include <Graphics\Axis.mqh>

input int pix_X= 800 ; //Ширина графика баланса
input int pix_Y= 400 ; //Высота графика баланса
input bool Use_Koef= true ; //Использовать коэфициент для установки ширины графика Parallel
input double Point_Kx= 0.5 ; //Коэффициент ширины графика Parallel
input int Point_K= 12 ; //Размер шрифта
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   Save_Graf_P();   
  }
//+------------------------------------------------------------------+
void Save_Graf_P()
{

   int pixx_Y=pix_Y;
   int pixx_X=pix_X;

//--- отключим показ ценового графика
   ChartSetInteger ( 0 , CHART_SHOW , false );

   long chart= 0 ;
   string NameGraf= "Test Line" ;

   CGraphic graphicL;

   if ( ObjectFind (chart,NameGraf)< 0 )
   {
      graphicL.Create(chart,NameGraf, 0 , 0 , 0 ,pixx_X,pixx_Y); //Создает графический ресурс, привязанный к объекту чарта
   }
   graphicL.Attach(chart,NameGraf); //Получить/создать  графический ресурс и привязать его к экземпляру класса CGraphic
   graphicL.BackgroundMain(NameGraf); //Получить/установить текст заголовка графика
   graphicL.BackgroundMainSize( 16 ); //Получить/установить размер шрифта заголовка
   graphicL.HistoryNameSize(Point_K); //Устанавливает размер шрифта имени кривой
   graphicL.HistorySymbolSize(Point_K); //Получить/установить размер символов условных обозначений
   graphicL.LineAdd(- 5 , 10 , 5 , 10 , ColorToARGB (Blue, 255 ),POINT_HORIZONTAL_DASH); //Создает и добавляет линию на график
   graphicL.CurvePlotAll(); //Отрисовывает все ранее созданные кривые
   graphicL.Update(); //Отображает на экране сделанные изменения
   ResetLastError ();

   Sleep ( 3000 );
   graphicL.Destroy(); //Удаляет с чарта график и уничтожает графический ресурс.
   ChartSetInteger ( 0 , CHART_SHOW , true );
}
사유: