文章 "图形界面 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()) { //-- 更新状态栏的第二个项目 m_status_bar.ValueToItem(1,::TimeToString(::TimeLocal(),TIME_DATE|TIME_SECONDS)); //--- 重绘图形 m_chart.Redraw(); }//--- 元素更新之间暂停 if(m_counter2.CheckTimeCounter()) { //--- 在第一行的价格栏中输入当前符号的价格值 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: 高级列表和表格管理。代码优化 (集成构建 图形界面 VII: 表格控件 (第一章) 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-- Discussion of article "Graphical 图形界面 VII: 表格控件 (第一章) 图形界面 X: 时间控件, 复选框列表控件和表格排序 123456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 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())
{
//-- 更新状态栏的第二个项目
m_status_bar.ValueToItem(1,::TimeToString(::TimeLocal(),TIME_DATE|TIME_SECONDS));
//--- 重绘图形
m_chart.Redraw();
}
//--- 元素更新之间暂停
if(m_counter2.CheckTimeCounter())
{
//--- 在第一行的价格栏中输入当前符号的价格值
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++;
}
//---
至于其他部分,你需要更多细节。
这是什么?: