안녕하세요 프로그래머입니다. 다시 한번 여러분의 도움을 요청합니다. 단일 값을 가져와야 하는 표준 지표가 있습니다. 표시기가 연결되어 해당 값의 배열을 버퍼에 복사한 것 같습니다. double buf_atr[] ArrayPrint (buf_atr) 로그에 대한 출력은 다음 값을 보여줍니다.
안녕하세요 프로그래머입니다. 다시 한번 여러분의 도움을 요청합니다. 단일 값을 가져와야 하는 표준 지표가 있습니다. 표시기가 연결되어 해당 값의 배열을 버퍼에 복사한 것 같습니다. double buf_atr[] ArrayPrint(buf_atr) 로그에 대한 출력은 다음 값을 보여줍니다.
(
double &value[], // Buffer of valuesdouble & clr[], // Color bufferconstbool asSeries, // Numbering flag as in time seriesconststring label, // Series nameconstcolor & colors[], // Line colors )
Peter Vorobyev : 내 자신의 클래스 CAppDialogPTR 를 만들었습니다. CAppDialog의 후계자입니다. CDialog 클래스에서 m_background, m_caption ... 개체를 올바르게 재정의하여 내 클래스에서 액세스하는 방법을 알려주세요.
Dialog.mqh
안 돼요. 이러한 개체는 private 키워드로 표시된 대로 클래스에서 직접 수정되지 않도록 보호됩니다. 당신은 그들과 직접 일할 수 없습니다. 이러한 필드와 함께 작동 하는 CDialog 클래스 메서드를 사용하십시오.
CAppDialogPTR 클래스의 생성된 인스턴스에는 액세스할 수 있는 컨트롤(클래스 CWndContainer -> CWnd* Control(const ind) const { return(dynamic_cast<CWnd *>(m_controls.At(ind))); } )이 있습니다 . m_background, m_caption
1) 생성된 객체에 접근(메모리 참조)을 위한 구문은 무엇입니까?:
m_controls 컬렉션도 닫혀 있고 어떤 인덱스가 하나 또는 다른 컨트롤에 해당하는지 알 수 없기 때문에 여전히 m_controls 컬렉션을 통해 콘트랄에 액세스할 수 없습니다. 여기서 아이디어는 CDialog 가 구성하는 요소에 대한 액세스를 닫지만 사용자가 일관된 방식으로 주요 속성을 관리할 수 있도록 한다는 것입니다. 예를 들어 m_caption에 액세스하여 해당 텍스트를 직접 변경할 수 없지만 Caption(const string text) 메서드를 통해 텍스트를 변경할 수 있습니다.
당신이 원하는 것은 기본적으로 해킹입니다. 원칙적으로 MQ의 공예품을 사용할 때 이런 저런 해킹을 하고 싶은 욕구가 있으므로 여기에서 당신은 혼자가 아닙니다. 아마도 가장 쉬운 방법은 lib를 별도의 디렉토리에 복사하고 private 섹션을 protected로 이동하는 것입니다. 조잡하고 어리석은 일이지만 효과가 있을 것입니다. 다른 옵션은 거의 - 너무 어려운 코드입니다.
m_controls 컬렉션도 닫혀 있고 어떤 인덱스가 하나 또는 다른 컨트롤에 해당하는지 알 수 없기 때문에 여전히 m_controls 컬렉션을 통해 contral에 액세스할 수 없습니다. 여기서 아이디어는 CDialog가 구성하는 요소에 대한 액세스를 닫지만 사용자가 일관된 방식으로 주요 속성을 관리할 수 있도록 한다는 것입니다. 예를 들어 m_caption에 액세스하여 해당 텍스트를 직접 변경할 수 없지만 Caption(const string text) 메서드를 통해 텍스트를 변경할 수 있습니다.
당신이 원하는 것은 기본적으로 해킹입니다. 원칙적으로 MQ의 공예품을 사용할 때 이런 저런 해킹을 하고 싶은 욕구가 있으므로 여기에서 당신은 혼자가 아닙니다. 아마도 가장 쉬운 방법은 lib를 별도의 디렉토리에 복사하고 private 섹션을 protected로 이동하는 것입니다. 조잡하고 어리석은 일이지만 효과가 있을 것입니다. 다른 옵션은 거의 - 너무 어려운 코드입니다.
MQ 소스를 변경하고 메서드를 공개로 가져옵니다. 이것이 우리의 메서드가 아니라는 것이 분명합니다. :) 그러나 패널 전역 변수 를 선언한 후 Caption 속성에 액세스할 수 있습니다.
CAppDialogPTR panel;
int total=panel.ControlsTotal();
for ( int i= 0 ;i<total;i++)
{
CWnd *_control=panel.Control(i);
string _control_name=_control.Name();
if ( StringFind (_control_name, "Caption" )> 0 )
{
CEdit *_caption=(CEdit*)_control;
_caption.Text( "test" ;
_caption.Color( clrRed );
ChartRedraw ();
break ;
}
}
그러나 이 코드는 보기에 좋지 않을 뿐만 아니라 CAppDialogPTR 클래스 뒤에 있습니다.CAppDialogPTR 클래스내에서 어떻게 동일한 작업을 수행할 수 있습니까?
배열의 두 번째 및 후속 차원은 동적일 수 없습니다. 따라서 배열이 선언되는 방식, 예를 들어 int Mas[][7]; 그래서 당신은 그것을 수락해야합니다 MyFun(int &Mas[][7])
고맙습니다. 내 두뇌가 사라졌습니다.
안녕하세요 프로그래머입니다. 다시 한번 여러분의 도움을 요청합니다. 단일 값을 가져와야 하는 표준 지표가 있습니다. 표시기가 연결되어 해당 값의 배열을 버퍼에 복사한 것 같습니다. double buf_atr[] ArrayPrint (buf_atr) 로그에 대한 출력은 다음 값을 보여줍니다.
0.00032 0.00037 0.00039 0.00039 0.00041 0.00039 0.00037 0.00036 0.00034 0.00035 0.00035 0.00035 0.00035
값이 0.00030인 배열의 셀에 어떻게 적용합니까 ??이 값은 현재 캔들 0이 아니라 이전에 이미 형성된 1에서 얻습니다.
모든 것이 작동하는 것 같지만 추가 작업을 위해 배열 셀에 액세스하는 방법을 모르겠습니다.(
안녕하세요 프로그래머입니다. 다시 한번 여러분의 도움을 요청합니다. 단일 값을 가져와야 하는 표준 지표가 있습니다. 표시기가 연결되어 해당 값의 배열을 버퍼에 복사한 것 같습니다. double buf_atr[] ArrayPrint(buf_atr) 로그에 대한 출력은 다음 값을 보여줍니다.
0.00032 0.00037 0.00039 0.00039 0.00041 0.00039 0.00037 0.00036 0.00034 0.00035 0.00035 0.00035 0.00035
값이 0.00030인 배열의 셀에 어떻게 적용합니까 ??이 값은 현재 캔들 0이 아니라 이전에 이미 형성된 1에서 얻습니다.
모든 것이 작동하는 것 같지만 추가 작업을 위해 배열 셀에 액세스하는 방법을 모르겠습니다.(
만세!!! 내가 시도하지 않은 buf_atr[buf_size- 1 ]을 참조해야 합니다. 너무 감사 합니다 Vitaly Muzichenko
mql 스타일, 배열 참조가 필요합니까?
Dialog.mqh
내 자신의 클래스 CAppDialogPTR 를 만들었습니다. CAppDialog의 후계자입니다. CDialog 클래스에서 m_background, m_caption ... 개체를 올바르게 재정의하여 내 클래스에서 액세스하는 방법을 알려주세요.
Dialog.mqh
안 돼요. 이러한 개체는 private 키워드로 표시된 대로 클래스에서 직접 수정되지 않도록 보호됩니다. 당신은 그들과 직접 일할 수 없습니다. 이러한 필드와 함께 작동 하는 CDialog 클래스 메서드를 사용하십시오.
안 돼요. 이러한 개체는 private 키워드로 표시된 대로 클래스에서 직접 수정되지 않도록 보호됩니다. 당신은 그들과 직접 일할 수 없습니다. 이러한 필드와 함께 작동 하는 CDialog 클래스 메서드를 사용하십시오.
의 말을하자.
CAppDialogPTR 클래스의 생성된 인스턴스에는 액세스할 수 있는 컨트롤(클래스 CWndContainer -> CWnd* Control(const ind) const { return(dynamic_cast<CWnd *>(m_controls.At(ind))); } )이 있습니다 . m_background, m_caption
1) 생성된 객체에 접근(메모리 참조)을 위한 구문은 무엇입니까?:
"CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2);"
인정하자.
CAppDialogPTR 클래스의 생성된 인스턴스에는 액세스할 수 있는 컨트롤(클래스 CWndContainer -> CWnd* Control(const ind) const { return(dynamic_cast<CWnd *>(m_controls.At(ind))); } )이 있습니다 . m_background, m_caption
1) 생성된 객체에 접근(메모리 참조)을 위한 구문은 무엇입니까?:
m_controls 컬렉션도 닫혀 있고 어떤 인덱스가 하나 또는 다른 컨트롤에 해당하는지 알 수 없기 때문에 여전히 m_controls 컬렉션을 통해 콘트랄에 액세스할 수 없습니다. 여기서 아이디어는 CDialog 가 구성하는 요소에 대한 액세스를 닫지만 사용자가 일관된 방식으로 주요 속성을 관리할 수 있도록 한다는 것입니다. 예를 들어 m_caption에 액세스하여 해당 텍스트를 직접 변경할 수 없지만 Caption(const string text) 메서드를 통해 텍스트를 변경할 수 있습니다.
당신이 원하는 것은 기본적으로 해킹입니다. 원칙적으로 MQ의 공예품을 사용할 때 이런 저런 해킹을 하고 싶은 욕구가 있으므로 여기에서 당신은 혼자가 아닙니다. 아마도 가장 쉬운 방법은 lib를 별도의 디렉토리에 복사하고 private 섹션을 protected로 이동하는 것입니다. 조잡하고 어리석은 일이지만 효과가 있을 것입니다. 다른 옵션은 거의 - 너무 어려운 코드입니다.
m_controls 컬렉션도 닫혀 있고 어떤 인덱스가 하나 또는 다른 컨트롤에 해당하는지 알 수 없기 때문에 여전히 m_controls 컬렉션을 통해 contral에 액세스할 수 없습니다. 여기서 아이디어는 CDialog가 구성하는 요소에 대한 액세스를 닫지만 사용자가 일관된 방식으로 주요 속성을 관리할 수 있도록 한다는 것입니다. 예를 들어 m_caption에 액세스하여 해당 텍스트를 직접 변경할 수 없지만 Caption(const string text) 메서드를 통해 텍스트를 변경할 수 있습니다.
당신이 원하는 것은 기본적으로 해킹입니다. 원칙적으로 MQ의 공예품을 사용할 때 이런 저런 해킹을 하고 싶은 욕구가 있으므로 여기에서 당신은 혼자가 아닙니다. 아마도 가장 쉬운 방법은 lib를 별도의 디렉토리에 복사하고 private 섹션을 protected로 이동하는 것입니다. 조잡하고 어리석은 일이지만 효과가 있을 것입니다. 다른 옵션은 거의 - 너무 어려운 코드입니다.
MQ 소스를 변경하고 메서드를 공개로 가져옵니다. 이것이 우리의 메서드가 아니라는 것이 분명합니다. :)
그러나 패널 전역 변수 를 선언한 후 Caption 속성에 액세스할 수 있습니다.
그러나 이 코드는 보기에 좋지 않을 뿐만 아니라 CAppDialogPTR 클래스 뒤에 있습니다. CAppDialogPTR 클래스 내에서 어떻게 동일한 작업을 수행할 수 있습니까?