記事"グラフィカルインタフェースIX:プログレスバーと折れ線グラフコントロール(チャプター2)"についてのディスカッション

 

新しい記事 グラフィカルインタフェースIX:プログレスバーと折れ線グラフコントロール(チャプター2) はパブリッシュされました:

第九部の第2章はプログレスバーと折れ線グラフに専念されます。いつものように、これらのコントロールがカスタムMQLアプリケーションでどのように使用できるかを明らかにする詳細な実施例が存在します。

開発されたライブラリでプログレスバーを作成するために使用されるすべてのコンポーネントを並べてみましょう。

  1. 背景
  2. 説明
  3. インディケータスクロールバー
  4. インディケータの背景
  5. 割合



図1 プログレスバーコントロールのコンポーネント

作者: Anatoli Kazharski

 

スーパーだ!

私の目から見ると、あなたはMQLのグラフィック開発者の中で間違いなくトップです。

私自身、目指すべきものがあるという結論に達した。

結果は素晴らしい!

さらなる発展を祈っています。

 
Реter Konow:

スーパーだ!

私の目から見ると、あなたはMQLのグラフィック開発者の中で間違いなくトップです。

私自身、目指すべきものがあるという結論に達した。

結果は素晴らしい!

さらなる発展を祈っています。

目指すべきものは常にある。)

巨匠ユーリ・クリコフの 作品をご覧ください。

 
Anatoli Kazharski:

努力することは常にある。)

ユーリ・クリコフ>>>>>。

ありがとうございます!

あのね、質問したかったんだけど...。

あなたはOOPを使ってプロジェクトを作成しました。ほとんどすべての基本的なコントロールを実装していますね。豊富なライブラリを作成しましたね。

と同時に、そのコードのうちどれぐらいがすでにあなたの仕事で使われているのでしょうか?

例えば、MTやCanvasなどのコントロールのライブラリはどの程度使いましたか?

個人的には、すべてをゼロから、まったく新しい技術で作らなければなりませんでした。

将来、私のプロジェクトの開発は、他の開発者によって継続されることはないでしょうし、他の開発者が開発に参加することもできないでしょう。

あなたの場合は逆だ。すべてのプログラマーが、あなたのライブラリの改良と開発に参加することができる。

そして、それを妨げる唯一のものは怠惰である。

 
Реter Konow:

同時に、あなたの仕事ですでに使ったコードはどれくらいありますか?

例えば、MTやCanvasなどのコントロールのライブラリはどれくらい使いましたか?

この連載の最初の記事で、私はこの質問に答えました:GUI I:ライブラリ構造の準備(第1章)。そこでは、標準的なグラフィカル・オブジェクト・プリミティブを扱うための標準ライブラリ・クラスの構造を示している。

私がプロジェクトで使っているクラスのリストは以下の通りである:

理想的には、CCanvas というクラスだけが残るべきです。このテーマに関する有益なトピックはこちら:Canvasでクラウドソース・プロジェクトを行う >>> です。

開発を始める前に、グラフィカル・インターフェースを作成するための標準ライブラリとドミトリー・フェドセーエフの バージョンを研究した。そして、個人的に欠けているものをリストアップして、プロジェクトに取りかかった。やるべきことのリストはまだかなり大きく、興味を持つ他のユーザーからの提案で常に更新されている。ただ、それはほとんど個人的なやり取りで起きていることなんだ。私たちはまた、私たちのプロジェクトでライブラリを使用する際に徐々に明らかになるバグやエラーに取り組んでいます。

これを妨げる唯一のものは怠惰です。

何の問題もありません。)

 
Anatoli Kazharski:

このシリーズの最初の記事で、私はこの質問に答えた:グラフィカル・インターフェース I:ライブラリ構造の準備(第1章)。そこでは、標準的なグラフィカル・プリミティブ・オブジェクトを扱うための標準ライブラリのクラス構造を示している。

私がプロジェクトで使っているクラスのリストは以下の通りである:

理想的には、CCanvas というクラスだけが残るべきです。このテーマに関する有用なトピック:Canvasでクラウドソース・プロジェクトを行う >>></p

開発を始める前に、グラフィカル・インターフェースを作るための標準ライブラリとドミトリー・フェドセーエフの バージョンを研究した。そして、個人的に足りないものをリストアップして、プロジェクトに取りかかった。やるべきことのリストはまだかなり大きく、興味を持つ他のユーザーからの提案で常に更新されている。ただ、それはほとんど個人的なやり取りで起きていることなんだ。また、私のプロジェクトでライブラリを使用する際に徐々に明らかになるバグやエラーにも取り組んでいる。

特に問題はありません。)

詳しい回答ありがとうございました。)

さらなる生産的なご活躍をお祈りしています。

 

Anatolyさん、押しつけがましくて申し訳ないのですが、重たい計算を伴うループの中でプログレス・バーを更新する方法を教えてください。

例えば、プログレスバーm_progress_barがあり、CProgramの中にループがあります。

   m_progress_bar.Show();  // なぜなら、このウィンドウがバインドされているウィンドウ(m_window.Show())を表示するときに、このウィンドウはすぐに表示されるからである、
                           // 非表示の状態で作成し、必要なときに表示したい
   int total=1000;         // プログレスバーで表示したいループの反復回数を指定する。 
   for(int i=0;i<total;i++)
     {
      Func();  // ループの各繰り返しで重い計算を行う関数
      m_progress_bar.Update(i,total);  // プログレス・バーは "hung "状態、つまり初期状態である。
     }
   //--- サイクルが完了すると、プログレスバーは非表示になる、 
   //--- そしてこの場合、ループ中は更新されず、別のオブジェクトと重なることで隠される。 
   m_progress_bar.Hide();  // プログレス・バーを隠すには、別のグラフィカル・オブジェクトの下に隠さなければならない。

このような "抽象的な "例で、私が理解していないことを説明していただけませんか?

 
データを渡しても問題ないだろう...。Artem、それは単なるデータ型 であり、値は割り当てられるべきである。
 
Алексей Тарабанов:
データを伝えても損はないだろう。

これはどうだ?

m_progress_bar.Update(i,total);
 
Artyom Trishkin:

これはどうですか?

うまくいかない。
 
Алексей Тарабанов:
うまくいかない。

どうして?

//+------------------------------------------------------------------+
//|| プログレス・バーを更新|
//+------------------------------------------------------------------+
void CProgressBar::Update(const int index,const int total)
  {
//--- 新しいインデックスを設定する
   CurrentIndex(index);
//--- 新しい範囲を設定する
   StepsTotal(total);
//--- インジケータの幅を計算する
   double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize();
//--- 1より小さい場合は調整する
   if((int)new_width<1)
      new_width=1;
   else
     {
      //--- フレームの幅を調整する
      int x_size=m_bar_bg.XSize()-(m_bar_border_width*2);
      //--- 範囲外の場合は調整する
      if((int)new_width>=x_size)
         new_width=x_size;
     }
//--- インジケータの新しい幅を設定する
   m_indicator.X_Size((int)new_width);
//--- パーセントを計算し、文字列を形成する。
   double percent =m_current_index/m_steps_total*100;
   string desc    =::DoubleToString((percent>100)? 100 : percent,m_digits)+"%";
//--- 新しい値を設定する
   m_percent.Description(desc);
  }
//+------------------------------------------------------------------+