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

 

アナトールさん、プログレスバーのプロセス説明を動的に変更することは可能ですか?

シンボル名の 配列があるとします。この配列をループして文字名を取得します。次に、各シンボルをプログラムで処理してデータを取得します。全体のサイクルは1つのプログレスバーで表示されますが、個々のシンボルを処理するプロセスも表示したいと思います。従って、「CMGを処理する」という処理名に符号をつけ、次の処理をするときには、すでに「EQIXを処理する」などと別の処理名を書いておく。

どのようなシンボルが配列に入っているかは事前にわからない。つまり、プログレスバーの束を用意することはできないし、異なるシンボルの名前が1000以上あると最適とはいえない......。

 
Artyom Trishkin:

アナトールさん、プログレスバーのプロセス説明を動的に変更することは可能ですか?

シンボル名の 配列があるとします。この配列をループして文字名を取得します。次に、各シンボルをプログラムで処理してデータを取得します。全体のサイクルは1つのプログレスバーで表示されますが、個々のシンボルを処理するプロセスも表示したいと思います。従って、「CMGの処理」という処理名に符号をつけ、次の処理をするときには、すでに「EQIXの処理」というように、別の処理名を書いておく。

配列の中にどんなシンボルが入っているか事前にわからない、つまりプログレスバーを何本も用意することはできないし、異なるシンボルの名前が1000以上あると最適とは言えない......。

今はそのような方法はない。次のアップデートでは、テキストの説明がある各要素に対してこの機能を追加する予定です。つまり、アイテム作成後にテキストを変更できるようにする。
 
Anatoli Kazharski:
今のところ、そのようなメソッドはありません。次回のアップデートでは、テキストの説明を持つ各要素に対してこの機能を追加する予定です。つまり、アイテム作成後にテキストを変更できるようになります。

ありがとうございます。)

質問: サンプルの中にプログレスバーを作るためのコードがあります:

//+------------------------------------------------------------------+
| プログレス・バーを作成する|
//+------------------------------------------------------------------+
bool CProgram::CreateProgressBar(const int x_gap,const int y_gap)
  {
//--- フォームへのポインタを保存する
   m_progress_bar.WindowPointer(m_window);
//--- 座標
   int x=m_window.X()+x_gap;
   int y=m_window.Y()+y_gap;
//--- 作成前にプロパティを設定する
   m_progress_bar.YSize(15);
   m_progress_bar.BarYSize(11);
   m_progress_bar.BarXOffset(65);
   m_progress_bar.BarYOffset(2);
   m_progress_bar.BarBorderWidth(1);
   m_progress_bar.LabelText("Processing:");
   m_progress_bar.AreaColor(C'225,225,225');
   m_progress_bar.BarAreaColor(clrWhiteSmoke);
   m_progress_bar.BarBorderColor(clrWhiteSmoke);
   m_progress_bar.IsDropdown(true);
   m_progress_bar.AutoXResizeMode(true);
   m_progress_bar.AutoXResizeRightOffset(230);
//--- 要素の作成
   if(!m_progress_bar.CreateProgressBar(m_chart_id,m_subwin,x,y))
      return(false);
//--- 要素を隠す
   m_progress_bar.Hide();
//--- ベースの要素へのポインタを追加する。
   CWndContainer::AddToElementsArray(0,m_progress_bar);
   return(true);
  }
//+------------------------------------------------------------------+

ドロップダウン要素の属性は何ですか?

m_progress_bar.IsDropdown(true);

???

 
Artyom Trishkin:

質問:あなたのサンプルには、プログレス・バーを構築するための次のようなコードがあります:

ドロップダウン要素の特徴は何のためですか?

???

フォームが展開されたときにプログレス・バーを表示しないようにするためです。
 
Anatoli Kazharski:
フォームが展開されたとき、プログレスバーが表示されるべきでないときに、プログレスバーが表示されないようにする。
これは、あなたのライブラリで構築できるすべてのオブジェクトに当てはまりますか?
 
Artyom Trishkin:
これは、ライブラリを使用して構築できるすべてのオブジェクトに適用されますか?
はい。IsDropdown()メソッドはCElement 基底クラスにあり、すべてのGUI 要素で使用できます。
 

プログレスバーのプロパティを動的に変更することはできません。

例えば、私は色を変更したかった:

   void              IndicatorColor(const color clr)    { m_indicator_color=clr;           }

ゼロ回答。どうやら、Updateメソッドでは、インデックスと合計値の変更に加えて、他のm_indicator_colorなどを書き込む必要があるようだ。そうでなければ、これらのメソッドは作成時以外にはどこにも適用されない。それとも、これが意図された方法だったのだろうか?

 
Alexander Fedosov:

...そうでなければ、これらの方法は創造時以外には適用されない。それとも、それが意図された方法だったのでしょうか?

はい、これは暫定版です。まもなく(次の数記事で)、すべてのコントロールに対して大規模なアップデートが行われ、実行 時にどのプロパティも変更できるようになります。
 
Anatoli Kazharski:
そう、これは暫定版だ。まもなく(次の数記事で)、すべてのコントロールの大規模なアップデートが行われ、実行 時にどんなプロパティでも変更できるようになる。

楽しみだ。その間に、一時的な解決策を見つけた:

//+------------------------------------------------------------------+
//|| プログレス・バーを更新|
//+------------------------------------------------------------------+
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);
   
   m_indicator.BackColor(m_indicator_color);
   m_indicator.Color(m_indicator_color);
  }
 
172218684:
あなたはすべてのこの金の戦闘に単一のグループ172218684 172218684を叫んで、利益を得るために継続され、ここで検証を叫ぶシングル - 強さはプライスレスです!

嘘つき