文章 "图形界面 VII: 页面控件 (第二章)" - 页 2 123 新评论 Artyom Trishkin 2016.07.11 21:50 #11 Anatoli Kazharski:当然。)该类(CTabs)的下一个更新将是 "多行制表符模式"。就像这里(多行):超级棒可惜现在表格和列表还只是表格和列表。到目前为止,它们实际上只是数据的可视化,没有任何交互性。当然,我希望能在列表/表格中选取必要的列/行,并对它们进行一些操作--例如:在列表中放入复选框,或在一般情况下完全选取必要的行,并在单独的窗口中显示所选行的一般数据 ....。这样的功能真是太棒了)不过,要做到这一点,需要添加操作这些数据的方法。也许已经存在,但我不知道。 Anatoli Kazharski 2016.07.12 13:03 #12 Artyom Trishkin:太好了。可惜表格和列表只是表格和列表。到目前为止,它们实际上只是数据的可视化,没有任何交互性。...上述大部分功能都有了。在列表(CListView)中选择一个项目会产生一个事件,该事件可用于确定哪个项目被选中以及被选中的当前值。 在表格(CTable)中也是一样。选择表格行时,会产生一个事件,其参数包含行索引(参数dparam),通过该索引,可以使用CTable::GetValue() 方法获取该行单元格中的值://+------------------------------------------------------------------+ // 返回指定索引处的值 //+------------------------------------------------------------------+ string CTable::GetValue(const int column_index,const int row_index) { //--- 检查是否离开列范围 int csize=::ArraySize(m_vcolumns); if(csize<1 || column_index<0 || column_index>=csize) return(""); //--- 检查行范围退出 int rsize=::ArraySize(m_vcolumns[column_index].m_vrows); if(rsize<1 || row_index<0 || row_index>=rsize) return(""); //--- 返回值 return(m_vcolumns[column_index].m_vrows[row_index]); }//---在编辑表格单元格的模式下,会生成一个事件,在该事件的参数(参数sparam)中,你可以得到一个包含列号、行号和被编辑单元格中当前值的字符串,格式为 "column_row_text"。阿尔乔姆-特里什金当然,我希望能获取并选择列表/表格中必要的列/行,并对其进行一些操作--例如:有一个列表,放入复选框,或一般选择必要的行,并在一个单独的窗口中显示所选行的一般数据....。类似的东西将是超级棒的:)我稍后会为带有复选框和单选按钮的列表创建单独的类。 Martin Fischer 2016.08.25 14:52 #13 这篇文章写得很好,但目前我还有些问题: 1.) 我找不到如何在窗体中添加简单的 CLabel 或 CEdit 控件的信息(来自 objects.mqh)。(From objects.mqh) 它们没有类似 WindowPointer() 的函数。 我可以创建这些对象,但无法将它们附加到窗口。 CWndContainer::AddToElementsArray(m_subwin, _MyEditBox); 在这种情况下不起作用...... 2.) CComboBox 是静态对象吗?是否可以在创建后修改ComboBox-Listview 中的元素列表?谢谢! Artyom Trishkin 2016.11.03 20:20 #14 Tol,我赢不了的东西......有两个窗口。从第一个窗口--从主菜单打开第二个窗口,其中有 4 个带图标的选项卡。每个标签页都有自己的表格。问题是:打开第一个窗口时,总是可以看到最近创建的表格,而在打开窗口之前,标签页已按程序切换到所需的标签页,这并不重要--它被选中是应该的,但其上的表格不是与之绑定的表格,而是最新的表格。我做了一个例子。打开第一个窗口的图片: MetaTrader 交易平台截图 EURUSD, D1, 2016.11.03 MetaQuotes Software Corp., MetaTrader 5, 演示版 如您所见,选项卡 1 已突出显示,但绑定到选项卡 4 的表格是可见的--这已写入表格本身的列标题中。此外,如果切换选项卡,表格会放置在应该放置的位置,我用鼠标高亮显示了第二个选项卡: MetaTrader 交易平台截图 EURUSD, D1, 2016.11.03 MetaQuotes Software Corp., MetaTrader 5, 演示版 回到第一个: MetaTrader 交易平台截图 EURUSD, D1, 2016.11.03 MetaQuotes Software Corp., MetaTrader 5, 演示版 我做错了什么?还是出现了错误?预告片中的文件。指标。 附加的文件: ChartWindow07.mq5 6 kb Program.mqh 66 kb Anatoli Kazharski 2016.11.04 08:27 #15 Artyom Trishkin:...我做错了什么?还是出现了错误?对于CTabs 标签,它可以正常工作。但对于CIconTabs 标签,我还没有在库引擎中创建个人数组,也没有在打开对话框 时自动显示所选标签的内容。这将在下一次更新中修复。但作为临时解决方案,您可以在自定义类中跟踪对话框的打开并更新标签页,如下图所示://+------------------------------------------------------------------+//| 事件处理程序|//+------------------------------------------------------------------+void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX) { if(lparam==m_window2.Id()) m_icon_tabs.ShowTabElements(); } } Discussion of article "Graphical Resize Chart Window event 文章 "图形界面 X: 高级列表和表格管理。代码优化 Artyom Trishkin 2016.11.04 19:42 #16 Anatoli Kazharski:对于CTabs 类型的标签页,它可以正常工作。但对于CIconTabs 标签,我还没有在库引擎中创建个人数组,也没有在打开对话窗口时自动显示所选标签的内容。这将在下一次更新中修复。但作为临时解决方案,您现在已经可以在自定义类中跟踪对话框的打开情况,并更新标签页,如下图所示://+------------------------------------------------------------------+//| 事件处理程序|//+------------------------------------------------------------------+void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX) { if(lparam==m_window2.Id()) m_icon_tabs.ShowTabElements(); } } 谢谢。它是这样工作的。现在我将在每个选项卡中放入两个重叠的表格--让我们拭目以待;) Kamil Wu 2019.04.03 04:04 #17 你好,如果我卷起对话框并更改周期,对话框在 MT4 中就会失效。 Francuz 2019.04.18 12:09 #18 编译时会产生类似'return' - cannot convert from const pointer to nonconst pointer SplitButton.mqh 90 65 的错误。删除相应行中的 Const 即可解决。 Jefferson Judge Metha 2019.10.11 03:30 #19 我正试图在标签页中添加一个输入框,但无法正常工作。input double whenToTrail=10.3; class CProgram: public CWndEvents { protected: CSpinEdit m_StartTS; //Code protected: bool CreatetrailStop(const int x_gap, const int y_gap, const string text); }; 那么函数 bool CProgram::CreatetrailStop(const int x_gap, const int y_gap, string text) { //--- 保存指向主元素的指针 m_StartTS.WindowPointer(m_window); //--- 坐标 int x = m_window.X() + x_gap; int y = m_window.Y() + y_gap; //--- 为标签页预留 m_tabs.AddToElementsArray(1, m_StartTS); //--- 属性 m_StartTS.XSize(95); m_StartTS.YSize(15); m_StartTS.EditXSize(40); m_StartTS.MinValue(0.01); m_StartTS.StepValue(0.01); m_StartTS.SetDigits(1); m_StartTS.SetValue(NormalizeDouble(whenToTrail,1)); m_StartTS.ResetMode(true); //--- 创建一个控件 if(!m_StartTS.CreateSpinEdit(m_chart_id, m_subwin, text, x, y)) return(false); //--- 将对象添加到对象组的通用数组中 CWndContainer::AddToElementsArray(0, m_StartTS); return(true); } 该对象没有附加到面板上,而是在图表上。,删除图表后,该对象仍然存在。 barcla 2021.06.11 17:58 #20 嗨,我对这篇文章很感兴趣,我试着安装了它,但在编译时却出现了这些错误: 资源文件 '\ Images \ EasyAndFastGUI \Controls\ LeftTransp_black.bmp' 未找到 Calendar.mqh 443 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ LeftTransp_blue.bmp' 未找到 Calendar.mqh 444 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ calendar_today.bmp' 未找到 Calendar.mqh 738 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ calendar_drop_on.bmp' 未找到 DropCalendar.mqh 435 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ calendar_drop_off.bmp' 未找到 DropCalendar.mqh 436 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ calendar_drop_locked.bmp' 未找到 DropCalendar.mqh 437 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ RightTransp_rotate_black.bmp' 未找到 TreeItem.mqh 247 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ RightTransp_rotate_white.bmp' 未找到 TreeItem.mqh 248 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_x_resize.bmp' 未找到 Pointer.mqh 8 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_x_resize_blue.bmp' 未找到 Pointer.mqh 9 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_y_resize.bmp' 未找到 Pointer.mqh 10 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_y_resize_blue.bmp' 未找到 Pointer.mqh 11 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_xy1_resize.bmp' 未找到 Pointer.mqh 12 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_xy1_resize_blue.bmp' 未找到 Pointer.mqh 13 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_xy2_resize.bmp' 未找到 Pointer.mqh 14 11 资源文件 'Images\ EasyAndFastGUI\ Controls\ pointer_xy2_resize_blue.bmp' 未找到 Pointer.mqh 15 11 资源文件 'Images\ EasyAndFastGUI \ Icons \ bmp16 \ folder.bmp' 未找到 FileNavigator.mqh 284 11 资源文件 'Images\ EasyAndFastGUI\ Icons\ bmp16\ text_file.bmp' 未找到 FileNavigator.mqh 285 11 我查看了 MQL5 压缩文件,但文件不在那里,有什么办法可以得到它们吗? 谢谢。 Discussion of article "Graphical 文章 "利用 Donchian 通道进行交易" 图形界面 VIII: 树形视图控件 (第二章) 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
当然。)
该类(CTabs)的下一个更新将是 "多行制表符模式"。
就像这里(多行):
超级棒可惜现在表格和列表还只是表格和列表。到目前为止,它们实际上只是数据的可视化,没有任何交互性。
当然,我希望能在列表/表格中选取必要的列/行,并对它们进行一些操作--例如:在列表中放入复选框,或在一般情况下完全选取必要的行,并在单独的窗口中显示所选行的一般数据 ....。这样的功能真是太棒了)
不过,要做到这一点,需要添加操作这些数据的方法。也许已经存在,但我不知道。
太好了。可惜表格和列表只是表格和列表。到目前为止,它们实际上只是数据的可视化,没有任何交互性。
...
上述大部分功能都有了。
在列表(CListView)中选择一个项目会产生一个事件,该事件可用于确定哪个项目被选中以及被选中的当前值。
在表格(CTable)中也是一样。选择表格行时,会产生一个事件,其参数包含行索引(参数dparam),通过该索引,可以使用CTable::GetValue() 方法获取该行单元格中的值:
//---
在编辑表格单元格的模式下,会生成一个事件,在该事件的参数(参数sparam)中,你可以得到一个包含列号、行号和被编辑单元格中当前值的字符串,格式为 "column_row_text"。
当然,我希望能获取并选择列表/表格中必要的列/行,并对其进行一些操作--例如:有一个列表,放入复选框,或一般选择必要的行,并在一个单独的窗口中显示所选行的一般数据....。类似的东西将是超级棒的:)
我稍后会为带有复选框和单选按钮的列表创建单独的类。
1.)
我找不到如何在窗体中添加简单的 CLabel 或 CEdit 控件的信息(来自 objects.mqh)。(From objects.mqh)
它们没有类似 WindowPointer() 的函数。
我可以创建这些对象,但无法将它们附加到窗口。
在这种情况下不起作用......
2.)
CComboBox 是静态对象吗?是否可以在创建后修改
ComboBox-Listview 中的元素列表?
谢谢!
Tol,我赢不了的东西......有两个窗口。从第一个窗口--从主菜单打开第二个窗口,其中有 4 个带图标的选项卡。每个标签页都有自己的表格。
问题是:打开第一个窗口时,总是可以看到最近创建的表格,而在打开窗口之前,标签页已按程序切换到所需的标签页,这并不重要--它被选中是应该的,但其上的表格不是与之绑定的表格,而是最新的表格。
我做了一个例子。打开第一个窗口的图片:
MetaTrader 交易平台截图
EURUSD, D1, 2016.11.03
MetaQuotes Software Corp., MetaTrader 5, 演示版
如您所见,选项卡 1 已突出显示,但绑定到选项卡 4 的表格是可见的--这已写入表格本身的列标题中。
此外,如果切换选项卡,表格会放置在应该放置的位置,我用鼠标高亮显示了第二个选项卡:
MetaTrader 交易平台截图
EURUSD, D1, 2016.11.03
MetaQuotes Software Corp., MetaTrader 5, 演示版
回到第一个:
MetaTrader 交易平台截图
EURUSD, D1, 2016.11.03
MetaQuotes Software Corp., MetaTrader 5, 演示版
我做错了什么?还是出现了错误?
预告片中的文件。指标。
...
我做错了什么?还是出现了错误?
对于CTabs 标签,它可以正常工作。但对于CIconTabs 标签,我还没有在库引擎中创建个人数组,也没有在打开对话框 时自动显示所选标签的内容。这将在下一次更新中修复。
但作为临时解决方案,您可以在自定义类中跟踪对话框的打开并更新标签页,如下图所示:
//| 事件处理程序|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX)
{
if(lparam==m_window2.Id())
m_icon_tabs.ShowTabElements();
}
}
对于CTabs 类型的标签页,它可以正常工作。但对于CIconTabs 标签,我还没有在库引擎中创建个人数组,也没有在打开对话窗口时自动显示所选标签的内容。这将在下一次更新中修复。
但作为临时解决方案,您现在已经可以在自定义类中跟踪对话框的打开情况,并更新标签页,如下图所示:
//| 事件处理程序|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
if(id==CHARTEVENT_CUSTOM+ON_OPEN_DIALOG_BOX)
{
if(lparam==m_window2.Id())
m_icon_tabs.ShowTabElements();
}
}
我正试图在标签页中添加一个输入框,但无法正常工作。
那么函数
该对象没有附加到面板上,而是在图表上。
,删除图表后,该对象仍然存在。