이게 가능해? - 페이지 8

 
Vitaly Muzichenko # :

포럼 어딘가에 mql4 및 mql5에 대한 전체 작업 코드가 있습니다.

나는 약 1 년 전에 썼습니다.

어떤 주제에서 또는 어떻게 검색합니까?

 
Andrey Sokolov # :

어떤 주제에서, 또는 어떻게 검색 합니까?

다음은 사이트의 기본 검색에 대한 큰 질문입니다. 그렇지 않으면 직접 찾았을 것입니다.

 
아마도 이것이 ?
 
Vasiliy Pushkaryov # :
아마도 이것이 ?

감사해요

 
Andrey Sokolov # :

감사해요

이 스레드의 맨 마지막 게시물에는 편집본과 소스가 있는 버전이 있습니다.
 
Andrey Sokolov # :

안녕하세요, 어떻게했는지 보여주세요?

이 스크롤 막대의 오프셋과 동일한 오프셋을 사용하여 스크롤 막대의 클라이언트 영역에 있는 레이블로 배열의 데이터를 출력합니다. 스크롤 막대로 표준 라이브러리에서 CScrollV를 가져올 수 있습니다. 배열 - 모든 항목(항목)이 있는 목록입니다. 레이블 - 목록의 항목을 표시하기 위한 영역입니다. 뭐가 그리 복잡하지?... 원한다면 OOP와 친한 프로그래머라면 누구나 처리할 수 있다.

 
Mihail Matkovskij # :

이 스크롤 막대의 오프셋과 동일한 오프셋을 사용하여 스크롤 막대의 클라이언트 영역에 있는 레이블로 배열의 데이터를 출력합니다. 스크롤 막대로 표준 라이브러리에서 CScrollV를 가져올 수 있습니다. 배열 - 모든 항목(항목)이 있는 목록입니다. 레이블 - 목록의 항목을 표시하는 영역입니다. 뭐가 그리 복잡하지?... 원한다면 OOP와 친한 프로그래머라면 누구나 처리할 수 있다.

SB의 두루마리를 이해했습니까? 어떤 이유에서인지 클라이언트 패널 없이는 차트에서 별도로 작동하지 못했습니다. 도와드릴까요?

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

"복잡한 그래픽 패널을 만드는 방법과 작동 방식" 기사에 대한 토론

바실리 푸쉬카료프 , 2021.12.21 10:12

패널에 묶이지 않고 차트에서 세로 스크롤 막대를 만들려고 하는데 어떤 이유로 작동하지 않습니다.

예를 들어 체크박스가 있는 경우 이러한 코드는 마우스 클릭에 대한 응답을 제공합니다. 틱이 나타났다가 사라집니다.

 #include <Controls\CheckBox.mqh>
CCheckBox Chbox;
//+------------------------------------------------------------------+
void OnInit ()
{
  Chbox.Create( 0 , "MyCheckBox" , 0 , 20 , 20 , 100 , 40 );
   ChartRedraw ();
}
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam)
{
  Chbox.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+


그리고 수직 스크롤 을 사용하면 마우스 클릭에 반응하지 않습니다.

 #include <Controls\Scrolls.mqh>
CScrollV Scroll;

void OnInit ()
{
  Scroll.Create( 0 , "MyScrollV" , 0 , 20 , 20 , 40 , 200 );
   ChartRedraw ();
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam)
{
  Scroll.OnEvent(id, lparam, dparam, sparam);
}
//+------------------------------------------------------------------+

누가 이 결합된 요소를 차트에서 작동하게 하는 방법을 알고 있습니까?


 
Vasiliy Pushkaryov # :

SB의 두루마리를 이해했습니까? 어떤 이유에서인지 클라이언트 패널 없이는 차트에서 별도로 작동하지 못했습니다. 도와줄 수 있니?


많은 뉘앙스가 있습니다. 체크박스에서 체크박스는 OBJ_BITMAP_LABEL이기 때문에 (시각적으로) 작동하고 그 상태는 터미널에 의해 변경됩니다. 해당 클릭은 OnChartEvent의 Bitmap 레이블 클릭처럼 추적할 수 있습니다. 그러나 표준 라이브러리에는 사용자 이벤트를 기반으로 하는 자체 이벤트 모델이 있습니다. CScrollV 구성 요소가 CAppDialog에 추가된 경우 CArrayObj CWndContainer::m_controls를 반복하여 void CAppDialog::ChartEvent에서 생성됩니다 . 그런 다음 ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS 및 ON_DRAG_END와 같은 이벤트 가 생성됩니다. 귀하의 경우 구성 요소가 CAppDialog에 추가되지 않았으므로 이벤트가 발생하지 않습니다. 이 메커니즘을 우회하고 CAppDialog 없이 강제로 사용자 이벤트를 생성하는 방법에 대해 생각하지 않았습니다. 소스를 더 자세히 분석할 필요가 있습니다.

CWndContainer 클래스를 기반으로 구성 요소를 만들 수 있습니다. 그리고 거기에 요소를 추가합니다. CDialog 및 CAppDialog 창에서와 같이 시각적 요소는 없지만 UI 요소의 올바른 작동에 필요한 모든 메커니즘이 있습니다.
 
Mihail Matkovskij # :

많은 뉘앙스가 있습니다. 체크박스에서 체크박스는 OBJ_BITMAP_LABEL이기 때문에 (시각적으로) 작동하고 그 상태는 터미널에 의해 변경됩니다. 해당 클릭은 OnChartEvent의 Bitmap 레이블 클릭처럼 추적할 수 있습니다. 그러나 표준 라이브러리에는 사용자 이벤트를 기반으로 하는 자체 이벤트 모델이 있습니다. CScrollV 구성 요소가 CAppDialog에 추가된 경우 CArrayObj CWndContainer::m_controls를 반복하여 void CAppDialog::ChartEvent에서 생성됩니다 . 그런 다음 ON_CLICK, ON_DRAG_START, ON_DRAG_PROCESS 및 ON_DRAG_END와 같은 이벤트 가 생성됩니다. 귀하의 경우 구성 요소가 CAppDialog에 추가되지 않았으므로 이벤트가 발생하지 않습니다. 이 메커니즘을 우회하고 CAppDialog 없이 강제로 사용자 이벤트를 생성하는 방법에 대해 생각하지 않았습니다. 소스를 더 자세히 분석할 필요가 있습니다.

CWndContainer 클래스를 기반으로 구성 요소를 만들 수 있습니다. 그리고 거기에 요소를 추가합니다. CDialog 및 CAppDialog 창에서와 같이 시각적 요소는 없지만 UI 요소의 올바른 작동에 필요한 모든 메커니즘이 있습니다.
CAppDialog의 메커니즘을 설명하고 이를 컨테이너에 연결하도록 제안해 주셔서 감사합니다. 시간이 조금 더 있을 것입니다. 실험해 보겠습니다.