MQLで書かれたUIのギャラリー - ページ 70

 

トピック14.3:エレメント(フレーム、ベース、テキスト、スライダー、スライダーボード)の一部を点滅させることによる危険値の表示。

エレメントの点滅は、パラメータが危険値のゾーンに移行したことを知らせるカラー表示に追加する優れた方法です。新しいソリューションの実装は、以前のものと似ていますが、カラー表示が、値が危険値に近いほど色が明るくなるという原則に従って動作する場合、点滅は、点滅用に設定された色で初期色の変化の頻度を増加させるだけです。ユーザーは点滅の遅延時間をプログラムによって調整することができ、25ミリ秒まで徐々に短くしたり、2.5秒まで長くしたりすることができる。この場合、両方の機構を同時に作動させることができる。色はライトグリーンから明るい赤、ワインレッドへと変化し、点滅のスピードも速くなる。一方の機構がもう一方の機構を妨げることはない。次に、実用的な例を説明する。

*重要点滅はカラー表示機能とは独立して作動する。 この2つのメカニズムは技術的には無関係であり、並行して働くことも、別々に働くこともできる。

点滅を実装するために、インタラクティブ要素に新しいプロパティが追加された:

  • pn_BLINK_frame-. フレームの点滅 フレームを持つすべてのコントロールに追加。次の要素は除外されます:H_SLIDER、V_SLIDER、VALUE R_BUTTON CHECKBOX
  • PN_ BLINK_TEXT - ブリンクテキスト点滅テキスト。 テキストを持つすべての要素に追加されます。除外される要素:p_bar, d_bar, h_slider, v_slider。
  • pn_BLINK_base-ブリンクベースブリンクベース ベースを持つすべての要素に追加されます。次の要素は除外されます:CHECKBOX、R_BUTTON、D_LIST、C_LIST、VALUE。
  • pn_BLINK_bar -バーの 点滅 バーを持つ項目に追加されます: P_BAR , D_BAR,H_SLIDER, V_SLIDER。
  • pn_BLINK_handle - スライダの点滅H_SLIDER, V_SLIDER スライダに追加されます�


点滅の速度と停止を制御する新しいプロパティを追加しました:

  • pn_BLINK_DELAY - ブリンク遅延。 例外なくすべてのメイン要素に追加されます。*重要 - 遅延は、エレメントのすべての点滅部分に対して設定され、部分ごとに異なることはできません。 エレメントの、ソフトウェアで有効化された点滅を持つすべての部分(いくつか存在する可能性があります)は、同期して点滅します ただし、エレメント間の点滅速度は異なる可能性があり、これは完全にユーザーの裁量に任されています。
  • pn_BLINK_STOP エレメントのすべてのコンポーネントの点滅を 完全に 停止するコマンド
  • 現段階では、設定ウィンドウ・フレームの点滅を有効にすることが可能です。これを行うには、window関数を呼び出し、そこにpn_BLINK_frame プロパティの識別子を渡す必要があります そして色を指定します。すべてエレメントの場合とまったく同じです。

以上をまとめてみましょう:

  • ブリンク遅延pn_BLINK_DELAYは プログラムによって設定され、要素のすべての点滅部分に一度に適用されます。これらは同期して点滅します。
  • pn_BLINK_DELAY プロパティにはデフォルト値があります。ユーザーが明示的に指定しない限り、点滅遅延は20になり、1秒強になります(20*25ms)。
  • 要素は、一度に複数の部分を点滅させることも、一度に1つの部分を点滅させることもできます。その決定はユーザーが行う。
  • 点滅の過程で、プログラムによって色を変えたり、速度を調整したりすることができる。点滅機能については後述する。
  • 要素の別の部分を点滅させるには、関数を呼び出し、要素の部分の識別子と色を渡す必要があります。しかし、例えば、フレームが点滅していて、ユーザーがテキストを希望の値で点滅させ、フレームの点滅を止めたい場合、pn_BLINK_STOP コマンドを使って点滅を完全に止めてから、プログラム呼び出しによってテキストの点滅をオンにする必要があります。
  • ユーザーの要求に応じて、要素の構成要素を異なる色で点滅させることができます。例えば、テキストは緑、フレームは青、ベースは赤で点滅するように設定できます。さまざまなバリエーションがあります。ただし、 エレメント内のすべてのパーツの点滅速度は同じです
  • ウィンドウが最小化され、そのタブがタスクバー上にあり、ウィンドウ内に点滅する要素がある場合、タブは閉じたウィンドウの中で最も速く点滅する要素を自動的に選択し(ウィンドウが閉じられても実際に再描画されることはありません)、その頻度と色に合わせます。つまり、 タスクバーのタブは、そのウィンドウで最も速く点滅する要素の色と速度で点滅 します。 しかし、要素が値を受信している間に点滅速度を変更した場合、タブは自動的に別の要素を見つけ、その点滅速度と色を変更することによってそれ自体を再構築します。
  • ウィンドウ内の要素の点滅を完全に無効にした場合、タブの点滅は自動的に停止します。

明日は実践的な例について説明する。

今日は私たちが話していることを理解するための小さなデモです。



残念ながら、録画時にラグがあります。プロセッサーに負荷がかかっているのだ。しかし、このデモでは、エレメントが非同期でさまざまなスピードで点滅していることがわかる。エレメントの異なる部分も点滅している。これらはすべてプログラムで設定されている。そして、タスクバーのタブは自動的に最も速く点滅するエレメントを見つけ、青くなった。そして、その要素の点滅回数が減り始めると、もう1つの最も速く点滅する要素を見つけ、赤くなった。

これについては明日詳しく説明しよう。

追伸:これらの非常に便利な機能を使うためのオプションについても説明します。

 


昨日のトピックに続いて...。

今日はエレメントの点滅について概念的にまとめ、トピックを終える。

昨日は危険な値を知らせるという文脈で点滅を見ただけだったが、応用範囲はもっと広い。例を挙げよう:

複数の マーケットプレイスの状況を分析する多通貨のExpert Advisorを 想像してみよう。複雑な基準に従って最適なエントリー/エグジットポイントを選択するとする。このExpert Advisorは半自動モードで動作し、トレーダーは取引戦略のロジック全体をプログラムすることができないか、したくないとします。ロボットが市場を監視し、データを収集し、重要なポイントを通知します。エキスパートの仕事は、結果を分析し、表や図で表示することに限定される。取引の最終決定は人が行う。

このモデルでは、取引活動はリアルタイムのデータ・ストリームを観察し、一連の実行値をカスタム・パラメーターに詰め込むことからなる。後者は状況認識を拡大するのに役立つ。

しかし、ライブ取引ではタイムリーな意思決定が求められる。問題は、分析結果が複数のグラフィカル・ビューを通じて異なるウィンドウに表示される場合に生じる。注意を要する情報量が増え、注意の焦点が分かれる。その結果、トレーダーの頭の中で相場観が曇り、作業効率が低下する。疲労がやってくる。

この場合、点滅する要素は良い助けとなる:

  • 決断や行動の緊急性を知らせる。
  • 変化のスピードを知らせる。
  • 観察された出来事の関連性を知らせる。
  • 数値、差、範囲、合計、限界など、得られた結果の重要性を知らせる。

要約すると
  • 点滅には、注意喚起、警告、通知、合図、指示などの効果がある。
  • 点滅は集中力を高め、トレーダーの集中力を高める。
  • 点滅の頻度と色によって、意思決定や行動の緊急性が決まる。
  • 色の変化と組み合わせることで、点滅はGUIのインタラクティブ性を高め、トレーダーの効率を上げる。

それでは、新機能の実用的な内訳を説明しよう:

  • 1.準備行動の順序を決めよう。
  • 2.押しているときはボタン枠の点滅を有効にし、押していないときは点滅を無効にする。
  • 3.ボタン文字の点滅をオンにしよう。
  • 4.ボタンベースの点滅をオンにしましょう。
  • 5.ボタンを持つフィールド、スライダー、チェックボックスなど。
  • 6.ウィンドウ・フレームを点滅させましょう。
  • 7.要素の点滅速度を、スライダーとボタン付きフィールドの値と結びつけてみましょう。

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

1.準備動作の順番

  • まず、Blink_start() 関数とBlink_stop() 関数のラッパーを書きましょう。
  • Blink_start() 関数は、点滅のオン・オフを担当する。これはプレス・イベントで呼び出される。Blink_stop() 関数は、点滅を止める役割を果たします。Start " ボタンが押されたときに呼び出される
  • APIファイルからボタンを探し、ボタンが押されたときのBlink_start() 関数の呼び出しと、 ボタンが 押された ときのBlink_stop() 関数の呼び出しを書いてみよう
//-----------------------------------------------------
//This function will start the blinking of the elements.
//-----------------------------------------------------
void Blink_start()
{

}
//-----------------------------------------------------
//This function will stop the blinking of the elements.
//-----------------------------------------------------
void Blink_stop()
{

}


次に、APIファイルから「Start」ボタンのケースを探し、ボタンを押したイベントと押したイベントに対するBlink_start() 関数とBlink_stop() 関数の呼び出しを書いてみよう:

case Settings_example_1___Start:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when the button is pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case pressed:    Blink_start();  break;
  
                case released:   Blink_stop();   break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;


それでは、関数の中身を埋めていきましょう:

1.Start "ボタンのフレームを点滅させる必要がある。ボタン・フレームの点滅プロパティの識別子を p1_BLINK_frameと し、点滅する色と点滅するオブジェクトを指定する。

void Blink_start()
{
 //Setting the color and the part of the element that is suppoused to blink.
 w6_i_p1_BUTTON_Start((int)clrLimeGreen,p1_BLINK_frame);
}


2.次に、ボタンを離すと点滅が無効になるように実装します。p1_BLINK_STOPという 識別子が点滅を止める役割を担っている それ以外の部分を括弧で囲む必要はない。

void Blink_stop()
{
 //Stopping the blinking of all of the parts of the element all together:
 w6_i_p1_BUTTON_Start(p1_BLINK_STOP);
}


結果を確認してみよう:



3.フレームの代わりにボタン・テキストの点滅をオンにしてみましょう。テキストの点滅はpn_BLINK_text プロパティの識別子が担当します:

void Blink_start()
{
 //Setting the color and the part of the element that is suppoused to blink.
 w6_i_p1_BUTTON_Start((int)clrRed,p1_BLINK_text);
}

結果:ボタンのテキストは青く点滅し、ボタンが押されると点滅が止まります。



4.ボタン・ベースの点滅をオンにしてみましょう。pn_BLINK_base プロパティの識別子が、ベース部分を担当します

void Blink_start()
{
 //Setting the color and the part of the element that is suppoused to blink.
 w6_i_p1_BUTTON_Start((int)clrRed,p1_BLINK_base);
}

結果: ボタン・ ベースは 赤く点滅し、押されると点滅が止まる。



次に、ボタンのフレームとテキストの点滅を組み合わせてみましょう:

void Blink_start()
{
 //Setting the blinking of the frame and the text of the button
 w_6_Settings_example_1((int)clrRed,p8_BLINK_frame);
 w_6_Settings_example_1((int)clrRed,p8_BLINK_text);
}

結果:ボタンのフレームとテキストは、意図したように異なる色で同期して点滅します。


5.このウィンドウの他の要素を点滅につなげましょう:

void Blink_start()
{
 //Setting the color and the part of the element that is suppoused to blink.
 //-------------------------------------------------------------
 w6_i_p1_BUTTON_Start((int)clrLimeGreen,p1_BLINK_frame);
 w6_i_p1_BUTTON_Start((int)clrRed,p1_BLINK_text);
 //-------------------------------------------------------------
 w6_d_p5_S_EDIT_Spin_the_value((int)C'255,50,0',p5_BLINK_frame);
 w6_d_p5_S_EDIT_Spin_the_value((int)C'255,50,0',p5_BLINK_text);
 //-------------------------------------------------------------
 w6_i_p3_H_SLIDER_Roll_the_value((int)C'255,50,0',p3_BLINK_handle);
 w6_i_p3_H_SLIDER_Roll_the_value((int)C'255,50,0',p3_BLINK_bar);
 //-------------------------------------------------------------
 w6_i_p7_CHECKBOX_Set_an_option((int)C'255,50,0',p7_BLINK_text);
 //-------------------------------------------------------------
 w6_s_p6_D_LIST_D_LIST_1((int)C'255,50,0',p6_BLINK_frame);
 //-------------------------------------------------------------
}

点滅の無効化も Blink_stop( ) 関数内に書いてみましょう

void Blink_stop()
{
 //Stopping the blinking
 //-------------------------------------------------------------
 w6_i_p1_BUTTON_Start(p1_BLINK_STOP);
 //-------------------------------------------------------------
 w6_d_p5_S_EDIT_Spin_the_value(p5_BLINK_STOP);
 //-------------------------------------------------------------
 w6_i_p3_H_SLIDER_Roll_the_value(p3_BLINK_STOP);
 //-------------------------------------------------------------
 w6_i_p7_CHECKBOX_Set_an_option(p7_BLINK_STOP);
 //-------------------------------------------------------------
 w6_s_p6_D_LIST_D_LIST_1(p6_BLINK_STOP);
 //-------------------------------------------------------------
}

結果:新しい要素はBlink_start()とBlink_stop()に含まれ、意図したように点滅します。


6.ボタンがクリックされたときにウィンドウ・フレームが点滅するようにしてみましょう。(遅れている要素の点滅は一時的に無効にしよう)。

void Blink_start()
{
//Setting the blinking of the frame of the window:
 w_6_Settings_example_1((int)clrRed,p8_BLINK_frame);
}
void Blink_stop()
{
//Stopping the blinking of the frame of the window:
 w_6_Settings_example_1(p8_BLINK_STOP);
}


結果:ウィンドウ・フレームは意図したとおりに点滅する。


*重要:すべての考慮された要素と窓枠は、デフォルトの速度で点滅しました。

さらに、スライダー・ハンドルとボタン・フィールドを持つ要素の点滅速度を調節します。


7.点滅速度をボタンとスライダーのあるフィールドの値にバインドしてみましょう。すべての要素とウィンドウフレームが同時に点滅し、点滅速度はこれらの要素によって手動で設定されます。

点滅の速度はpn_BLINK_DELAYの 遅延に依存します。

  • 可能な遅延の最小値は1、最大値は99です。
  • ブリンク遅延時間を計算するには、その値に25(ms)を掛ける必要があります。
  • デフォルトでは、遅延は20に等しく、500ミリ秒(20*25ms)です。

この問題を解決するには、次のようにします:

  • 1.ボタンを押したり離したりしたときの全エレメントの点滅を復活させ、コール/ストップ・ウィンドウの点滅を追加する。
  • 2.新しい関数Blink_delay()を書き、そこに点滅の一時停止を設定するコールを配置する。この関数は遅延値を受け取る。
  • 3.3.APIファイルのスライダー要素と入力フィールドのケースから、現在の値を渡してBlink_delay() 関数を呼び出す

Blink_start() 関数の中にウィンドウフレームの点滅を追加する

void Blink_start()
{
 //Setting the color and the part of the element that is suppoused to blink.
 //-------------------------------------------------------------
 w_6_Settings_example_1((int)clrRed,p8_BLINK_frame);
 //-------------------------------------------------------------
 w6_i_p1_BUTTON_Start((int)clrLimeGreen,p1_BLINK_frame);
 w6_i_p1_BUTTON_Start((int)clrRed,p1_BLINK_text);
 //-------------------------------------------------------------
 w6_d_p5_S_EDIT_Spin_the_value((int)C'255,50,0',p5_BLINK_frame);
 w6_d_p5_S_EDIT_Spin_the_value((int)C'255,50,0',p5_BLINK_text);
 //-------------------------------------------------------------
 w6_i_p3_H_SLIDER_Roll_the_value((int)C'255,50,0',p3_BLINK_handle);
 w6_i_p3_H_SLIDER_Roll_the_value((int)C'255,50,0',p3_BLINK_bar);
 //-------------------------------------------------------------
 w6_i_p7_CHECKBOX_Set_an_option((int)C'255,50,0',p7_BLINK_text);
 //-------------------------------------------------------------
 w6_s_p6_D_LIST_D_LIST_1((int)C'255,50,0',p6_BLINK_frame);
 //-------------------------------------------------------------
}

Blink_stop() 関数内でウィンドウフレームの点滅を無効にする

void Blink_stop()
{
 //Stopping the blinking
 //-------------------------------------------------------------
 w_6_Settings_example_1(p8_BLINK_STOP);
 //-------------------------------------------------------------
 w6_i_p1_BUTTON_Start(p1_BLINK_STOP);
 //-------------------------------------------------------------
 w6_d_p5_S_EDIT_Spin_the_value(p5_BLINK_STOP);
 //-------------------------------------------------------------
 w6_i_p3_H_SLIDER_Roll_the_value(p3_BLINK_STOP);
 //-------------------------------------------------------------
 w6_i_p7_CHECKBOX_Set_an_option(p7_BLINK_STOP);
 //-------------------------------------------------------------
 w6_s_p6_D_LIST_D_LIST_1(p6_BLINK_STOP);
 //-------------------------------------------------------------
}

Blink_delay() 関数を書く:

スライダーと入力フィールド要素のイベントでBlink_delay()関数を呼び出し、要素の現在値を渡す:

void Blink_delay(uint delay)
{
 if(delay > 0 && delay < 100)
   {
    //-------------------------------------------------------------
    w_6_Settings_example_1(delay,p8_BLINK_DELAY);
    //-------------------------------------------------------------
    w6_i_p1_BUTTON_Start(delay,p1_BLINK_DELAY);
    //-------------------------------------------------------------
    w6_d_p5_S_EDIT_Spin_the_value(delay,p5_BLINK_DELAY);
    //-------------------------------------------------------------
    w6_i_p3_H_SLIDER_Roll_the_value(delay,p3_BLINK_DELAY);
    //-------------------------------------------------------------
   }
else Print("Wrong value!");
}

*重要:チェックボックスとドロップダウンリスト要素の点滅速度を変更することは不可能であることが判明しました。この速度は常に20(半秒)に等しい。これは意図的にやったことですが、将来的には変更するつもりです。他の要素は点滅速度を変えることができる。

Spin_the_value "要素(ボタンのあるフィールド)のイベントからBlink_delay() 関数を呼び出してみましょう。フィールドはスライダーに接続されているので、スライダーのケースに呼び出しを入れる必要はありません。接続はうまくいき、直接呼び出しのないスライダーはボタン付きフィールドを通して点滅速度を変更します:

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
               //------------------------------------------------------------------------------------------------------
               w6_i_p3_H_SLIDER_Roll_the_value((int)value);
              
               //Сalling the blinking delay function
               Blink_delay((int)value);
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;


結果:ボタン付きフィールドとスライダーは、ウィンドウ内のエレメントの点滅速度を変更します。



結果

  • 要素の点滅を実装することで、インターフェイスは以前よりずっとインタラクティブで有益になりました。
  • 要素の点滅を有効にしたり、制御したり、無効にしたりする方法はとても簡単で、このページの2つの投稿で詳しく説明しています。
  • メソッドはリスト化され、コード例とビデオで実演されています。
  • おそらく、将来的にはいくつかのニュアンスが改良されたり追加されたりする可能性がありますが、概して、基本的な点滅機能はすでに追加されており、大きな変更は必要ありません。
  • 要素パラメータの値を変えながら点滅の色を変えることができます。

私はこのトピックは出尽くしたと考える。


次は、「キャンセル」ボタンによる入力値のキャンセルです。

 
次のバージョンは来週の月曜日か火曜日にリリースされる予定です。このアップデートでは、上記の機能のほか、設定ウィンドウでのパラメータ入力のキャンセル/確認が含まれる予定です。また、カタログの英語化、特定された問題点のリストからのコードの改善・修正が行われる予定です。
 
Реter Konow #:
次のバージョンは来週の月曜日か火曜日にリリースされる予定です。このアップデートには、上記の機能のほか、設定ウィンドウでのパラメータ入力のキャンセル/確認が含まれる。さらに、カタログは英語に翻訳され、コードは特定された問題のコンパイルされたリストから調整と修正が行われる。
うまくいけば間に合うだろう。