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
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
...
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);
}