내 접근 방식. 코어 - 엔진. - 페이지 60

 
Igor Makanu :

...

그러나 이벤트 모델이 Windows에서 어떻게 작동하는지 알고 양식 디자이너(생성자)와 함께 컴파일러로 작업한 경험이 있다면 모든 것이 어디에서나 동일합니다.

추신: 나는 내 인생에서 Sharp를 세 번 보았지만 Delphi에서 많은 경험을했습니다. 전혀 차이가 보이지 않습니다. 모든 것이 일대일로 작동하고 작동하지 않는 것은 처음 Google

Windows 이벤트 모델 이 어떻게 작동하는지 기억나지 않습니다. 그리고 오랜 기간 동안 컴파일러와 디자이너들과 함께한 경험이 있습니다.

생성된 양식을 MT의 Application과 연결하여 문제를 해결해야 합니다. 쉽다고 하셨습니다.

 
Georgiy Merts :

보여주지 않고 동시에 그의 원칙을 아주 명확하게 설명합니다. 그들은 반대하며 "길이 잘못됐다"고 말한다.

더군다나 그것은 작성자에게만 아니라 반대하는 사람들에게도 '잘못'이다. 누가 닭 두뇌를 가지고 있고 그들이 어디서 무엇을 만들었는지 기억하지 못하는 사람은 어디에서 누구를 참조하는지, 배열의 각 셀이 의미하는 것, 변경할 수 있는 곳, 변경할 수 없는 곳에서 ... 상대는 분명합니다. 화난. 프로그램에 있는 수천 개의 개체와 링크를 쉽게 기억하기 위해 기억력을 훈련하는 대신, 그들은 스스로에 대한 액세스 권한을 차단하고 일종의 구별, 일부 인터페이스, 일종의 다형성 기능을 정의합니다. 차르 정권 아래서처럼 자신을 괴롭히십시오.

기억의 가파름에 대해 국수를 떨쳐 버리십시오. 때때로 이 포럼 대화의 스레드가 두 페이지 깊이까지 추적되지 않는 것으로 관찰됩니다. 게다가, 그들이 우리에게 말하려고 하는 것만큼 훌륭하게 작동하는 기억에 대한 부정이 너무 많습니다.

 
Dmitry Fedoseev :

문제를 해결하는 데 도움이 됩니다.

  1. 버튼과 체크박스를 클릭하는 이벤트를 MT5로 보내야 합니다.
  2. 폼의 체크박스나 버튼의 상태를 프로그래밍 방식으로 변경해야 합니다.
그것을 하는 방법?
 

Windows 형식이 있습니다. 시작하고 작동합니다. 버튼과 체크박스를 눌렀습니다.

이제 MT5와 연결하려면 DLL이 필요합니다. 방법을 아는 사람은 누구입니까?

 
Реter Konow :

문제 해결을 도와주세요.

  1. 버튼과 체크박스를 누르는 이벤트를 MT5로 보내야 합니다.
  2. 폼의 체크박스나 버튼의 상태를 프로그래밍 방식으로 변경해야 합니다.
그것을 하는 방법?

2. 어제 Igor는 모범을 보였습니다. 이 예제에서는 가져온 dll에 있는 클래스의 메서드를 전문가가 호출하는 방법을 보여 줍니다. 즉, 체크박스의 상태를 변경하는 함수(메소드)를 c#로 작성해야 합니다. 확인란 속성을 변경하는 방법, 메서드 이름이 기억나지 않습니다. 드롭다운 목록을 쉽게 탐색할 수 있습니다. 확인란 이름을 입력하고 점을 눌러야 합니다...

1. 모르겠다. 아마 아닐 것입니다. 타이머에서 dll 함수를 호출하고 체크박스의 상태를 관찰해야 합니다. 그러나 버튼을 누르는 것과 같은 이벤트의 경우 배열을 만들고 이벤트를 입력하십시오. 그러나 시각적으로 컨트롤을 사용하여 작업할 수 있다는 이점을 고려할 때 어렵지 않습니다.

 
Реter Konow :

C#을 설치했습니다. 프로젝트를 열었습니다. 폼을 만들고 2개의 버튼과 3개의 체크박스를 추가했습니다.

다음은 편집기의 코드입니다.

질문: 왜 하나의 버튼의 기능이 있고 두 번째 버튼과 체크박스의 기능은 어디에 있습니까?

이 코드를 찾았습니다.

그리고 MT5와의 상호접속에 어떻게 사용하나요?

두 번째 버튼이 필요하다는 것을 입증해야 합니다. 두 번 클릭하면 코드가 열리고 기능이 추가됩니다. 거기에서 또 다른 놀라운 발견이 기다리고 있습니다. 나중에 버튼이 양식에서 제거 되면 프로젝트 가 오류와 함께 컴파일되고 일부 파일에서 코드를 직접 삭제해야 하지만 직접 작성한 파일은 삭제하지 않아야 합니다.

 
Dmitry Fedoseev :

2. 어제 Igor는 모범을 보였습니다. 이 예제에서는 가져온 dll에 있는 클래스의 메서드를 전문가가 호출하는 방법을 보여 줍니다. 즉, 체크박스의 상태를 변경하는 함수(메소드)를 c#로 작성해야 합니다. 확인란 속성을 변경하는 방법, 메서드 이름이 기억나지 않습니다. 드롭다운 목록을 쉽게 탐색할 수 있습니다. 확인란 이름을 입력하고 점을 눌러야 합니다...

1. 모르겠다. 아마 아닐 것입니다. 타이머에서 dll 함수를 호출하고 체크박스의 상태를 관찰해야 합니다. 그러나 버튼을 누르는 것과 같은 이벤트의 경우 배열을 만들고 이벤트를 입력합니다. 그러나 시각적으로 컨트롤을 사용하여 작업할 수 있다는 이점을 고려할 때 어렵지 않습니다.

확인.

따라서 다음이 필요합니다.

  1. DLL을 생성합니다.
  2. 양식을 사용하여 DLL을 Windows 응용 프로그램에 연결합니다.
  3. dll의 버튼과 체크박스에 대한 클릭 이벤트를 브로드캐스팅하는 메소드를 작성하십시오.
  4. Windows 애플리케이션에서 버튼과 체크박스의 상태를 변경하는 메소드를 작성하십시오.
  5. DLL에 공유 메모리를 생성합니다. MT5에서 접근할 때 버튼과 체크박스의 상태를 변경하기 위한 플래그가 설정되도록 합니다. 그런 다음 Windows 응용 프로그램은 공유 메모리에 액세스하고 플래그를 읽고 하나 또는 다른 양식 요소의 상태를 변경해야 한다는 것을 배웠습니다.
  6. MT5의 타이머에서 DLL에 대한 순환 호출을 작성하여 함수 호출 플래그를 읽거나 필드에 텍스트를 입력합니다.

    수백 개의 요소가 있다면 어떻게 될까요?

    공유 메모리를 올바르게 구성하는 방법은 무엇입니까?

    양식에 있는 요소의 눌림/눌림 상태뿐만 아니라 색상(예: 버튼)도 변경해야 하는 경우 어떻게 해야 합니까?

    MT5에서 양식의 입력 필드에 있는 텍스트를 프로그래밍 방식으로 변경해야 하는 경우 어떻게 해야 합니까?


     
    Dmitry Fedoseev :

    그러나 버튼을 누르는 것과 같은 이벤트의 경우 배열을 만들고 이벤트를 입력하십시오. 그러나 시각적으로 컨트롤을 사용하여 작업할 수 있다는 이점을 고려할 때 어렵지 않습니다.

    나는 보통 그것을 더 쉽게 한다:

    1. 사용자가 폼의 버튼을 눌렀다 - OnClick() 핸들러에 즉시 진입하여 Button1.Disable을 실행했다.

    2. 그런 다음 MT5까지입니다. 교환이 어떻게 구성되는지, 저는 OnTick()에서 버튼 클릭을 폴링하는 것을 좋아합니다. - 어쨌든, 틱이 있을 때까지 아무 것도 하지 않을 것입니다. 타이머에서 약 300ms 동안 사용자는 프리즈를 눈치채지 못할 것이며 MT5도 지연되지 않을 것입니다.


    그러나 내 예제의 핵심은 이제 MT5에서 두 번의 클릭으로 패널을 시각화할 수 있고 버튼 핸들러는 .dll에서 작동하며 일반적으로 인터페이스 스크립트의 일부를 양식, 동일한 테이블, 데이터 처리로 전송할 수 있다는 것입니다. .. 그래, 그게 다야

    가장 중요한 것은 양식 디자이너의 도움으로 모든 것이 몇 시간 만에 완료되는 시각화 개발 시간을 절약하는 것입니다.)


    피터 코노우 :

    DLL에 공유 메모리를 생성합니다. MT5에서 접근할 때 버튼과 체크박스의 상태를 변경하기 위한 플래그가 설정되도록 합니다. 그런 다음 Windows 응용 프로그램은 공유 메모리에 액세스하고 플래그를 읽고 하나 또는 다른 양식 요소의 상태를 변경해야 한다는 것을 배웠습니다.

    MT5의 타이머에서 DLL에 대한 순환 호출을 작성하여 함수 호출 플래그를 읽거나 필드에 텍스트를 입력합니다.

      수백 개의 요소가 있다면 어떻게 될까요?

      공유 메모리를 올바르게 구성하는 방법은 무엇입니까?

      또 어딘가 엉뚱한 곳에서 고생하셨군요, 음, 얽히고 설킨 2000년대에서 벗어나세요! .... 어쩐지 2000년대가 너에게 한계는 아닌 것 같지만)))))

      실례가 되지 않길 바라나요?

       
      Igor Makanu :

      나는 보통 그것을 더 쉽게 한다:

      1. 사용자가 폼의 버튼을 눌렀다 - OnClick() 핸들러에 즉시 진입하여 Button1.Disable을 실행했다.

      2. 그런 다음 MT5까지입니다. 교환이 어떻게 구성되는지, 저는 OnTick()에서 버튼 클릭을 폴링하는 것을 좋아합니다. - 어쨌든, 틱이 있을 때까지 아무 것도 하지 않을 것입니다. 타이머에서 약 300ms 동안 사용자는 프리즈를 눈치채지 못할 것이며 MT5도 지연되지 않을 것입니다.


      그러나 내 예제의 핵심은 이제 MT5에서 두 번의 클릭으로 패널을 시각화할 수 있고 버튼 핸들러는 .dll에서 작동하며 일반적으로 인터페이스 스크립트의 일부를 양식, 동일한 테이블, 데이터 처리로 전송할 수 있다는 것입니다. .. 그래, 그게 다야

      가장 중요한 것은 양식 디자이너의 도움으로 모든 것이 몇 시간 만에 완료되는 시각화 개발 시간을 절약하는 것입니다.)


      또 어딘가 엉뚱한 곳에서 고생하셨군요, 음, 얽히고 설킨 2000년대에서 벗어나세요! .... 어쩐지 2000년대가 너에게 한계는 아닌 것 같지만)))))

      실례가 되지 않길 바라나요?

      실례는 아니지만 그렇지 않은 것이 유감입니다.

      복잡성이 증가하지 않을 것이라고 믿고 가장 단순한 예를 들어 외삽합니다. 이것은 실수입니다.

      당신이 준 가장 간단한 예도 틀렸습니다. 생성된 양식 외에 DLL도 생성해야 하기 때문입니다. 그런 다음 DLL 내부에 COMMON 메모리를 만듭니다.

      양식 요소의 수가 증가하고 MT5에서 프로그램의 기능이 복잡해짐에 따라 이 상호 작용은 엄청나게 로드되고 복잡해집니다.

      나는 이것을 실제로 테스트했다.

       
      Реter Konow :

      확인.

      따라서 다음이 필요합니다.

      1. DLL을 생성합니다.
      2. 양식을 사용하여 DLL을 Windows 응용 프로그램에 연결합니다.
      3. dll의 버튼과 체크박스에 대한 클릭 이벤트를 브로드캐스팅하는 메소드를 작성하십시오.
      4. Windows 애플리케이션에서 버튼과 체크박스의 상태를 변경하는 메소드를 작성하십시오.
      5. DLL에 공유 메모리를 생성합니다. MT5에서 접근할 때 버튼과 체크박스의 상태를 변경하기 위한 플래그가 설정되도록 합니다. 그런 다음 Windows 응용 프로그램은 공유 메모리에 액세스하고 플래그를 읽고 하나 또는 다른 양식 요소의 상태를 변경해야 한다는 것을 배웠습니다.
      6. MT5의 타이머에서 DLL에 대한 순환 호출을 작성하여 함수 호출 플래그를 읽거나 필드에 텍스트를 입력합니다.

        수백 개의 요소가 있다면 어떻게 될까요?

        공유 메모리를 올바르게 구성하는 방법은 무엇입니까?

        양식에 있는 요소의 눌림/눌림 상태뿐만 아니라 색상(예: 버튼)도 변경해야 하는 경우 어떻게 해야 합니까?

        MT5에서 양식의 입력 필드에 있는 텍스트를 프로그래밍 방식으로 변경해야 하는 경우 어떻게 해야 합니까?


        이벤트로 작업을 올바르게 구성하면 컨트롤 수는 문제가되지 않습니다. 다음과 같이 할 수 있습니다. dll에서 하나의 배열 또는 두 개의 배열, 하나는 개체 이름용이고 다른 하나 는 이벤트 유형용 입니다. dll에서 동일한 이름과 이벤트 유형의 두 매개변수를 사용하여 함수를 작성합니다. 원하는 각 이벤트 핸들러에서 이 함수를 호출하여 이벤트가 배열에 배치되도록 합니다. 또 다른 방법은 EA의 타이머에서 이벤트를 추적하는 것입니다. 편리하거나 결과에 따라(참조에 의한 동일한 배열 또는 다른 변수 및 다른 변수) 배열의 이벤트 수를 사용하여 추적합니다. 해당 메서드를 호출한 후 배열을 지웁니다.

        아니면 하나의 배열이 더 쉬울 수도 있습니다. C #에 이벤트 객체가 있고, 그것들로 배열을 만들 수 있습니다. 어떻게 든 스스로 각 이벤트 핸들러에서 함수를 호출하지 않고 고안하는 것이 가능할 수도 있습니다. 그러나 그것은 중요하지 않습니다. 어떤 경우에도 인터페이스를 구축할 수 있는 가능성과 사용 가능한 c #의 모든 기능에 비하면 사소한 일입니다.