記事"グラフィカルインタフェースX:リストとテーブルの高度な管理コードの最適化(ビルド7)"についてのディスカッション - ページ 8 123456789101112 新しいコメント Artyom Trishkin 2017.01.24 19:21 #71 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をお持ちで、そのような変更ですでに動作しているのかもしれませんね? Discussion of article "Graphical グラフィカルインタフェースX:リストとテーブルの高度な管理コードの最適化(ビルド7) グラフィカルインタフェースVII: テーブルコントロール(チャプター 1) Anatoli Kazharski 2017.01.24 19:26 #72 Artyom Trishkin:...もしかしたら、すでに別のバージョンのTable.mqhをお持ちで、この変更ですでに動作しているかもしれません。 バージョンは例の記事と同じです。私自身は何の問題も感じていません。理由がはっきりしないので、これ以上何もお手伝いできません。 Artyom Trishkin 2017.01.24 19:31 #73 Anatoli Kazharski: バージョンは例の記事と同じです。私自身は何の問題も感じていない。理由がはっきりしないので、これ以上何もお手伝いできません。 タイマーを動作させると、価格は新しいティックごとにテーブルで更新されますが、テーブルは正常に動作しますか? Anatoli Kazharski 2017.01.24 19:33 #74 Artyom Trishkin: タイマーを作動させ、新しいティックごとにテーブルの価格が更新されますが、テーブルの動作は正常ですか? はい。 Artyom Trishkin 2017.01.24 19:35 #75 Anatoli Kazharski: そうだね。 奇跡だよ。どのターミナルでも同じです。MT4でもまったく同じで、目に見える変化はありません。 Artyom Trishkin 2017.01.24 19:39 #76 Anatoli Kazharski: マウス操作を変更しましたか?カーソルを動かせば、ハイライトされた行はハイライトされるが点滅し、カーソルがその場にあれば、行のハイライトは表示されない。 Anatoli Kazharski 2017.01.24 19:49 #77 Artyom Trishkin: マウス操作を変更しましたか?カーソルを動かせば、ハイライトされた行はハイライトされますが、点滅し、カーソルがその場にあれば、行のハイライトは表示されません。 カーソルを動かせばハイライトされた行が点滅し、カーソルがその場にあればハイライトされた行は表示されません。今は何の問題もありません。すべてのライブラリファイルを再コンパイルしてみてください。 Artyom Trishkin 2017.01.24 19:51 #78 Anatoli Kazharski: あなたがおっしゃることは、私が申し上げた変更の前も同じでした。今は何の問題も見当たりません。すべてのライブラリファイルを再コンパイルしてみてください。 役に立ちませんでした。 Anatoli Kazharski 2017.01.24 20:00 #79 Artyom Trishkin: うまくいかなかった。 そうなると、あとは自分で解決しようとするしかない。 Anatoli Kazharski 2017.01.24 20:16 #80 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++; }//---あとは、もっと詳細が必要です。これは何ですか?:pr.pr.pr.pr.pr.pr.pr-- Discussion of article "Graphical グラフィカルインタフェースVII: テーブルコントロール(チャプター 1) グラフィカルインタフェースX: Timeコントロール、チェックボックスコントロールのリストとテーブルのソート(ビルド6) 123456789101112 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
わかったよ(苦笑)。ここで始めた例を続けよう。問題が顕在化し始めるレベルまで完成させてください。
いいえ、トル、あなたの例と同じです。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をお持ちで、そのような変更ですでに動作しているのかもしれませんね?
...
もしかしたら、すでに別のバージョンのTable.mqhをお持ちで、この変更ですでに動作しているかもしれません。
バージョンは例の記事と同じです。私自身は何の問題も感じていない。理由がはっきりしないので、これ以上何もお手伝いできません。
タイマーを作動させ、新しいティックごとにテーブルの価格が更新されますが、テーブルの動作は正常ですか?
そうだね。
マウス操作を変更しましたか?カーソルを動かせば、ハイライトされた行はハイライトされますが、点滅し、カーソルがその場にあれば、行のハイライトは表示されません。
あなたがおっしゃることは、私が申し上げた変更の前も同じでした。今は何の問題も見当たりません。すべてのライブラリファイルを再コンパイルしてみてください。
うまくいかなかった。
役に立たない。
何が強調されているかだけでなく、それがどこで使われているかにも注意を払おう:
取引、自動取引システム、取引戦略のテストに関するフォーラム
記事「グラフィカル・インターフェース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++;
}
//---
あとは、もっと詳細が必要です。
これは何ですか?: