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.ボタン付きフィールドで操作を繰り返してみましょう。スライダーとは異なり、フィールドには他の数値境界があり、その値タイプはdouble です。

   //------------------------------------------------
   //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なので動作しません):

  • フル・ストップの後に4桁のステップ値を設定しよう。
  • digits変数には4(小数点以下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);
       //------------------------------------------------


    結果:

    • 最初、小数点以下は3桁でした(ソフトウェア変更前の元の数値)。


    • 次に、ソフトウェアの呼び出しによって精度が4桁になった:


    • 次に7桁に:
    //Setting 7 digits after the decimal point:
    
    w6_d_p5_S_EDIT_Spin_the_value(7,p5_DIGITS);



    結果:

    • スライダーと同様に、ボタン・フィールドの元の数値範囲の境界をプログラムでリセットする機能が利用可能です。
    • 異なる小数点以下の桁数を設定することで、2倍値の初期精度をプログラムで変更することが可能です。
    • スライダーが負の数の境界内で値を計算する問題があります(修正予定)。
    • 要素パラメータの元の型をリセットすることはできません

    以上でこのトピックを終了します。

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

    13.要素の状態を問い合わせる _GET_STATE.

    インターフェースの 1つまたは別の要素の状態をプログラムで取得する必要がある場合がよくある。この問題を解決するために、_GET_STATEという 識別子が作られます。

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

    *重要: request_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.ウィンドウを開き、"Start "ボタンの初期状態を取得します:


    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ファイルから"Set an option"チェックボックスを見つけてください。
    • チェックされている 場合とチェックされていない 場合の 両方について _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_EDIT およびEDIT 入力フィールドの状態を返します。

     

    13.状態リクエスト_GET_STATE。

    パート2:D_LIST、H_SLIDER、EDIT、S_EDIT 要素の状態を取得する

    前編では、BUTTON ボタンとCHECKBOX チェックボックスの状態をプログラムで返す方法を見ました。GET_STATE クエリーを使用し、関数が返す状態名のリストを示しました。全部で6つの名前があり、それぞれが接頭辞v_で 始まります。(valueの 略語で、stateの 略語である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ファイルで押された瞬間をキャッチすることができる。はい、しかしこの機能はまだ他のプログラムでは利用できません。次のバージョンでは、HIGHLIGHTED 状態復帰がすべての インタラクティブ要素に追加されます。こうすることで、ユーザーはプログラムのどこからでも、要素が押さ れたばかりのか、押されていない のか、長い間その状態にあるのかを知ることができるようになります。

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


    実用的な部分に移りましょう:

    • D_LIST、H_SLIDER、EDIT、S_EDITの 要素を持つ2つのウィンドウを開いてみましょう
    • 開いた直後のエレメントの状態を返そう。

    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_LISTcnomeの全要素は 状態インデックス15(ニュートラル状態 v_NEUTRAL_STATE)を 持つD_LISTは エラー(-1)を返した。


    理由: この要素の状態を返すことが中央関数で指定されていない 技術的な欠陥です。次のバージョンで修正されます

    D_LIST 関数は まだ 状態インデックスを返さないので、状態が正常に受信された3つの項目に注目してみましょう EDIT 、S_EDIT、H_SLIDER

    何をチェックするか:

    • 要素がロックされ、クリックされたときに関数が返すインデックス。
    • 与えられた要素がHIGHLIGHTED ハイライト)状態かどうか。言い換えれば、要素がクリックされたかどうかを知ることができるかどうか。

    EDIT、S_EDIT、H_SLIDERの 各要素関数は、ウィンドウを開いたときのニュートラル状態のインデックスを返すことを確認しました。 あとは他の状態を確認します。これらのタイプの要素は、理論的には、ニュートラルロックハイライトの 3つの状態にしかならないので(ボタンやチェックボックスのように多くの状態があるのとは異なります)、ロックと ハイライトの 2つの状態をチェックしなければなりません。また、「カーソルの下」状態というグループもあるが、混乱を避けるためにまだ追加したくない。次のバージョンでは、各タイプの要素の可能な状態の個別のリストを開く特別な接頭辞を作るつもりだ。これにより、プログラム上の作業がより簡単になるだろう。

    EDIT、S_EDIT、H_SLIDERの ブロック状態とハイライト状態の戻りをどのようにチェックするか:

    • APIファイルから「オプションを設定する」チェックボックスを探してみよう。
    • そのケースの中にEDIT、S_EDIT、H_SLIDER要素のロックとアンロックを書き、その状態をprint()する。
    • APIファイルから EDIT、S_EDIT、H_SLIDER 要素を見つけよう
    • これらのエレメントに値を入力した場合のステート・リターンを書く。
    • 得られた結果をPrint()で表示してみよう。
    //-------------------------------------------------------------------------------------------------

    1.APIファイルから "Set an option " チェックボックスを探しそのケース内に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;


    結果

    • チェックボックスをクリックすると、要素関数はv_NEUTRAL_BLOCKED(ニュートラル・ロック)状態に対応するインデックス64を返します。
    • チェックボックスのチェックを外すと、要素関数は状態v_NEUTRAL_STATE(ニュートラル状態)に対応するインデックス15を返します。

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

     

    2.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: ユーザー・インタラクション・イベントで、v_ACTIVATED_HIGHLIGHTED アクティブ化、ハイライト表示)を意味する67の状態インデックスを返します。

    • S_EDIT: ユーザーとの対話イベント時に、v_ACTIVATED_HIGHLIGHTED アクティブ化、ハイライト表示)を意味する67の状態インデックスを返します。
    • H_SLIDER: ユーザーとの対話イベント時に、v_NEUTRAL_HIGHLIGHTED ( ニュートラル、点灯)とv_ACTIVATED_HIGHLIGHTED(アクティブ、点灯)を意味するインデックス66と67を交互に返します。バグ。次バージョンで修正。



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

    結果:

    一般に、結果は満足のいくものであると評価できる。各要素は、意図したとおりにニュートラルとロック状態のインデックスを返す。しかし、いくつかの欠点もあります:

    • D_LIST 要素関数は状態を返さない。
    • H_SLIDER 要素関数はv_NEUTRAL_ HIGHLIGHTEDとv_ACTIVATED_HIGHLIGHTED 状態のインデックスを交互に 返しますが、 v_ACTIVATED_HIGHLIGHTED(活性化、点灯)は 返さ れません

    結論:

    • 欠陥を修正する必要がある。
    • 特別な接頭辞s_で 呼ばれるインテリセンスのリストを作成し ユーザーがどのタイプの要素がどのステートを持つかを知り、コードで簡単に使える ように する必要がある。

    潜在的には、新しい要素の状態を追加することが可能である。例えば、Neutral pointedや Activated pointed( カーソルの下はニュートラル、カーソルの下はアクティベート)といった具合である 。しかし、 実用性の問題や、ユーザーがこれらの機能を本当に必要としているかという問題がある。そのような要求がない限り、私は新しいステートを追加するつもりはない。

    以上でこのトピックは終わりです


    さらに、次のトピックへ。

     

    先週、WinFormを使ってインターフェースを書き、それをMT5のチャートに埋め込む方法を研究していた。今日、ようやく実現した。

     
    動画のアップロードはgifのアップロードよりも簡単で、ファイルサイズも小さい。
     

    考慮すべきトピックの一般的なリスト

    1.インテリセンスのリストにおける方向と、右ウィンドウの機能の選択。

    2.プログラムによるウィンドウの開閉

    3. プログラムで利用可能なウィンドウ要素のリストを開く。

    4. 個々の要素プロパティのリストを開く。

    5.要素名とウィンドウ・ラッパー関数を解析する。

    6. 要素パラメーターの値をその型の変数に返す

    7.異なる型の要素パラメータに値を設定する。

    8.異なるエレメントのパラメーター間で値を返す、変更する、転送する。異なるタイプの要素と値を考慮し、異なるウィンドウで異なるタイプの要素間の転送をテストする。

    9.前の値を返す(_V_LAST)。いつ、どのような場合に最後の値が必要か(現在の値と混同しないように)。

    10.異なるエレメント・タイプに対するON、OFF、LOCK_ON、LOCK_OFF、LOCK、UNLOCK 状態の設定テスト。

    11. 要素の値の変化のバインディングと同期のテスト:例えば、ボタンとスライダーを持つ入力フィールド。1つの要素(手動またはソフトウェア)の値が変更されると、それに応じて2番目の要素の値も変更されるようにする。

    12.スライダーと ボタン付きフィールドの範囲境界をソフトウェアで取得/設定するテスト(プロパティ_V_MIN、_V_MAX、_V_STEP、_DIGITS)。

    13.アイテム・ステータス照会(_GET_STATE)の動作テスト。

    14.テキストとボーダーの色を、間隔を空けた値の境界にリンクする。

    15.APIファイルにおけるオリエンテーション

    16.メッセージウィンドウと警告ウィンドウの外観の簡単なプログラムロジックの実装。

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

    検討されたトピックは黄色でハイライトされている。

    現時点では、まだ検討すべきことが残っている:

    14.テキストとフレームの色を、間隔を置いた値の境界にリンクさせる。

    15.APIファイルにおけるオリエンテーション。

    16.メッセージ・ウィンドウと警告ウィンドウの外観に関する簡単なプログラム・ロジックの実装。

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

    トピック14とトピック16をリンクすることをお勧めします。パラメータ値の設定限界を超えると、まず要素の一部(テキスト、ベース、フレーム、ストライプなど)の色を変更する形でシグナルが発生し、次にダイアログ・ウィンドウが開き、次に警告ウィンドウが開きます。同時に、警告ウィンドウは、ユーザーが手動で閉じるまで、要素の値の変更をブロックします。


    また、テーマを追加したい:

    17. ユーザーが「キャンセル」ボタンをクリックすると、入力された設定をキャンセルする。

    一昔前に、「キャンセル」ボタンをクリックすると、 ユーザー設定をキャンセルする技術が開発され、ある程度テストされました。現時点では、以前の機能がどの程度機能するかは不明である。そのため、テストが必要である。


    トピックが重複するため、レビューの順序は以下のようになる:

    14.スタッガード・パラメーター・バウンダリー・プロテクションの実装:

    • プリセットされた境界内の設定を制御するロジックを記述し、警告システムを作成する。
    • 警告1:ユーザーは、エレメントの一部の色の変化という形でシグナルを受け取る。( テキスト、ベース、フレーム、スライダーバーの色を値の境界にリンクさ せる)。
    • 警告2:リスク通知と元の設定に戻ることを提案するダイアログボックスを開く。("Cancel " ボタンをクリックしたときに、実際に前の設定に戻すことができるかテストしてみましょう。)
    • 警告3: これ以上の設定変更をブロックし、免責事項を通知する警告ウィンドウを開き、ユーザーによる手動確認を要求する。(警告ウィンドウが表示されたときに、ウィンドウがブロックされることをテストしてみましょう。)


    15.新しいAPIファイルのプリントアウトを詳しく考えてみよう。

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


    次に、発見されたバグや不具合をすべて集めて、次回リリースのためのタスクリストを作る。

    修正と追加を加えた次のリリースの後、私はエンジンのさらなる開発の主要な方向性の1つであるテーブルに焦点を当てます。

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

    先週、WinFormを使ってインターフェースを書き、MT5のチャートに組み込む方法を学んできた。今日、ようやくその方法がわかった。


    そして、どうやってインターフェースをプログラミングコードと通信させるのか?

     
    Реter Konow #:

    そして、インターフェイスとプログラミング・コードとの接続をどのように確立するのか?

    さらにいくつかの質問があります:

    • MT5チャートにいくつのフォーム(ウィンドウ)を「構築」できますか?
    • どのようにデータをテーブルに変換するのですか?
    • ウィンドウを作成する際に、既製のテンプレートを使用できますか?
    • MT5 内で独自のタスクバーやコンテキストメニューを作成できますか?
    • アイテムのソフトウェアリターン/セットプロパティはどのように実装しますか?タイマー関数からDLLをポーリングしますか?
    あなたが見つけたソリューションについて詳しく教えてください。とても興味深いです。:)
     

    原則的には、誰もが自分の使いやすいツールを使うことができる。私は自分のインターフェイスが使いやすいので、それを開発している。言い換えれば、私自身のアルゴリズム取引に 使おうとしているの だ。フォーラムで解決策を公開することで、モチベーションが高まる。もし私のインターフェイスが誰かの役に立てば、それでいい。

    このインターフェイスには強力なツールがあり、MT5のアルゴリズム機能と組み合わせることで、正しい 取引の結果を拡大することができます。そう、この長い道のりで、私は「市場に行く」のだ。何年もかかるが、いずれにせよ、知性を磨くには時間がかかる。資金があっても頭脳がなければ、市場で取引する意味はないでしょう?

    WinFormsやそれに類するものを使うという決断は、本質的に不完全だと私は思う。それは、MT5から技術的に切り離し、独立したマルチウィンドウのWindowsアプリケーションを構築することにつながる。最初の段階では、へその緒のようなデータ・チャネルによってプラットフォームと接続されます。ユーザーはDLLポールを使ってくねくねと動き、 成功する可能性さえある。必要であれば、コンテキストメニューを作成し、ウィンドウを素早く作成するためのテンプレートを使うこともできるだろう。しかし結局のところ......、2つか3つのIDEで同時に、しかも異なるプログラミング言語で作業することになる。では、どうすればいいのだろう?そしてもっと重要なことは、どうすればもっと簡単になる のか、ということだ。

    その上、マルチウィンドウのWindowsアプリケーションを持つことで、ユーザーはそれを別の取引プラットフォームのAPIに直接接続することができる。そのため、タイマーを使って作業するよりも簡単なのだ。そして、市場についても言及する必要がある。彼の製品は、そこでは許可されません。一般的には、各自に。