in your examples there is always id, lparam, dparam, sparam output.
...
id - element identifier
lparam - ?
dparam - ?
sparam - element name
Controls generate messages and parameters in most cases mean the following:
id - event identifier.
lparam - element identifier.
dparam - element index.
sparam - displayed text specified by the library user (element name).
I will prepare later a table showing the set of event parameters from each element.
Pavel Kolchin:
...
we consider an input field - of course it is interesting to get the entered value, how to do it as fast as possible?
Just using the CSpinEdit::GetValue() method you can get the current value in the input field.
Example:
//--- An event from the input field has arrived if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { //--- If the item ID is from the first input field if(lparam==m_spin_edit1.Id()) { //--- Output its value Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } //--- return; }
Pavel Kolchin: And if we don't know the name or we have a hundred fields, maybe there is a method by id to see what is there or something like this.GetValue().
Simple task. Change the colour of the checkbox label when clicking on the checkbox. Ticked - green text, unchecked - red. It doesn't work. Unchecked it becomes blue, ticked it is still blue.
Simple task. Change the colour of the checkbox label when clicking on the checkbox. Ticked - green text, unchecked - red. It doesn't work. Unchecked it becomes blue, ticked it is still blue.
Now you can set colours for different states only before the item is installed(example below):
//+------------------------------------------------------------------+ //|| Creates checkbox 1| //+------------------------------------------------------------------+ bool CProgram::CreateCheckBox1(constint x_gap,constint y_gap,string text) { //--- Save the window pointer m_checkbox1.WindowPointer(m_window1); //--- Set properties before creation m_checkbox1.XSize(90); m_checkbox1.YSize(18); m_checkbox1.LabelColor(clrGreen); m_checkbox1.LabelColorOff(clrRed); m_checkbox1.LabelColorHover(clrCornflowerBlue); m_checkbox1.LabelColorLocked(clrSilver); //--- Create a control if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap)) return(false); //--- Add the object to the common array of object groups CWndContainer::AddToElementsArray(0,m_checkbox1); return(true); }
Simple task. Change the colour of the checkbox label when clicking on the checkbox. Ticked - green text, unchecked - red. It doesn't work. Unchecked it becomes blue, ticked it is still blue.
Allow the use of cookies to log in to the MQL5.com website.
Please enable the necessary setting in your browser, otherwise you will not be able to log in.
You are signed in. Two-factor authentication has been disabled. Set it up again and scan a new QR code, or continue with two-factor authentication disabled.
...
Thanks for the tip!
I will add this capability. Watch for updates future articles in this series.
in your examples there is always output 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());
}
we get the following
TestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:
id - element identifier
lparam - ?
dparam - ?
sparam - element name
we are considering an input field - of course it is interesting to get the entered value, how to do it as fast as possible?
in your examples there is always id, lparam, dparam, sparam output.
...
id - element identifier
lparam - ?
dparam - ?
sparam - element name
Controls generate messages and parameters in most cases mean the following:
I will prepare later a table showing the set of event parameters from each element.
...
we consider an input field - of course it is interesting to get the entered value, how to do it as fast as possible?
Just using the CSpinEdit::GetValue() method you can get the current value in the input field.
Example:
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
//--- If the item ID is from the first input field
if(lparam==m_spin_edit1.Id())
{
//--- Output its value
Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
}
//---
return;
}
And if we don't know the name or we have a hundred fields, maybe there is a method by id to see what is there or something like this.GetValue().
So each element has its own unique element identifier.
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());}
...
}
I meant not to write such code, maybe it makes sense to do it.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
but I don't have a lot of fields, the first option is fine for me.
Pavel Kolchin:
...
I meant not to write such code, maybe it makes sense to do it.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
//| ChartEvent function|
//+------------------------------------------------------------------+
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:
Simple task. Change the colour of the checkbox label when clicking on the checkbox. Ticked - green text, unchecked - red. It doesn't work. Unchecked it becomes blue, ticked it is still blue.Now you can set colours for different states only before the item is installed(example below):
//|| Creates checkbox 1|
//+------------------------------------------------------------------+
bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text)
{
//--- Save the window pointer
m_checkbox1.WindowPointer(m_window1);
//--- Set properties before creation
m_checkbox1.XSize(90);
m_checkbox1.YSize(18);
m_checkbox1.LabelColor(clrGreen);
m_checkbox1.LabelColorOff(clrRed);
m_checkbox1.LabelColorHover(clrCornflowerBlue);
m_checkbox1.LabelColorLocked(clrSilver);
//--- Create a control
if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap))
return(false);
//--- Add the object to the common array of object groups
CWndContainer::AddToElementsArray(0,m_checkbox1);
return(true);
}
//| ChartEvent function|
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
How about this?
{
if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen);
else program.m_checkbox.LabelColor(clrRed);
}