文章 "图形界面 VI: 复选框控件,编辑框控件以及它们的组合类型 (第一章)" - 页 2 1234 新评论 Anatoli Kazharski 2016.10.05 12:20 #11 Thomas Schwabhäuser:...感谢您的建议! 我会增加这项功能。请关注本系列未来文章的更新。 Pavel Kolchin 2016.12.26 17:33 #12 在您的示例中,总是输出 id、lparam、dparam、sparam。 if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam); //Print(m_spin_edit1.GetValue()); }我们会得到以下结果TestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:id - 元素标识符lparam - ?dparam - ?sparam - 元素名称我们正在考虑一个输入字段--当然,获取输入值是很有趣的,如何尽可能快地获取呢? Discussion of article "Graphical Discussion of article "Graphical Identify selected object Anatoli Kazharski 2016.12.26 18:10 #13 Pavel Kolchin:在您的示例中,总是有 id、lparam、dparam、sparam 输出。...id - 元素标识符lparam - ?dparam - ?sparam - 元素名称在大多数情况下,控件生成信息和参数的含义如下:id - 事件标识符。lparam - 元素标识符。dparam - 元素索引。sparam - 由库用户指定的显示文本(元素名称)。我稍后会准备一个表格,显示每个元素的事件参数集。Pavel Kolchin: ...我们考虑一个输入框--当然,获取输入值是很有趣的,如何尽可能快地获取呢?只需使用CSpinEdit::GetValue() 方法,您就可以获取输入字段中的当前值。示例//--- 来自输入框的事件已到达 if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { //--- 如果项目 ID 来自第一个输入字段 if(lparam==m_spin_edit1.Id()) { //--- 输出其值 Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } //--- return; } Pavel Kolchin 2016.12.27 05:19 #14 如果我们不知道字段名称,或者我们有上百个字段,也许可以通过 id 方法查看其中的内容,或者类似this.GetValue() 这样的方法。 Anatoli Kazharski 2016.12.27 05:31 #15 Pavel Kolchin: 如果我们不知道名称,或者我们有上百个字段,也许可以通过 id 方法查看其中的内容,或者类似this.GetValue() 这样的方法。 因此,每个元素都有自己唯一的元素 id。 Pavel Kolchin 2016.12.27 06:15 #16 Anatoli Kazharski: 因此,每个元素都有自己唯一的元素标识符。if(id==CHARTEVENT_CUSTOM+ON_END_EDIT){ if(lparam==m_spin_edit1.Id()){Print(m_spin_edit1.GetValue());} if(lparam==m_spin_edit2.Id()){Print(m_spin_edit2.GetValue());} if(lparam==m_spin_edit3.Id()){Print(m_spin_edit3.GetValue());} if(lparam==m_spin_edit4.Id()){Print(m_spin_edit4.GetValue());} if(lparam==m_spin_edit5.Id()){Print(m_spin_edit5.GetValue());} if(lparam==m_spin_edit6.Id()){Print(m_spin_edit6.GetValue());} if(lparam==m_spin_edit7.Id()){Print(m_spin_edit7.GetValue());} if(lparam==m_spin_edit8.Id()){Print(m_spin_edit8.GetValue());} if(lparam==m_spin_edit9.Id()){Print(m_spin_edit9.GetValue());} ...}我的意思是不要写这样的代码,也许这样做是有意义的。if(id==CHARTEVENT_CUSTOM+ON_END_EDIT){ Print(GetValue(lparam)); или Print(this.GetValue());}但我的字段不多,第一种方案对我来说很好。 Anatoli Kazharski 2016.12.27 11:55 #17 Pavel Kolchin:...我的意思是不要写这样的代码,也许这样做是有意义的。if(id==CHARTEVENT_CUSTOM+ON_END_EDIT){ Print(GetValue(lparam)); или Print(this.GetValue());} 我还不知道如何对所有元素的所有 get-Method 进行处理。不过我会考虑的。 Alexander Fedosov 2017.01.27 11:27 #18 //+------------------------------------------------------------------+//| 图表事件函数|//+------------------------------------------------------------------+void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { program.ChartEvent(id,lparam,dparam,sparam); if(lparam==program.m_checkbox.Id()) if(program.m_checkbox.CheckButtonState()) { program.m_checkbox.LabelColor(clrGreen); } else { program.m_checkbox.LabelColor(clrRed); } }//+------------------------------------------------------------------+ 简单的任务。点击复选框时,更改复选框标签的颜色。选中 - 绿色文本,未选中 - 红色文本。这行不通。未选中时变成蓝色,选中时仍然是蓝色。 Discussion of article "Graphical Resize Chart Window event expert advisor - miscellaneous Anatoli Kazharski 2017.01.27 11:46 #19 Alexander Fedosov: 简单的任务。点击复选框时,更改复选框标签的颜色。选中 - 绿色文本,未选中 - 红色文本。这行不通。未选中时变成蓝色,选中时仍然是蓝色。现在,您只需在项目安装前为不同状态设置颜色即可(如下示例)://+------------------------------------------------------------------+//| 创建复选框 1|//+------------------------------------------------------------------+bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text) {//--- 保存窗口指针 m_checkbox1.WindowPointer(m_window1);//--- 创建前设置属性 m_checkbox1.XSize(90); m_checkbox1.YSize(18); m_checkbox1.LabelColor(clrGreen); m_checkbox1.LabelColorOff(clrRed); m_checkbox1.LabelColorHover(clrCornflowerBlue); m_checkbox1.LabelColorLocked(clrSilver);//--- 创建一个控件 if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap)) return(false);//--- 将对象添加到对象组的通用数组中 CWndContainer::AddToElementsArray(0,m_checkbox1); return(true); } Discussion of article "Graphical 文章 "图形界面 X: 标准图表控件 文章 "图形界面 V: 组合框控件 Artyom Trishkin 2017.01.27 11:47 #20 Alexander Fedosov://+------------------------------------------------------------------+//| 图表事件函数|//+------------------------------------------------------------------+void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { program.ChartEvent(id,lparam,dparam,sparam); if(lparam==program.m_checkbox.Id()) if(program.m_checkbox.CheckButtonState()) { program.m_checkbox.LabelColor(clrGreen); } else { program.m_checkbox.LabelColor(clrRed); } }//+------------------------------------------------------------------+ 简单的任务。点击复选框时,更改复选框标签的颜色。选中 - 绿色文本,未选中 - 红色文本。这行不通。未选中时变成蓝色,选中时仍然是蓝色。这样如何? if(lparam==program.m_checkbox.Id()) { if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen); else program.m_checkbox.LabelColor(clrRed); } 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...
感谢您的建议!
我会增加这项功能。请关注本系列未来文章的更新。
在您的示例中,总是输出 id、lparam、dparam、sparam。
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
//Print(m_spin_edit1.GetValue());
}
我们会得到以下结果
TestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:
id - 元素标识符
lparam - ?
dparam - ?
sparam - 元素名称
我们正在考虑一个输入字段--当然,获取输入值是很有趣的,如何尽可能快地获取呢?
在您的示例中,总是有 id、lparam、dparam、sparam 输出。
...
id - 元素标识符
lparam - ?
dparam - ?
sparam - 元素名称
在大多数情况下,控件生成信息和参数的含义如下:
我稍后会准备一个表格,显示每个元素的事件参数集。
...
我们考虑一个输入框--当然,获取输入值是很有趣的,如何尽可能快地获取呢?
只需使用CSpinEdit::GetValue() 方法,您就可以获取输入字段中的当前值。
示例
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
//--- 如果项目 ID 来自第一个输入字段
if(lparam==m_spin_edit1.Id())
{
//--- 输出其值
Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
}
//---
return;
}
如果我们不知道名称,或者我们有上百个字段,也许可以通过 id 方法查看其中的内容,或者类似this.GetValue() 这样的方法。
因此,每个元素都有自己唯一的元素标识符。
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
if(lparam==m_spin_edit1.Id()){Print(m_spin_edit1.GetValue());}
if(lparam==m_spin_edit2.Id()){Print(m_spin_edit2.GetValue());}
if(lparam==m_spin_edit3.Id()){Print(m_spin_edit3.GetValue());}
if(lparam==m_spin_edit4.Id()){Print(m_spin_edit4.GetValue());}
if(lparam==m_spin_edit5.Id()){Print(m_spin_edit5.GetValue());}
if(lparam==m_spin_edit6.Id()){Print(m_spin_edit6.GetValue());}
if(lparam==m_spin_edit7.Id()){Print(m_spin_edit7.GetValue());}
if(lparam==m_spin_edit8.Id()){Print(m_spin_edit8.GetValue());}
if(lparam==m_spin_edit9.Id()){Print(m_spin_edit9.GetValue());}
...
}
我的意思是不要写这样的代码,也许这样做是有意义的。
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
但我的字段不多,第一种方案对我来说很好。
Pavel Kolchin:
...
我的意思是不要写这样的代码,也许这样做是有意义的。
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
//| 图表事件函数|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
program.ChartEvent(id,lparam,dparam,sparam);
if(lparam==program.m_checkbox.Id())
if(program.m_checkbox.CheckButtonState())
{
program.m_checkbox.LabelColor(clrGreen);
}
else
{
program.m_checkbox.LabelColor(clrRed);
}
}
//+------------------------------------------------------------------+
Alexander Fedosov:
简单的任务。点击复选框时,更改复选框标签的颜色。选中 - 绿色文本,未选中 - 红色文本。这行不通。未选中时变成蓝色,选中时仍然是蓝色。现在,您只需在项目安装前为不同状态设置颜色即可(如下示例):
//| 创建复选框 1|
//+------------------------------------------------------------------+
bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text)
{
//--- 保存窗口指针
m_checkbox1.WindowPointer(m_window1);
//--- 创建前设置属性
m_checkbox1.XSize(90);
m_checkbox1.YSize(18);
m_checkbox1.LabelColor(clrGreen);
m_checkbox1.LabelColorOff(clrRed);
m_checkbox1.LabelColorHover(clrCornflowerBlue);
m_checkbox1.LabelColorLocked(clrSilver);
//--- 创建一个控件
if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap))
return(false);
//--- 将对象添加到对象组的通用数组中
CWndContainer::AddToElementsArray(0,m_checkbox1);
return(true);
}
//| 图表事件函数|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
program.ChartEvent(id,lparam,dparam,sparam);
if(lparam==program.m_checkbox.Id())
if(program.m_checkbox.CheckButtonState())
{
program.m_checkbox.LabelColor(clrGreen);
}
else
{
program.m_checkbox.LabelColor(clrRed);
}
}
//+------------------------------------------------------------------+
这样如何?
{
if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen);
else program.m_checkbox.LabelColor(clrRed);
}