Discusión sobre el artículo "Interfaces gráficas VI: Controles "Casilla de verificación", "Campo de edición" y sus tipos combinados (Capítulo 1)" - página 2
en tus ejemplos siempre sale id, lparam, dparam, sparam.
...
id - identificador del elemento
lparam - ?
dparam - ?
sparam - nombre del elemento
Los controles generan mensajes y los parámetros en la mayoría de los casos significan lo siguiente:
id - identificador del evento.
lparam - identificador del elemento.
dparam - índice del elemento.
sparam - texto mostrado especificado por el usuario de la biblioteca (nombre del elemento).
Más adelante prepararé una tabla que muestre el conjunto de parámetros de evento de cada elemento.
Pavel Kolchin:
...
consideramos un campo de entrada - por supuesto es interesante obtener el valor introducido, ¿cómo hacerlo lo más rápido posible?
Simplemente usando el método CSpinEdit::GetValue() puedes obtener el valor actual en el campo de entrada.
Ejemplo:
//--- Ha llegado un evento del campo de entrada if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { //--- Si el ID del artículo es del primer campo de entrada if(lparam==m_spin_edit1.Id()) { //--- Imprimir su valor Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } //--- return; }
Pavel Kolchin: Y si no sabemos el nombre o tenemos un centenar de campos, tal vez hay un método por id para ver lo que hay o algo así como this.GetValue().
Así que cada elemento tiene su propio id de elemento único.
Tarea sencilla. Cambiar el color de la etiqueta de la casilla de verificación al hacer clic en ella. Marcado - texto verde, desmarcado - rojo. No funciona. Desmarcada se vuelve azul, marcada sigue siendo azul.
Tarea sencilla. Cambiar el color de la etiqueta de la casilla de verificación al hacer clic en ella. Marcado - texto verde, desmarcado - rojo. No funciona. Desmarcada se vuelve azul, marcada sigue siendo azul.
Ahora puede establecer colores para diferentes estados sólo antes de que el elemento se instale(ejemplo de abajo):
//+------------------------------------------------------------------+ //|| Crea la casilla 1| //+------------------------------------------------------------------+ bool CProgram::CreateCheckBox1(constint x_gap,constint y_gap,string text) { //--- Guardar el puntero de la ventana m_checkbox1.WindowPointer(m_window1); //--- Establecer propiedades antes de la creación m_checkbox1.XSize(90); m_checkbox1.YSize(18); m_checkbox1.LabelColor(clrGreen); m_checkbox1.LabelColorOff(clrRed); m_checkbox1.LabelColorHover(clrCornflowerBlue); m_checkbox1.LabelColorLocked(clrSilver); //--- Crear un control if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap)) return(false); //--- Añade el objeto al array común de grupos de objetos CWndContainer::AddToElementsArray(0,m_checkbox1); return(true); }
Tarea sencilla. Cambiar el color de la etiqueta de la casilla de verificación al hacer clic en ella. Marcado - texto verde, desmarcado - rojo. No funciona. Desmarcada se vuelve azul, marcada sigue siendo azul.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
...
Gracias por el consejo.
Voy a añadir esta capacidad. Esté atento a las actualizaciones de futuros artículos de esta serie.
en tus ejemplos siempre sale 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());
}
obtenemos lo siguiente
TestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:
id - identificador del elemento
lparam - ?
dparam - ?
sparam - nombre del elemento
estamos considerando un campo de entrada - por supuesto es interesante obtener el valor introducido, ¿cómo hacerlo lo más rápido posible?
en tus ejemplos siempre sale id, lparam, dparam, sparam.
...
id - identificador del elemento
lparam - ?
dparam - ?
sparam - nombre del elemento
Los controles generan mensajes y los parámetros en la mayoría de los casos significan lo siguiente:
Más adelante prepararé una tabla que muestre el conjunto de parámetros de evento de cada elemento.
...
consideramos un campo de entrada - por supuesto es interesante obtener el valor introducido, ¿cómo hacerlo lo más rápido posible?
Simplemente usando el método CSpinEdit::GetValue() puedes obtener el valor actual en el campo de entrada.
Ejemplo:
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
//--- Si el ID del artículo es del primer campo de entrada
if(lparam==m_spin_edit1.Id())
{
//--- Imprimir su valor
Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
}
//---
return;
}
Y si no sabemos el nombre o tenemos un centenar de campos, tal vez hay un método por id para ver lo que hay o algo así como this.GetValue().
Así que cada elemento tiene su propio identificador de elemento único.
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());}
...
}
Me refería a no escribir tal código, tal vez tenga sentido hacerlo.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
pero no tengo muchos campos, la primera opción está bien para mí.
Pavel Kolchin:
...
Me refería a no escribir ese código, tal vez tenga sentido hacerlo.
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
//| Función ChartEvent|
//+------------------------------------------------------------------+
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:
Tarea sencilla. Cambiar el color de la etiqueta de la casilla de verificación al hacer clic en ella. Marcado - texto verde, desmarcado - rojo. No funciona. Desmarcada se vuelve azul, marcada sigue siendo azul.Ahora puede establecer colores para diferentes estados sólo antes de que el elemento se instale(ejemplo de abajo):
//|| Crea la casilla 1|
//+------------------------------------------------------------------+
bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text)
{
//--- Guardar el puntero de la ventana
m_checkbox1.WindowPointer(m_window1);
//--- Establecer propiedades antes de la creación
m_checkbox1.XSize(90);
m_checkbox1.YSize(18);
m_checkbox1.LabelColor(clrGreen);
m_checkbox1.LabelColorOff(clrRed);
m_checkbox1.LabelColorHover(clrCornflowerBlue);
m_checkbox1.LabelColorLocked(clrSilver);
//--- Crear un control
if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap))
return(false);
//--- Añade el objeto al array común de grupos de objetos
CWndContainer::AddToElementsArray(0,m_checkbox1);
return(true);
}
//| Función ChartEvent|
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
¿Qué te parece esto?
{
if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen);
else program.m_checkbox.LabelColor(clrRed);
}