文章 "图形界面 X: 高级列表和表格管理。代码优化 (集成构建 7)" - 页 9 123456789101112 新评论 Artyom Trishkin 2017.01.25 07:37 #81 托尔,谢谢你的提示://--- 栏 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++; } 所以,一切正常运行;) Discussion of article "Graphical 图形界面 VII: 表格控件 (第一章) 图形界面 X: 时间控件, 复选框列表控件和表格排序 Artyom Trishkin 2017.01.26 10:51 #82 关于交易、自动交易系统和测试交易策略的论坛 EasyAndFastGUI 库 Viktor Glovluk, 2017.01.26 10:42 AM. 亲爱的论坛成员,请帮帮忙!在Anatoli Kazharski 提供的这个库的基础上,我试图焊接一只猫头鹰,并希望在文件中组织复选框状态和输入字段值的记录!但为了避免每次都记录所有值,我不知道如何确定被点击的元素!在用户应用程序中有一个事件处理程序,参数 lparam 只负责提供元素的索引,但我不明白如何通过这个索引找到元素,然后进行处理!在此先表示感谢! Anatoli Kazharski 2017.01.26 11:03 #83 Viktor Glovluk, 2017.01.26 10:42亲爱的论坛成员,请帮帮我!在Anatoli Kazharski 提供的这个库的基础上,我正在尝试焊接一只猫头鹰,并希望在文件中记录复选框的状态和输入字段的值!但为了避免每次都记录所有值,我不知道如何确定被点击的元素!在用户应用程序中有一个事件处理程序,参数 lparam 只负责提供元素的索引,但我不明白如何通过这个索引找到元素,然后进行处理!在此先表示感谢!点击复选框可以通过标识符为ON_CLICK_LABEL 的 事件进行跟踪。 lparam 中包含元素标识符的值。例如//+------------------------------------------------------------------+//| 事件处理程序|//+------------------------------------------------------------------+void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) {//--- 文本标签上的点击事件 if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL) { //--- 如果你点击了第一个复选框 if(lparam==m_checkbox1.Id()) { //--- } } } Viktor Glovluk 2017.01.26 11:04 #84 这真的是唯一的办法吗?//--- 如果你点击了第一个复选框if(lparam==m_checkbox1.Id()) 在我发帖后已经得到答复!谢谢!我必须查看所有复选框和输入框 吗?举个例子,如果有 "一堆 "复选框和输入框?有没有数组存储所有项目的索引?然后通过该索引获取必要的值(例如,已点击或未点击的复选框、输入字段中的值)! Anatoli Kazharski 2017.01.26 11:06 #85 Viktor Glovluk:这是唯一的办法吗? 你想怎么做?说清楚。 Anatoli Kazharski 2017.01.26 11:17 #86 Viktor Glovluk:...如果有 "一堆 "元素,该如何举例?有没有存储所有元素索引的数组?那么就可以通过这个索引来获取必要的值(例如,已点击或未点击的复选框、输入框中的值)!看看CWndContainer 类的内容。它们都存储在WindowElements 结构中。可以通过用户类访问它们。 //--- 元素数组的结构 struct WindowElements { //--- 所有对象的总数组 CChartObject *m_objects[]; //--- 所有元素的总数组 CElementBase *m_elements[]; //--- 个人元素数组: // 上下文菜单数组 CContextMenu *m_context_menus[]; //--- 主菜单数组 CMenuBar *m_menu_bars[]; //--- 工具提示 CTooltip *m_tooltips[]; //-- 不同类型的下拉列表数组 CElementBase *m_drop_lists[]; //--- 滚动条数组 CElementBase *m_scrolls[]; //-- 文本标签表数组 CElementBase *m_labels_tables[]; //-- 来自输入字段的表格数组 CElementBase *m_tables[]; //-- 绘制的表格数组 CElementBase *m_canvas_tables[]; //--- 标签数组 CTabs *m_tabs[]; //-- 带图片的标签数组 CIconTabs *m_icon_tabs[]; //-- 日历数组 CCalendar *m_calendars[]; //--- 下拉日历数组 CDropCalendar *m_drop_calendars[]; //-- 树状列表 CTreeView *m_treeview_lists[]; //--- 文件导航器 CFileNavigator *m_file_navigators[]; //--- 标准图形(图形对象) CStandardChart *m_sub_charts[]; //--- 图片滑动条 CPicturesSlider *m_pictures_slider[]; //--- 时间 CTimeEdit *m_time_edits[]; //-- 多行字段 CTextBox *m_text_boxes[]; }; //-- 每个窗口的元素数组阵列 WindowElements m_wnd[]; Discussion of article "Graphical 图形界面 XI: 渲染控件 (统合构建14.2) Viktor Glovluk 2017.01.27 11:58 #87 越远越好!:)我又一次遇到了我无法理解的事件处理程序实现!创建自定义应用程序时,应该通过一个类来连接图形用户界面://--- 连接贸易面板类#include "Menu.mqh" CProgram program;但是,如果按钮按下、复选框的状态和输入框 的值都在 CProgram 类的私有 区域内,又该如何捕捉它们呢?我是否应该把我需要的东西移到公共 区域,还是我误解了什么? Anatoli Kazharski 2017.01.27 12:14 #88 Viktor Glovluk:...但是,如何捕捉按钮的按下、如何获取复选框的状态和输入框 的值,等等......在CP 程序 处理程序中//+------------------------------------------------------------------+//| 事件处理程序|//+------------------------------------------------------------------+void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) {//--- 文本标签上的点击事件 if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL) { } } //---所有文章都有 MQL 应用程序示例文件,展示如何处理控件 事件。 Viktor Glovluk 2017.01.27 12:42 #89 Anatoli Kazharski:在CP 程序 处理程序中//+------------------------------------------------------------------+//| 事件处理程序|//+------------------------------------------------------------------+void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) {//--- 文本标签上的点击事件 if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL) { } } //---所有文章都有 MQL 应用程序示例文件,展示了如何处理控件事件。在CProgram 处理程序中很清楚,但这个处理程序是用于界面的,对吗?你不应该把交易解决方案塞进去!我对 OOP 了解甚少,大部分知识都来自您的文章,所以我可能很笨!:)那么,举个例子,如何在 Expert Advisor(智能交易系统)中实现订单的开仓,而订单的手数是在输入栏中 设置的?我需要在 EA 中获取该字段的值! Anatoli Kazharski 2017.01.27 12:46 #90 Viktor Glovluk:在CProgram 处理程序中很清楚,但这个处理程序是为界面服务的,不是吗?你不应该把贸易解决方案塞进去!为什么不呢?可以。它是您的 MQL 应用程序(指标或智能交易系统)的一个类。一切都一样。您可以像这样从输入字段 中获取值:m_spin_edit1.GetValue() 123456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
托尔,谢谢你的提示:
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++;
}
关于交易、自动交易系统和测试交易策略的论坛
EasyAndFastGUI 库
Viktor Glovluk, 2017.01.26 10:42 AM.
亲爱的论坛成员,请帮帮忙!
在Anatoli Kazharski 提供的这个库的基础上,我试图焊接一只猫头鹰,并希望在文件中组织复选框状态和输入字段值的记录!但为了避免每次都记录所有值,我不知道如何确定被点击的元素!在用户应用程序中有一个事件处理程序,参数 lparam 只负责提供元素的索引,但我不明白如何通过这个索引找到元素,然后进行处理!
在此先表示感谢!
Viktor Glovluk, 2017.01.26 10:42
亲爱的论坛成员,请帮帮我!
在Anatoli Kazharski 提供的这个库的基础上,我正在尝试焊接一只猫头鹰,并希望在文件中记录复选框的状态和输入字段的值!但为了避免每次都记录所有值,我不知道如何确定被点击的元素!在用户应用程序中有一个事件处理程序,参数 lparam 只负责提供元素的索引,但我不明白如何通过这个索引找到元素,然后进行处理!
在此先表示感谢!
点击复选框可以通过标识符为ON_CLICK_LABEL 的 事件进行跟踪。
lparam 中包含元素标识符的值。
例如
//| 事件处理程序|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- 文本标签上的点击事件
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
//--- 如果你点击了第一个复选框
if(lparam==m_checkbox1.Id())
{
//---
}
}
}
这真的是唯一的办法吗?
//--- 如果你点击了第一个复选框
if(lparam==m_checkbox1.Id())
在我发帖后已经得到答复!谢谢!我必须查看所有复选框和输入框 吗?举个例子,如果有 "一堆 "复选框和输入框?有没有数组存储所有项目的索引?然后通过该索引获取必要的值(例如,已点击或未点击的复选框、输入字段中的值)!这是唯一的办法吗?
...
如果有 "一堆 "元素,该如何举例?有没有存储所有元素索引的数组?那么就可以通过这个索引来获取必要的值(例如,已点击或未点击的复选框、输入框中的值)!
看看CWndContainer 类的内容。它们都存储在WindowElements 结构中。可以通过用户类访问它们。
struct WindowElements
{
//--- 所有对象的总数组
CChartObject *m_objects[];
//--- 所有元素的总数组
CElementBase *m_elements[];
//--- 个人元素数组:
// 上下文菜单数组
CContextMenu *m_context_menus[];
//--- 主菜单数组
CMenuBar *m_menu_bars[];
//--- 工具提示
CTooltip *m_tooltips[];
//-- 不同类型的下拉列表数组
CElementBase *m_drop_lists[];
//--- 滚动条数组
CElementBase *m_scrolls[];
//-- 文本标签表数组
CElementBase *m_labels_tables[];
//-- 来自输入字段的表格数组
CElementBase *m_tables[];
//-- 绘制的表格数组
CElementBase *m_canvas_tables[];
//--- 标签数组
CTabs *m_tabs[];
//-- 带图片的标签数组
CIconTabs *m_icon_tabs[];
//-- 日历数组
CCalendar *m_calendars[];
//--- 下拉日历数组
CDropCalendar *m_drop_calendars[];
//-- 树状列表
CTreeView *m_treeview_lists[];
//--- 文件导航器
CFileNavigator *m_file_navigators[];
//--- 标准图形(图形对象)
CStandardChart *m_sub_charts[];
//--- 图片滑动条
CPicturesSlider *m_pictures_slider[];
//--- 时间
CTimeEdit *m_time_edits[];
//-- 多行字段
CTextBox *m_text_boxes[];
};
//-- 每个窗口的元素数组阵列
WindowElements m_wnd[];
越远越好!:)
我又一次遇到了我无法理解的事件处理程序实现!创建自定义应用程序时,应该通过一个类来连接图形用户界面:
#include "Menu.mqh"
CProgram program;
但是,如果按钮按下、复选框的状态和输入框 的值都在 CProgram 类的私有 区域内,又该如何捕捉它们呢?我是否应该把我需要的东西移到公共 区域,还是我误解了什么?
...
但是,如何捕捉按钮的按下、如何获取复选框的状态和输入框 的值,等等......
在CP 程序 处理程序中
//+------------------------------------------------------------------+
//| 事件处理程序|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- 文本标签上的点击事件
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
}
}
//---
所有文章都有 MQL 应用程序示例文件,展示如何处理控件 事件。
在CP 程序 处理程序中
//+------------------------------------------------------------------+
//| 事件处理程序|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
{
//--- 文本标签上的点击事件
if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL)
{
}
}
//---
所有文章都有 MQL 应用程序示例文件,展示了如何处理控件事件。
在CProgram 处理程序中很清楚,但这个处理程序是用于界面的,对吗?你不应该把交易解决方案塞进去!我对 OOP 了解甚少,大部分知识都来自您的文章,所以我可能很笨!:)
那么,举个例子,如何在 Expert Advisor(智能交易系统)中实现订单的开仓,而订单的手数是在输入栏中 设置的?我需要在 EA 中获取该字段的值!
在CProgram 处理程序中很清楚,但这个处理程序是为界面服务的,不是吗?你不应该把贸易解决方案塞进去!
为什么不呢?可以。它是您的 MQL 应用程序(指标或智能交易系统)的一个类。一切都一样。
您可以像这样从输入字段 中获取值: