패널 및 대화 상자를 만들기 위한 클래스 - 페이지 3

 
Slawa :

증상은 무엇입니까?

Dmitry는 메인 차트 창에서 생성하기 위해 서브 창(indicator_separate_window)에 위치한 인디케이터의 그래픽 인터페이스 가 필요합니다.
 
Dmitry Fedoseev :
그래서

일반적으로 작은 문제도 있었습니다. ) 이 모드, 즉 " 표시기는 하위 창에 있고 그래픽 인터페이스는 주 차트 창에 있음 "은 이전에 내 라이브러리에서 테스트되지 않았으며 이제는 작은 버그가 발견되어 불가능합니다. 닫기 버튼을 클릭하여 인디케이터를 제거하고, 서브 윈도우에 다른 인디케이터를 배치/제거한 후 서브 윈도우 번호를 결정할 때 충돌이 발생하여 경우에 따라 잘못된 이벤트 처리 가 발생했습니다.

이 모드에 대한 라이브러리를 완성할 것이지만 조금 후에 다음 버전 중 하나에서 사용할 수 있게 될 것입니다. 모든 것이 다양한 상황에서 신중하게 테스트되어야 하므로 시간이 좀 걸립니다.

대안으로, 이미 테스트되고 작동하는 것으로부터 다음을 제공할 수 있습니다. 표시기 하위 창에 표시기 패널을 배치하는 방법에는 여러 가지가 있습니다. 동시에 아래 스크린샷과 같이 (1) 표시기 하위 창과 함께 패널을 최소화하거나 (2) 표시기 하위 창을 건드리지 않고 패널만 최소화할 수 있는 여러 모드가 있습니다. 하위 창은 (1) 고정 높이 또는 (2) 수동 크기 조정을 위해 자유로울 수 있습니다. 그러나 이 경우에도 여전히 한 가지 제한 사항이 있습니다. 차트에는 그래픽 인터페이스가 있는 MQL 애플리케이션이 하나만 있을 수 있습니다. 그렇지 않으면 갈등이 발생합니다.

//---

제안된 옵션이 적합하다면 템플릿을 준비하겠습니다. 그렇지 않다면 유감스럽게도 더 이상 도움을 드릴 수 없습니다.

테스트용 아카이브 파일:

파일:
Test.zip  8 kb
 
Slawa :

버그가 없습니다. 증상은 무엇입니까?

방금 시도했습니다. 먼저 하위 창의 표시기입니다. 그런 다음 차트의 패널. 그런 다음 하위 창에 유사한 패널이 표시됩니다. 내가 본 것은 첫 번째 하위 창에 SimplePanel2라는 글자뿐이었습니다. 하지만 작업에는 영향을 미치지 않습니다. 모든 버튼이 올바르게 눌려져 있음

SimplePanel2와 SimplePanel의 유일한 차이점은 indicator_chart_window 속성입니다.

차트 창에 대해 SimplePanel을 리메이크하려고 시도했지만 잘 작동합니다. 하위 창과 차트에서, 그리고 하위 창에 일반 표시기가 있을 때 둘 다 작동합니다. 그러나 두 SimplePanels(가격 차트 및 하위 창)에서 표준 표시기가 하위 창에서 시작될 때 가격 차트에서 버그가 있는 패널 - 창이 축소되고 확장하려고 하면 다음 동안 펼쳐집니다. 순간 또 무너진다.

하위 창에 표준 표시기를 추가할 때 내 버그가 있습니다. 포함된 파일의 코드는 다음과 같습니다.

#include <Controls\Dialog.mqh>
#include <Controls\Edit.mqh>
#include <Controls\ComboBox.mqh>
#include <Controls\Label.mqh>

#define INDENT 11
#define LINE   20

class CPanTest: public CAppDialog{
   protected :
      CComboBox         m_cmb_main;
      CEdit             m_edit1;
       void OnMainEvent(){
      }    
       void OnControlEvent(){
      }        
   public :
       bool Create(){
         if (!CAppDialog::Create( 0 , "name" , 0 , 20 , 20 , 200 , 300 )){
             return ( false );  
         }
         return ( true );    
      }  
       bool OnEvent( const int id, const long &lparam, const double &dparam, const string &sparam);
};

EVENT_MAP_BEGIN(CPanTest)
   ON_EVENT(ON_CHANGE,m_cmb_main,OnMainEvent)
   ON_EVENT(ON_END_EDIT,m_edit1,OnControlEvent)
EVENT_MAP_END(CAppDialog)

지시자:

#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots    0

#include <CPanTest.mqh>

CPanTest * pan;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit (){
   pan= new CPanTest();
   if (!pan.Create()){  
       return ( INIT_FAILED );
   }
   if (!pan.Run()){
     return ( INIT_FAILED );  
   }  
   return ( INIT_SUCCEEDED );
}

void OnDeinit ( const int reason){
   pan.Destroy();
   delete (pan);
}  

int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   return (rates_total);
}

void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
   pan.ChartEvent(id,lparam,dparam,sparam);
}
 
Anatoli Kazharski :

일반적으로 작은 문제도 있었습니다. ) 이 모드, 즉 " 표시기는 하위 창에 있고 그래픽 인터페이스는 주 차트 창에 있음 "은 이전에 내 라이브러리에서 테스트되지 않았으며 이제는 작은 버그가 발견되어 불가능합니다. 닫기 버튼을 클릭하여 표시기를 제거하고 하위 창에 다른 표시기를 배치/제거한 후 하위 창 번호를 결정할 때 충돌이 발생하여 경우에 따라 잘못된 이벤트 처리 가 발생했습니다.

이 모드에 대한 라이브러리를 완성할 것이지만 조금 후에 다음 버전 중 하나에서 사용할 수 있게 될 것입니다. 모든 것이 다양한 상황에서 신중하게 테스트되어야 하므로 시간이 좀 걸립니다.

대안으로, 이미 테스트되고 작동하는 것으로부터 다음을 제공할 수 있습니다. 표시기 하위 창에 표시기 패널을 배치하는 방법에는 여러 가지가 있습니다. 동시에 아래 스크린샷과 같이 (1) 표시기 하위 창과 함께 패널을 최소화하거나 (2) 표시기 하위 창을 건드리지 않고 패널만 최소화할 수 있는 여러 모드가 있습니다. 하위 창은 (1) 고정 높이 또는 (2) 수동 크기 조정을 위해 자유로울 수 있습니다. 그러나 이 경우에도 여전히 한 가지 제한 사항이 있습니다. 차트에는 그래픽 인터페이스가 있는 MQL 애플리케이션이 하나만 있을 수 있습니다. 그렇지 않으면 갈등이 발생합니다.

//---

제안된 옵션이 적합하다면 템플릿을 준비하겠습니다. 그렇지 않다면 유감스럽게도 더 이상 도움을 드릴 수 없습니다.

테스트용 아카이브 파일:

상자에 넣어 두십시오. 하위 창에 자유롭게 매달려 있고 하위 창과 별도로 접혀 있고 하위 창의 크기를 조정할 수 있습니다.
 
Dmitry Fedoseev :
상자에 넣어 두십시오. 서브윈도우에 자유자재로 매달린 것, 서브윈도우와 독립적으로 접혀서 서브윈도우의 크기를 조절하는 것이 유행이었다.

템플릿이 포함된 아카이브 파일입니다. 질문이 있으면 답변하겠습니다.

파일:
Test.zip  4 kb
 
Anatoli Kazharski :

템플릿이 포함된 아카이브 파일입니다. 질문이 있으면 답변하겠습니다.

사고가 발생했습니다:

 
Dmitry Fedoseev :

사고가 발생했습니다:

그리고 이미 다음 버전에 대한 변경 사항이 있습니다. 모든 것을 함께 가져오고 있습니다. )

지난 기사의 버전에 맞게 수정했습니다. 한 번 더 시도합니다.

파일:
Test.zip  4 kb
 
Anatoli Kazharski :

그리고 이미 다음 버전에 대한 변경 사항이 있습니다. 나는 모든 것을 조화롭게 만듭니다. )

지난 기사의 버전에 맞게 수정했습니다. 한 번 더 시도합니다.

음...조금만 더... 이제 자원 부족에 대한 오류가 많이 발생합니다.
 
Dmitry Fedoseev :
음...조금만 더... 이제 자원 부족에 대한 오류가 많이 발생합니다.
라이브러리에서 사용된 모든 리소스는 시리즈의 마지막 기사에 첨부되어 있습니다. 로그의 메시지는 무엇입니까?
 
Anatoli Kazharski :
라이브러리에서 사용된 모든 리소스는 시리즈의 마지막 기사에 첨부되어 있습니다. 로그의 메시지는 무엇입니까?
리소스 부족에 대한 메시지.
사유: