記事"グラフィカルインタフェースX:リストとテーブルの高度な管理コードの最適化(ビルド7)"についてのディスカッション - ページ 8

 
Anatoli Kazharski:
わかったよ(苦笑)。ここで始めた例を続けよう。問題が顕在化し始めるレベルまで完成させてください。

いいえ、トル、あなたの例と同じです。Table.mqhでは最後のループに追加した:

//--- コラム
   for(uint c=l; c<m_visible_columns_total; c++)
     {
      //--- 垂直スクロールバー・スライダーの現在位置を取得する。
      v=m_scrollv.CurrentPos()+t;
      //--- 行
      for(uint r=t; r<m_visible_rows_total; r++)
        {
         //--- オフセット・テーブル・データ
         if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
           {
            //--- ハイライトされた行の調整
            color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
            color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];
            //--- セルの (1) 値、(2) 背景色、(3) 文字色、(4) 文字揃えを調整する。
            SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],m_vcolumns[h].m_cell_color[v],m_vcolumns[h].m_text_color[v],m_vcolumns[h].m_text_align[v]);
            v++;
           }
        }
      //---
      h++;
     }

Programme.mqhではタイマーを追加しました:

//+------------------------------------------------------------------+
//| タイマー|
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
  {
   CWndEvents::OnTimerEvent();
//--- 要素の更新と更新の間にポーズを入れる
   if(m_counter1.CheckTimeCounter())
     {
      //--- ステータスバーの2番目の項目を更新する
      m_status_bar.ValueToItem(1,::TimeToString(::TimeLocal(),TIME_DATE|TIME_SECONDS));
      //--- グラフを再描画する
      m_chart.Redraw();
     }
//--- 要素の更新と更新の間にポーズを入れる
   if(m_counter2.CheckTimeCounter())
     {
      //--- 最初の行の Price に現在のシンボルの価格値を入力する。
      MqlTick tick;                                                    
      if(SymbolInfoTick(Symbol(),tick))                                
        {                                                              
         int dg=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);        
         m_table.SetValue(1,1,DoubleToString(tick.bid,dg),dg);         
         m_table.UpdateTable();                                        
        }                                                              
      //--- 総数が指定された数より少ない場合、テーブルに行を追加する。
      if(m_table.RowsTotal()<m_spin_edit1.GetValue())
         m_table.AddRow();
      //--- カラムの総数が指定された数より少ない場合、テーブルにカラムを追加する。
      if(m_table.ColumnsTotal()<m_spin_edit2.GetValue())
         m_table.AddColumn();
      //--- 総数が指定された数より少ない場合、リストに項目を追加する。
      if(m_listview.ItemsTotal()<m_spin_edit5.GetValue())
        {
         m_listview.AddItem("SYMBOL "+string(m_listview.ItemsTotal()));
         //--- スクロールバーのスライダーをリストの最後に移動する。
         m_listview.Scrolling();
        }
      //--- 総数が指定された数より少ない場合、チェックボックスからリストに項目を追加する
      if(m_checkbox_list.ItemsTotal()<m_spin_edit5.GetValue())
        {
         m_checkbox_list.AddItem("Checkbox "+string(m_checkbox_list.ItemsTotal()));
         //--- スクロールバーのスライダーをリストの最後に移動する。
         m_checkbox_list.Scrolling();
        }
      //--- グラフを再描画する
      m_chart.Redraw();
     }
  }
//+------------------------------------------------------------------+

すべて以前と同じで、変化はありません。

もしかしたら、別のバージョンのTable.mqhをお持ちで、そのような変更ですでに動作しているのかもしれませんね?

 
Artyom Trishkin:

...

もしかしたら、すでに別のバージョンのTable.mqhをお持ちで、この変更ですでに動作しているかもしれません。

バージョンは例の記事と同じです。私自身は何の問題も感じていません。理由がはっきりしないので、これ以上何もお手伝いできません。
 
Anatoli Kazharski:
バージョンは例の記事と同じです。私自身は何の問題も感じていない。理由がはっきりしないので、これ以上何もお手伝いできません。
タイマーを動作させると、価格は新しいティックごとにテーブルで更新されますが、テーブルは正常に動作しますか?
 
Artyom Trishkin:
タイマーを作動させ、新しいティックごとにテーブルの価格が更新されますが、テーブルの動作は正常ですか?
はい。
 
Anatoli Kazharski:
そうだね。
奇跡だよ。どのターミナルでも同じです。MT4でもまったく同じで、目に見える変化はありません。
 
Anatoli Kazharski:
マウス操作を変更しましたか?カーソルを動かせば、ハイライトされた行はハイライトされるが点滅し、カーソルがその場にあれば、行のハイライトは表示されない。
 
Artyom Trishkin:
マウス操作を変更しましたか?カーソルを動かせば、ハイライトされた行はハイライトされますが、点滅し、カーソルがその場にあれば、行のハイライトは表示されません。
カーソルを動かせばハイライトされた行が点滅し、カーソルがその場にあればハイライトされた行は表示されません。今は何の問題もありません。すべてのライブラリファイルを再コンパイルしてみてください。
 
Anatoli Kazharski:
あなたがおっしゃることは、私が申し上げた変更の前も同じでした。今は何の問題も見当たりません。すべてのライブラリファイルを再コンパイルしてみてください。
役に立ちませんでした。
 
Artyom Trishkin:
うまくいかなかった。
そうなると、あとは自分で解決しようとするしかない。
 
Artyom Trishkin:
役に立たない。

何が強調されているかだけでなく、それがどこで使われているかにも注意を払おう:

取引、自動取引システム、取引戦略のテストに関するフォーラム

記事「グラフィカル・インターフェースX:高度なリストとテーブル管理」の議論。コードの最適化(ビルド7)"

Anatoli Kazharski, 2017.01.24 12:26 pm.

テーブルのハイライトされた行が点滅しないようにするには、最後のループでCTable::UpdateTable()メソッドに以下の行を 追加します:

//--- コラム
   for(uint c=l; c<m_visible_columns_total; c++)
     {
      //--- 垂直スクロールバー・スライダーの現在位置を取得する。
      v=m_scrollv.CurrentPos()+t;
      //--- 行
      for(uint r=t; r<m_visible_rows_total; r++)
        {
         //--- オフセット・テーブル・データ
         if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
           {
            //--- ハイライトされた行の調整
            color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
            color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];

            //--- セルの (1) 値、(2) 背景色、(3) 文字色、(4) 文字揃えを調整する。
            SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],back_color,text_color,m_vcolumns[h].m_text_align[v]);
            v++;
           }
        }
      //---
      h++;
     }

//---

あとは、もっと詳細が必要です。

これは何ですか?:

  1. pr.pr.pr.pr.pr.
  2. pr.
  3. pr--