MQL로 작성된 UI 갤러리 - 페이지 66

 
새 페이지로 계속 진행하겠습니다.
 

12. 슬라이더와 필드의값 경계를버튼(_V_MIN, _V_MAX, _V_STEP, _DIGITS)으로프로그래밍 방식으로 가져오기/설정하기.

1. 위의 매개변수가 있는 요소로 창을 열어 봅시다:

int _OnInit()
  {
   //------------------------------------------------
   //Open the window "Settings example 1".
   //------------------------------------------------
   w_6_Settings_example_1();
   //------------------------------------------------


2. V_MIN, _V_MAX, _V_STEP, _DIGITS의 값을 기록하고 로그에 출력해 봅시다:

   //------------------------------------------------
   //Get parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   int Min_value = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_MIN);
   int Max_value = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_MAX);
   int Step      = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_V_STEP);
   int digits    = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_DIGITS);
   //------------------------------------------------
   //Print the results:
   //------------------------------------------------
   Print("Min_value:  ",Min_value,"  Max_value:  ",Max_value,"  Step:  ",Step,"  digits:  ",digits);
   //------------------------------------------------

결과: 슬라이더 매개변수 속성의 값이 기록됩니다.


//---------------------------------------------------------------------------------------------------------------------------------------


3. 버튼이 있는 필드에 대해서도 같은 작업을 반복해 보겠습니다. 슬라이더와 달리 이 필드에는 다른 숫자 경계가 있고 값 유형은 이중입니다.

   //------------------------------------------------
   //Get parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   double _Min_value  =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_MIN);
   double _Max_value  =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_MAX);
   double _Step       =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_V_STEP);
   double _digits     =  w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_DIGITS);
   //------------------------------------------------
   Print("Min_value:  ",_Min_value,"  Max_value:  ",_Max_value,"  Step:  ",_Step,"  digits:  ",_digits);
   //------------------------------------------------ 

결과:버튼이 있는 필드의 매개변수 속성 값이 로그에 표시됩니다.


//---------------------------------------------------------------------------------------------------------------------------------------


4. 슬라이더 범위의 다른 경계를 설정합니다(첫 번째 테스트이므로 결과를 알 수 없음).

   //------------------------------------------------
   //Set parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP.
   //------------------------------------------------
   Min_value = -100;
   Max_value = 100;
   Step      = 1;
   //-----------------
   w6_i_p3_H_SLIDER_Roll_the_value(Min_value, p3_V_MIN);
   w6_i_p3_H_SLIDER_Roll_the_value(Max_value, p3_V_MAX);
   w6_i_p3_H_SLIDER_Roll_the_value(Step,      p3_V_STEP);
   //------------------------------------------------

결과: *음수 범위에서 문제가 발견되었습니다(다음 버전에서 수정 예정).




양수 범위 바운드로 확인해 보겠습니다:

   //------------------------------------------------
   //Set parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP.
   //------------------------------------------------
   Min_value = 0;
   Max_value = 1000;
   Step      = 1;
   //-----------------
   w6_i_p3_H_SLIDER_Roll_the_value(Min_value, p3_V_MIN);
   w6_i_p3_H_SLIDER_Roll_the_value(Max_value, p3_V_MAX);
   w6_i_p3_H_SLIDER_Roll_the_value(Step,      p3_V_STEP);
   //------------------------------------------------


결과: 범위 바운드가 성공적으로 변경되었습니다.


요점: 슬라이더의 범위는 슬라이더의 함수를 사용하여 변경할 수 있습니다.

**중요:매개변수 값 유형을 int에서 double로 또는 그 반대로 소급하여 변경할 수 없습니다.

//-------------------------------------------------------------------------------------------------


입력 필드에 대해서도 비슷한 실험을 해보겠습니다:

   //------------------------------------------------
   //Set NEW parameter properties, such as: 
   //_V_MIN, _V_MAX, _V_STEP, _DIGITS
   //------------------------------------------------
   double _Min_value  = -100.0;
   double _Max_value  =  100.0;
   double _Step       =  2.5;
   //-----------------
   //Set another default value---
   w6_d_p5_S_EDIT_Spin_the_value(50.5);
   //-----------------
   w6_d_p5_S_EDIT_Spin_the_value(_Min_value,p5_V_MIN);
   w6_d_p5_S_EDIT_Spin_the_value(_Max_value,p5_V_MAX);
   w6_d_p5_S_EDIT_Spin_the_value(_Step     ,p5_V_STEP);
   //------------------------------------------------

결과: 의도한 대로 작동합니다. 버튼이 있는 필드는 지정된 범위와 단계를 허용합니다. 범위를 초과하면 로그에 오류를 보고합니다.

//--------------------------------------------------------------------------------------------------


5. 마지막으로 버튼이 있는 필드에 value_DIGITS를 설정해 보겠습니다(매개변수 유형이 int이므로 슬라이더가 작동하지 않음):

  • 마침표 뒤에 네 자리로 단계 값을 설정해 보겠습니다.
  • digits 변수는 4(소수점 이하 네 자리)로 설정됩니다.

       //------------------------------------------------
       //Set parameter properties, such as: 
       //_V_MIN, _V_MAX, _V_STEP, _DIGITS
       //------------------------------------------------
       double _Min_value  = -100.0;
       double _Max_value  =  100.0;
       double _Step       =  2.5567;
              digits      =  4;
       //-----------------
       //Set another default value---
       w6_d_p5_S_EDIT_Spin_the_value(50.5);
       //-----------------
       w6_d_p5_S_EDIT_Spin_the_value(_Min_value,p5_V_MIN);
       w6_d_p5_S_EDIT_Spin_the_value(_Max_value,p5_V_MAX);
       w6_d_p5_S_EDIT_Spin_the_value(_Step     ,p5_V_STEP);
     
       //Set the new number of digits:
       w6_d_p5_S_EDIT_Spin_the_value(digits    ,p5_DIGITS);
       //------------------------------------------------


    결과:

    • 처음에는 소수점 뒤에 세 자리(소프트웨어 변경 전의 원래 숫자)가 있었습니다.


    • 그런 다음 소프트웨어 호출로 정밀도가 4자리로 증가했습니다:


    • 그 다음에는 7자리로 증가했습니다:
    //Setting 7 digits after the decimal point:
    
    w6_d_p5_S_EDIT_Spin_the_value(7,p5_DIGITS);



    결과:

    • 슬라이더뿐만 아니라 버튼 필드의 원래 숫자 범위 경계를 프로그래밍 방식으로 재설정할 수 있는 기능을 사용할 수 있습니다.
    • 소수점 이하 자릿수를 다르게 설정하여 이중 값의 초기 정밀도를 프로그래밍 방식으로 변경할 수 있습니다.
    • 슬라이더는 음수 범위 내에서 값을 계산하는 데 문제가 있습니다(수정될 예정).
    • 요소 매개변수의 원래 유형은 재설정할 수 없습니다.

    이것으로 이 주제를 마칩니다.

    Графические интерфейсы VI: Элементы "Слайдер" и "Двухсторонний слайдер" (Глава 2)
    Графические интерфейсы VI: Элементы "Слайдер" и "Двухсторонний слайдер" (Глава 2)
    • www.mql5.com
    В предыдущей статье разрабатываемая библиотека была пополнена сразу четырьмя довольно часто используемыми в графических интерфейсах элементами управления: «чекбокс», «поле ввода», «поле ввода с чекбоксом» и «комбобокс с чекбоксом». Вторая глава шестой части серии будет посвящена таким элементам управления, как слайдер и двухсторонний слайдер.
     

    13. 요소 _GET_STATE 상태 쿼리하기.

    인터페이스의 하나 또는 다른 요소의 상태를 프로그래밍 방식으로 가져와야 하는 경우가 종종 있습니다. 이 문제를 해결하기 위해 _GET_STATE 식별자가 생성됩니다.

    //--------------------------------------------------------------------------------------------------------------------

    *중요: 요청_GET_STATE에서 함수는 요소의 현재 상태의 인덱스를 반환합니다.

    //--------------------------------------------------------------------------------------------------------------------

    아래 이미지는 요소 상태 목록을 보여줍니다.

    1. 상태 식별자 :

    (*다음 릴리스에서는 접두사 v_가 접두사 s_로 대체될 예정입니다. )


    로그에 출력되는 인덱스입니다:

      v_NEUTRAL_STATE           15
      //-----------------------------
      v_ACTIVATED_STATE         62
      //-----------------------------
      v_NEUTRAL_BLOCKED         64
      //-----------------------------
      v_ACTIVATED_BLOCKED       65   
      //----------------------------- 
      v_NEUTRAL_HIGHLIGHTED     66  
      //-----------------------------
      v_ACTIVATED_HIGHLIGHTED   67


    엘리먼트 상태 쿼리 및 검색을 테스트해 보겠습니다:

    1. 창을 열고 '시작' 버튼의 초기 상태를 가져옵니다:


    int _OnInit()
      {
       //------------------------------------------------
       //Open the window "Settings example 1".
       //------------------------------------------------
       w_6_Settings_example_1();
       //------------------------------------------------
       //Get state of button "Start":
       //------------------------------------------------
       int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
       //------------------------------------------------
       //Print out:
       //------------------------------------------------
       Print("Button state:  ",Button_state);
       //------------------------------------------------


    결과:v_NEUTRAL_STATE 상태에 해당하는 값 15를 얻습니다 .



    2. 버튼을 누르고 놓을 때 버튼의 상태를 기록해 보겠습니다:

    이렇게 하려면

    • API 파일에서 버튼을 찾습니다.
    • 눌렀을 때와 놓았을 때 두 가지 경우 모두에 대해 _GET_STATE 요청을 작성합니다.
    case Settings_example_1___Start:
    
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the button is pressed or released?
                   //------------------------------------------------------------------------------------------------------
                   switch((int)action)
                   {
                    //------------------------------------------------------------------------
                    case pressed: 
                                   {
                                    //Get button's state when it pressed:
                                    int Button_state =  w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Button state:  ",Button_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                    case released: 
                                   {
                                    //Get button's state when it released:
                                    int Button_state =  w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Button state:  ",Button_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                   }
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;
    


    결과: 눌렀을 때/놓았을 때 이벤트에서 현재 상태 인덱스가 로그에 인쇄됩니다.

    참고

    15 = v_NEUTRAL_STATE
    
    62 = v_ACTIVATED_STATE

    //----------------------------------------------------------------------------------------------------------------


    3. 체크박스를 사용하여 쿼리를 반복해 보겠습니다.



    1. 창 열림 이벤트에 대한 체크박스의 상태를 가져와 봅시다:

       //------------------------------------------------
       //Open the window "Settings example 1".
       //------------------------------------------------
       w_6_Settings_example_1();
       //------------------------------------------------
       
       //Get the state of the checkbox when it checked:
       int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
       
       //Print out the result:
       Print("Checkbox state:  ",Checkbox_state);
       //------------------------------------------------

    결과: 확인란이 있는 중립 상태 v_NEUTRAL_STATE에 해당하는 값 15를 얻습니다.




    2. 다음으로 누르기 및 놓기 이벤트에 대한 체크박스의 상태를 쿼리해 보겠습니다.

    이렇게 하려면

    • API 파일에서'옵션 설정' 체크박스를 찾습니다.
    • 체크박스가 체크된 경우와 체크되지 않은 경우 모두에 대해 _GET_STATE 쿼리를 작성해 보겠습니다.
    case Settings_example_1___Set_an_option:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the checkbox is checked or unchecked? 
                   //------------------------------------------------------------------------------------------------------
                    case checked: 
                                   {
                                    //Get checkbox state when it checked:
                                    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Checkbox state:  ",Checkbox_state);
                                   }
                    break;
                    //------------------------------------------------------------------------
                    case unchecked: 
                                   {
                                    //Get checkbox state when it unchecked:
                                    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
                                    
                                    //Print out the result:
                                    Print("Checkbox state:  ",Checkbox_state);
                                   }
                    break;
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;


    결과: 강조 표시된 중립 및 강조 표시된 눌림 상태를 의미하는66 (v_NEUTRAL_HIGHLIGHTED) 및 67 (v_ACTIVATED_HIGHLIGHTED)값을 얻습니다 .

    //-----------------------------------------------------------------------------------------------

    이것으로 주제의 첫 번째 부분을 마칩니다.

    두 번째 파트에서는 D_LIST 드롭다운 목록, H_SLIDER 슬라이더, S_EDITEDIT 입력 필드의 상태를 반환하겠습니다.

     
    저는 coinsbitfx.com이라는 암호자산 거래소를 이용하기 시작했습니다. 코인 비트 FX는 사용자에게 합법성을 확신시키기 위해 미국 선물협회에 등록되었다고 주장했습니다. 어느 순간 제 계정의 가치가 $135,134까지 증가했다고 믿었습니다. 하지만 계좌에서 자금을 인출하려고 했더니 거래소 측에서 "거래가 검토 중"이라는 답변을 받았습니다. 그 후로 웹사이트의 누구와도 연락이 닿지 않았고 투자한 자금에 접근할 수 없었습니다. 그래서 블로그에서 RECOVERYCOINGROUP AT GMAIL DOT COM에 대해 읽고 조사를 한 후 서비스를 이용하기로 결정했습니다. 72시간 이내에 제 자금이 모두 복구되었고, 그것도 모자란 듯 제 친구들의 BTC도 복구되었습니다. 그래서 저는 이들에 대해 세상에 알릴 만큼 대담해졌습니다. 지금 바로 리커버리 코인 그룹에 연락해 주시면 감사하겠습니다 !
     

    13. 상태 요청 _GET_STATE.

    2부: D_LIST, H_SLIDER, EDIT, S_EDIT 요소의 상태 가져오기 .

    지난 파트에서는 버튼 버튼과 체크박스 체크박스의 상태를 프로그래밍 방식으로 반환하는 방법을 살펴봤습니다. GET_STATE 쿼리가 사용되었고 함수가 반환하는 상태 이름 목록이 표시되었습니다. 총 6개의 이름이 있으며, 각 이름은 접두사 v_로 시작합니다. ( 값의 약자로, 상태의 약자인 s_로 대체됩니다 ).

    상태 인덱스를 떠올려 보세요:

      v_NEUTRAL_STATE           15
      //-----------------------------
      v_ACTIVATED_STATE         62
      //-----------------------------
      v_NEUTRAL_BLOCKED         64
      //-----------------------------
      v_ACTIVATED_BLOCKED       65   
      //----------------------------- 
      v_NEUTRAL_HIGHLIGHTED     66  
      //-----------------------------
      v_ACTIVATED_HIGHLIGHTED   67

    이 경우 특정 인덱스 번호는 중요하지 않습니다. 사용자가 특정 상태를 조건에 넣어야 할 때는 식별자를 사용합니다.

    예 1:

    //Getting state of the first element:
    int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
    
    //Getting state of the second element:
    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
    
    
    //Setting conditions for both elements when they're simultaneously ON:
    if(Button_state == v_ACTIVATED_STATE)
      { 
       //Is the checkbox was already on:
        if(Checkbox_state == v_ACTIVATED_STATE)
          {
           Function_1();
          }
        //If the checkbox was the last pressed element and still highlighted:
        if(Checkbox_state == v_ACTIVATED_HIGHLIGHTED)
          {
           Function_2();
          }
      }


    예 2:

    //Getting state of the first element:
    int Button_state = w6_i_p1_BUTTON_Start(get_i,p1_GET_STATE);
    
    //Getting state of the second element:
    int Checkbox_state = w6_i_p7_CHECKBOX_Set_an_option(get_i,p7_GET_STATE);
    
    
    //Setting conditions for one element being ON, while the other is OFF:
    if(Button_state == v_ACTIVATED_STATE)
      { 
       //If the checkbox was already off:
        if(Checkbox_state == v_NEUTRAL_STATE)
          {
           Function_A();
          }
        //If the checkbox was just turned off and still highlighted:
        if(Checkbox_state == v_NEUTRAL_HIGHLIGHTED)
          {
           Function_B();
          }
      }

    //-----------------------------------------------------------------------------------------------------------------

    *매우 중요합니다:

    v_NEUTRAL_STATE와 v_NEUTRAL_HIGHLIGHTED 상태, 그리고 v_ACTIVATED_STATE와 v_ACTIVATED_HIGHLIGHTED 상태의 본질적인 차이점을 설명하겠습니다:

    v_NEUTRAL_STATE - это нейтральное состояние в котором элемент находится неопределенное время.
    
    v_NEUTRAL_HIGHLIGHTED - это нейтральное состояние в которое элемент перешел ТОЛЬКО ЧТО, после отжатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED. 

    활성화된 상태에도 동일하게 적용됩니다:

    v_ACTIVATED_STATE - это активированное состояние в котором элемент находится неопределенное время.
    
    v_ACTIVATED_HIGHLIGHTED - это активированное состояние в которое элемент перешел ТОЛЬКО ЧТО, после нажатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED. 

    이 차이는 큰 차이를 만듭니다.

    현재 버튼과 일부 다른 요소는 v_NEUTRAL_STATE와 v_ACTIVATED_STATE만 반환하고 체크박스처럼 HIGHLIGHTED 상태는 반환하지 않습니다. 즉, 사용자는 항목이 방금 클릭/클릭 해제되었는지, 아니면 무한정 오래 전에 클릭/클릭 해제되었는지 알 수 있는 방법이 없습니다. 그러나 사용자는 API 파일에서 항목을 누른 순간을 파악할 수 있습니다. 예, 하지만 이 기능은 아직 나머지 프로그램에서는 사용할 수 없습니다. 다음 버전에서는 모든 인터랙티브 요소에 강조 표시 상태 반환 기능이 추가될 예정입니다. 이렇게 하면 프로그램 어디에서나 사용자가 요소가 방금 눌렀는지/눌리지 않았는지 또는 오랫동안 그 상태에 있었는지 알 수 있습니다.

    //----------------------------------------------------------------------------------------------------------


    실용적인 부분으로 넘어가 보겠습니다:

    • D_LIST, H_SLIDER, EDIT 및 S_EDIT 요소가 있는 두 개의 창을 열어 보겠습니다.
    • 열자마자 요소의 상태를 반환해 보겠습니다.

    1. 창을 엽니다:

    int _OnInit()
      {
       //------------------------------------------------
       //Open the windows "Settings example 1" and "Settings example 2".
       //------------------------------------------------
       w_6_Settings_example_1();
       w_7_Settings_example_2();
       //------------------------------------------------


    2. 요소의 상태를 가져옵니다:

       //------------------------------------------------
       //Get the states of the elements S_EDIT, H_SLIDER, EDIT and D_LIST
       //------------------------------------------------
       //1. State index is type int, S_EDIT's function is double. Convert the types.
       int S_edit_state   = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d,p5_GET_STATE); 
       
       //2. Getting the slider's state. 
       int H_slider_state =      w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE);
       
       //3.State index is type int, EDIT's function is string. Convert the types. 
       int Edit_state     = (int)w7_s_p4_EDIT_Comment_3(get_s,p4_GET_STATE);
       
       //State index is type int, D_LIST's function is string. Convert the types.
       int D_list_state   = (int)w7_s_p6_D_LIST_D_LIST_1(get_s,p6_GET_STATE);
       //------------------------------------------------
       
       //Print out the results:
       Print("S_edit_state   = ",S_edit_state);
       Print("H_slider_state = ",H_slider_state);
       Print("Edit_state     = ",Edit_state);
       Print("D_list_state   = ",D_list_state);
       //------------------------------------------------


    결과: D_LIST의모든 요소는 상태 인덱스 15(중립 상태 v_NEUTRAL_STATE ) 를 가집니다. D_LIST가 오류(-1)를 반환했습니다.


    이유: 이 요소의 상태 반환이 중앙 함수에 지정되어 있지 않습니다. 기술적 결함입니다.다음 버전에서 수정될 예정입니다.

    D_LIST 함수는 아직 상태 인덱스를 반환하지 않으므로 상태가 성공적으로 수신된 세 가지 항목인 EDIT , S_EDIT 및 H_SLIDER에 집중해 보겠습니다.

    확인해야 할 사항

    • 요소가 잠겨 있고 클릭되었을 때 함수가 반환하는 인덱스.
    • 주어진 요소의 상태가하이라이트 ( 강조 표시됨 ) 상태인지 여부. 즉, 요소가 방금 클릭되었는지 여부를 알 수 있는지 여부입니다.

    EDIT, S_EDIT 및 H_SLIDER 요소 함수가 창이 열렸을 때 중립 상태의 인덱스를 반환한다는 것을 확인했습니다. 다른 상태를 확인해야 할 일이 남아 있습니다. 이러한 유형의 요소는 이론적으로 중립, 잠금강조 표시된 상태만 가능하므로(더 많은 상태를 가진 버튼 및 확인란과 달리) 다음 두 가지 가능한 상태인 잠금강조 표시를 확인해야 합니다. 혼동을 피하기 위해 아직 추가하지 않은'커서 아래' 상태 그룹도 있습니다. 다음 버전에서는 각 요소 유형의 가능한 상태의 개별 목록을 여는 특수 접두사를 만들 것입니다. 이렇게 하면 프로그래밍 작업이 더 쉬워질 것입니다.

    차단 및 강조 표시된 상태편집, S_EDIT 및 H_SLIDER의 반환을 확인하는 방법:

    • API 파일에서 '옵션 설정' 체크박스를 찾아보겠습니다.
    • 케이스 안에 EDIT, S_EDIT, H_SLIDER 요소의 잠금/잠금 해제를 작성하고 해당 요소의 상태를 인쇄()해 봅시다.
    • API 파일에서 EDIT, S_EDIT, H_SLIDER 요소를 찾아봅시다 .
    • 이 요소에 값을 입력하는 이벤트에 대한 상태 리턴을 작성합니다.
    • Print()를 통해 얻은 결과를 인쇄해 보겠습니다.
    //-------------------------------------------------------------------------------------------------

    1. API 파일에서 '옵션 설정' 체크박스를 찾아 그 안에 EDIT, S_EDIT, H_SLIDER 요소의 잠금/잠금 해제를 작성합니다.그런 다음 Print()를 통해 상태를 출력합니다.

    case Settings_example_1___Set_an_option:
      
                switch((int)action)
                   {
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the checkbox is checked or unchecked? 
                   //------------------------------------------------------------------------------------------------------
                    case checked: 
                                   {
                                    //-----------------------------------------------
                                    //Locking EDIT:
                                    w7_s_p4_EDIT_Comment_1(p4_LOCK);
                                    
                                    //Locking H_SLIDER:
                                    w6_i_p3_H_SLIDER_Roll_the_value(p3_LOCK);
                                    
                                    //Locking S_EDIT:
                                    w6_d_p5_S_EDIT_Spin_the_value(p5_LOCK); 
                                    
                                    //-----------------------------------------------
                                    //Getting state of EDIT:
                                    int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
    
                                    //Getting state of H_SLIDER:
                                    int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 
    
                                    //Getting state of S_EDIT:
                                    int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                    //-----------------------------------------------
                                    
                                    //Printing results:
                                    Print("EDIT_state      = ",EDIT_state);
                                    Print("H_SLIDER_state  = ",H_SLIDER_state);
                                    Print("S_EDIT_state    = ",S_EDIT_state);
                                    //-----------------------------------------------
                                   }
                    break;
                    //------------------------------------------------------------------------
                    case unchecked: 
                                   {
                                    //-----------------------------------------------
                                    //Unlocking the element EDIT:
                                    w7_s_p4_EDIT_Comment_1(p4_UNLOCK);
                                    
                                    //Unlocking H_SLIDER:
                                    w6_i_p3_H_SLIDER_Roll_the_value(p3_UNLOCK);
                                    
                                    //Unlocking S_EDIT:
                                    w6_d_p5_S_EDIT_Spin_the_value(p5_UNLOCK);
                                    
                                    //-----------------------------------------------
                                    //Getting state of EDIT:
                                    int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
    
                                    //Getting state of H_SLIDER:
                                    int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 
    
                                    //Getting state of S_EDIT:
                                    int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                    //-----------------------------------------------
                                    
                                    //Printing results:
                                    Print("EDIT_state      = ",EDIT_state);
                                    Print("H_SLIDER_state  = ",H_SLIDER_state);
                                    Print("S_EDIT_state    = ",S_EDIT_state);
                                    //-----------------------------------------------
                                   }
                    break;
                   } 
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;


    결과:

    • 체크박스를 클릭하면 요소 함수는 인덱스 64를 반환하며, 이는 v_NEUTRAL_BLOCKED (중립 잠금) 상태에 해당합니다.
    • 확인란을 선택 취소하면 요소 함수는 인덱스 15를 반환하며, 이는 v_NEUTRAL_STATE (중립 상태) 상태에 해당합니다.

    //--------------------------------------------------------------------------------------------------

     

    2. 두 번째 과제:

    • API 파일에서 EDIT, S_EDIT, H_SLIDER 요소를 찾아 값을 입력할 때 상태를 가져와 해당 함수가 HIGHLIGHTED ( 강조 표시된 ) 인덱스를 반환하는지 확인하도록 지정합니다.

    시작하기:

    case Settings_example_2___Comment_1:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the text is entered?
                   //------------------------------------------------------------------------------------------------------
                   {
                    //Getting state of EDIT:
                    int EDIT_state =  (int)w7_s_p4_EDIT_Comment_1(get_s, p4_GET_STATE);
                                    
                    //Printing the results:
                    Print("EDIT_state      = ",EDIT_state);
                   } 
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;
    case Settings_example_1___Roll_the_value:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the slider's handle is moved?
                   //------------------------------------------------------------------------------------------------------
                   //Min value:  0  |   Max value:  100  |   V_step:  1  |   Default value:  75  |  Digits: Integer value
                   //------------------------------------------------------------------------------------------------------
                   {
                    //Getting state of H_SLIDER:
                    int H_SLIDER_state = w6_i_p3_H_SLIDER_Roll_the_value(get_i,p3_GET_STATE); 
                                    
                    //Printing results:
                    Print("H_SLIDER_state  = ",H_SLIDER_state);
                   }           
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;
    case Settings_example_1___Spin_the_value:
      
                   //------------------------------------------------------------------------------------------------------
                   //What to do when the value is set?
                   //------------------------------------------------------------------------------------------------------
                   //Min value:  NOT SET  |   Max value:  NOT SET  |   V_step:  1.7  |   Default value:  468.99  |  Digits: 3
                   //------------------------------------------------------------------------------------------------------
                   {
                    //Getting state of S_EDIT:
                    int S_EDIT_state = (int)w6_d_p5_S_EDIT_Spin_the_value(get_d, p5_GET_STATE); 
                                    
                    //Printing results:
                    Print("S_EDIT_state    = ",S_EDIT_state); 
                   }
                   //------------------------------------------------------------------------------------------------------
                   //Your comment:
                   //------------------------------------------------------------------------------------------------------
                   break;

    결과:

    • EDIT: 사용자 상호작용 이벤트에서 67의 상태 인덱스를 반환하며, 이는v_ACTIVATED_HIGHLIGHTED ( 활성화됨, 강조 표시됨)를 의미합니다.

    • S_EDIT: 사용자 상호작용 이벤트에서 상태 인덱스 67을 반환하며, 이는v_ACTIVATED_HIGHLIGHTED ( 활성화됨, 강조 표시됨)를 의미합니다.
    • H_SLIDER: 사용자 상호작용 이벤트에서 인덱스 66과 67을 번갈아 반환하며, 이는v_NEUTRAL_HIGHLIGHTED ( 중립, 조명됨) 및v_ACTIVATED_HIGHLIGHTED (활성화됨, 조명됨)를 의미합니다.버그. 다음 버전에서 수정될 예정입니다.



    //-----------------------------------------------------------------------------------------------------

    결과:

    일반적으로 결과는 만족스러운 것으로 평가할 수 있습니다. 요소는 의도한 대로 중립 및 잠금 상태의 인덱스를 반환합니다. 그러나 몇 가지 단점이 있습니다:

    • D_LIST 엘리먼트 함수는 어떤 상태도 반환하지 않습니다.
    • H_SLIDER 엘리먼트 함수는 하나의 인덱스 67 - v_ACTIVATED_HIGHLIGHTED(활성화, 조명) 대신 v_NEUTRAL_HIGHLIGHTED v_ACTIVATED_HIGHLIGHTED 상태의 인덱스를 번갈아 반환합니다.

    결론:

    • 결함을 수정해야 합니다.
    • 사용자가 어떤 유형의 요소가 어떤 상태를 가지고 있는지 알고 코드에서 쉽게 사용할 수 있도록 특수 접두사s_로 호출되는 인텔리센스 목록을 만들어야 합니다.

    잠재적으로 새로운 요소 상태를 추가할 수 있습니다. 예를 들어, 중립 가리키기활성화 가리키기( 커서 아래 중립 및 커서 아래 활성화) 있지만 실용성과 사용자가 이러한 기능을 실제로 필요로 하는지에 대한 의문이 있습니다. 이러한 요구 사항이 접수되지 않는 한 새로운 상태를 추가하지 않겠습니다.

    이 주제는 이것으로 끝입니다.


    다음 주제로 넘어가겠습니다.

     

    지난 한 주 동안 WinForm을 사용하여 인터페이스를 작성하고 이를 MT5 차트에 삽입하는 방법을 연구했습니다. 오늘 드디어 깨달았습니다.

     
    동영상을 업로드하는 것이 GIF를 업로드하는 것보다 쉽고 파일 크기도 더 작습니다.
     

    고려해야 할 일반적인 주제 목록입니다:

    1. 인텔리센스 목록에서 방향을 정하고 오른쪽 창의 기능을 선택합니다.

    2. 프로그래밍 방식으로 창 열기 및 닫기.

    3. 프로그래밍 방식으로 사용 가능한 창 요소 목록 열기.

    4. 개별 요소 속성 목록 열기.

    5. 요소 및 창 래퍼 함수의 이름 파싱하기.

    6. 요소 매개변수의 값을 해당 유형의 변수로 반환하기.

    7. 다른 유형의 요소 매개변수에 값 설정하기.

    8. 서로 다른 요소의 매개변수 간에 값 반환, 변경 및 전달하기. 다양한 유형의 요소와 값을 고려하고 다른 창에서 다른 유형의 요소 간 전달을 테스트합니다.

    9. 이전 값 반환(_V_LAST). 언제, 어떤 경우에 마지막 값이 필요한지(현재 값과 혼동하지 마세요).

    10. 다양한 요소 유형에 대한 켜기, 끄기, LOCK_ON, LOCK_OFF, 잠금, 잠금 해제 상태 설정 테스트.

    11. 요소의 변경 값 바인딩 및 동기화 테스트: 예: 버튼과 슬라이더가 있는 입력 필드. 한 요소(수동 또는 소프트웨어)의 값이 변경되면 두 번째 요소의 값도 그에 따라 변경되도록 합니다.

    12. 슬라이더와 버튼이 있는 필드의 범위 경계를 소프트웨어로 가져오거나 설정하는 테스트(속성 _V_MIN, _V_MAX, _V_STEP, _DIGITS).

    13. 항목 상태 쿼리(_GET_STATE)의 작동을 테스트합니다.

    14. 텍스트 및 테두리 색상을 간격이 있는 값 경계에 연결하기.

    15. API 파일의 방향.

    16.메시지 및 경고 창 표시의 간단한 프로그램 로직 구현.

    //------------------------------------------

    고려된 주제는 노란색으로 강조 표시되어 있습니다.

    현재로서는 몇 가지 고려해야 할 사항이 남아 있습니다:

    14. 텍스트와 프레임 색상을 간격 값 경계에 연결하기.

    15. API 파일의 방향.

    16.메시지 및 경고 창 표시의 간단한 프로그램 로직 구현.

    //------------------------------------------

    14번 주제와 16번 주제를 연계하는 것이 좋습니다. 설정된 매개 변수 값의 한계를 초과하면 먼저 요소의 일부 색상 (텍스트, 기본, 프레임, 줄무늬 등)을 변경 한 다음 대화 창을 연 다음 경고 창을 여는 형태로 신호가 발생합니다. 동시에 경고 창은 사용자가 수동으로 닫을 때까지 요소의 값 변경을 차단합니다.


    또한 목록에 테마를 추가하고 싶습니다:

    사용자가 '취소' 버튼을 클릭하면 입력한 설정을 취소하는 기능입니다.

    오래 전에 '취소' 버튼을 클릭하여 사용자 설정을 취소하는 기술이 개발되어 어느 정도 테스트를 거쳤습니다. 현재로서는 이전 기능이 얼마나 잘 작동하는지 알 수 없습니다. 따라서 테스트가 필요합니다.


    주제 중복으로 인해 검토 순서는 다음과 같습니다:

    14. 스태거드 매개변수 경계 보호 구현하기:

    • 사전 설정된 경계 내에서 설정을 제어하는 로직을 작성하고 경고 시스템을 만듭니다.
    • 경고 1: 사용자는 요소 일부의 색상이 변경되는 형태로 신호를 받습니다.( 텍스트, 밑줄, 프레임 및 슬라이더 바의 색상을 값 경계에 연결해 보겠습니다.)
    • 경고 2: 위험 알림과 함께 원래 설정으로 돌아가라는 제안이 포함된 대화 상자가 열립니다. ( '취소' 버튼을 클릭했을 때 이전 설정으로 돌아가는 실제 기능을 테스트해 보겠습니다. )
    • 경고 3: 설정에 대한 추가 변경을 차단하는 경고 창이 열리고 사용자에게 면책 조항을 알리고 사용자의 수동 확인이 필요합니다. ( 경고 창이 나타날 때 창 차단을 테스트해 보겠습니다. )


    15. 새로운 API 파일 출력에 대해 자세히 살펴봅시다.

    //----------------------------------------------------------------------------------------------------


    다음으로 발견된 모든 버그나 결함을 수집하여 다음 릴리스를 위한 작업 목록을 작성하겠습니다.

    수정 및 추가 사항이 포함 된 다음 릴리스 이후에는 엔진의 추가 개발 방향 중 하나를 볼 수있는 테이블에 집중할 것입니다.

    Документация по MQL5: Основы языка / Операторы / Оператор возврата return
    Документация по MQL5: Основы языка / Операторы / Оператор возврата return
    • www.mql5.com
    Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
     
    hini #:

    지난 한 주 동안 WinForm을 사용하여 인터페이스를 작성하고 MT5 차트에 빌드하는 방법을 배웠습니다. 오늘 드디어 방법을 알아냈습니다.


    인터페이스가 프로그래밍 코드와 어떻게 통신하게 만들까요?