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)"
Pero el "guiño" al alcanzar valores extremos no funcionará en los indicadores - Sleep() ...
Anatoly, anota una petición más de mejora: el retardo debería organizarse a través de un temporizador, sobre todo porque ya tienes casi todo para ello.
Anatoly, la biblioteca creada por usted está en un alto grado de preparación y decidí tratar de crear un pequeño proyecto para mí usándolo. Escribo en este tema para que quede claro a que elemento se refiere la pregunta. Para el campo de entrada (SpinEdit) es necesario introducir valores con una precisión de dos décimas. Establecí las propiedades correspondientes (StepValue y StepDigits) en el procedimiento de creación del campo (ver el código más abajo):
... m_spin_edit_Depo.MaxValue(10000000); m_spin_edit_Depo.MinValue(0); m_spin_edit_Depo.StepValue(0,01); m_spin_edit_Depo.SetDigits(2); m_spin_edit_Depo.SetValue(v); ...
Y después de la compilación obtuve un error: 'StepValue' - no se puede aplicar ninguna de las sobrecargas a la llamada a la función.
Lógicamente, si el número de caracteres de un valor es inferior a 1, entonces el incremento del valor del paso también puede ser inferior a uno. Al mismo tiempo, en el código de la clase, la comprobación del valor introducido pasa sólo por la no negatividad.
...
//--- Шаг значения
double StepValue(void) const { return(m_step_value); }
void StepValue(const double value) { m_step_value=(value<=0)? 1 : value; }
...
La cuestión es que no me queda claro de donde viene el error.
Entonces tengo una pregunta o un deseo. ¿Qué pasa si no necesitamos controlar el valor mínimo/máximo y sólo está limitado por el tamaño de la variable de tipo double utilizada para almacenarlo? Según he entendido del código, establecer los valores mínimo/máximo es obligatorio. ¿Es posible añadir mi deseo a la lista de mejoras? Es decir, si no se especifican los valores mínimo/máximo para un campo, el control de los valores introducidos se realiza sólo al entrar en el rango de la variable de tipo doble.
Y después de la compilación obtuve el siguiente error: 'StepValue' - ninguna de las sobrecargas se puede aplicar a la llamada a la función.
...
La cuestión es que no me queda claro de dónde viene el error.
Tienes un error tipográfico. Utiliza un punto "." como separador. :
m_spin_edit_Depo.StepValue(0. 01);//---
A continuación, tengo una pregunta o un deseo. ¿Qué pasa si no necesito controlar el valor mínimo/máximo y sólo está limitado por el tamaño de la variable de tipo doubleutilizada para su almacenamiento ? Según he entendido del código, establecer los valores mínimo/máximo es obligatorio. ¿Es posible añadir mi deseo a la lista de mejoras? Es decir, si no se especifican los valores mínimo/máximo para un campo, el control de los valores introducidos se realiza sólo al entrar en el rango de la variable de tipo doble.
Por ahora se puede establecer el máximo y el mínimo forzosamente. Así
m_spin_edit_Depo.MaxValue(DBL_MAX); m_spin_edit_Depo.MinValue(-DBL_MAX);
Tiene un error tipográfico. Utiliza un punto "." como separador. :
//---
Puedes forzar el máximo y el mínimo por ahora. Ya está:
Nuevo artículo Interfaces gráficas VI: el control de casilla de verificación, el control de edición y sus tipos mixtos (Capítulo 1) ha sido publicado:
Autor: Anatoli Kazharski
Hola señor soy interesante en su artículo, pero yo todavía novato sobre GUI y mql,
puede usted por favor dígame cómo obtener el valor de Spin editar para que pueda ser leído a la EA.
Saludos
Hola señor soy interesante en su artículo, pero yo todavía novato sobre GUI y mql,
puede usted por favor dígame cómo obtener el valor de Spin editar para que pueda ser leído a la EA.
Saludos
Por ejemplo, de un artículo en CProgram::OnEvent() controlador de eventos:
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { //--- Событие нажатия на текстовой метке if(id==CHARTEVENT_CUSTOM+ON_CLICK_LABEL) { ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam); //--- Если нажали на первом чекбоксе if(lparam==m_checkbox1.Id()) { m_checkbox2.CheckBoxState(m_checkbox1.CheckButtonState()); m_spin_edit1.SpinEditState(m_checkbox1.CheckButtonState()); Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } if(lparam==m_checkbox3.Id()) { m_checkboxedit1.CheckBoxEditState(m_checkbox3.CheckButtonState()); Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue()); } if(lparam==m_checkbox4.Id()) { m_checkcombobox1.CheckComboBoxState(m_checkbox4.CheckButtonState()); } if(lparam==m_checkbox5.Id()) { m_slider1.SliderState(m_checkbox5.CheckButtonState()); m_dual_slider1.SliderState(m_checkbox5.CheckButtonState()); Print("m_slider1.GetValue(): ",m_slider1.GetValue()); Print("m_dual_slider1.GetLeftValue(): ",m_dual_slider1.GetLeftValue()); Print("m_dual_slider1.GetRightValue(): ",m_dual_slider1.GetRightValue()); } } if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam); if(lparam==m_spin_edit1.Id()) { Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } if(lparam==m_checkboxedit1.Id()) { Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue()); } if(lparam==m_slider1.Id()) { Print("m_slider1.GetValue(): ",m_slider1.GetValue()); } if(lparam==m_dual_slider1.Id()) { Print("m_dual_slider1.GetLeftValue(): ",m_dual_slider1.GetLeftValue()); Print("m_dual_slider1.GetRightValue(): ",m_dual_slider1.GetRightValue()); } } if(id==CHARTEVENT_CUSTOM+ON_CLICK_INC || id==CHARTEVENT_CUSTOM+ON_CLICK_DEC) { ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam); if(lparam==m_spin_edit1.Id()) { Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } if(lparam==m_checkboxedit1.Id()) { Print("m_checkboxedit1.GetValue(): ",m_checkboxedit1.GetValue()); } } }
Por ejemplo, de un artículo en CProgram::OnEvent() controlador de eventos:
Regard's
Estimado Anatoli Kaz harski, ¡muchas gracias por esta gran biblioteca!
Me encanta el aspecto de las interfaces resultantes.
Al empezar a adaptar Test Library 10.mq5 a mis necesidades personales pensé que merecía la pena mencionar que me ayudó mucho añadir el método
void CSpinEdit::LabelText(const string new_text)
a la clase CSpinEdit que no hace otra cosa que diferir cualquier llamada a CLabel::Description(const string new_text). La razón es que estoy usando un CSpinEdit para diferentes tipos de valores dependiendo del estado de un CComboBox. Después de cambiar la etiqueta con LabelText(text) y elegir el formato de edición apropiado los valores se muestran como se desea después de llamar a
void CSpinEdit::ChangeValue(const double value)
Gracias de nuevo y saludos
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Interfaces gráficas VI: Controles "Casilla de verificación", "Campo de edición" y sus tipos combinados (Capítulo 1):
Este artículo empieza la sexta parte de la serie sobre el desarrollo de la librería para la creación de las interfaces gráficas en los terminales MetaTrader. En el primer capítulo hablaremos sobre los siguientes controles: “casilla de verificación”, “campo de edición” y los tipos combinados de estos controles.
El control “Casilla de verificación” o “Checkbox” está destinado para manejar los parámetros que pueden tener sólo dos estados. El botón con dos iconos se utiliza para identificar el estado actual del parámetro con el que está vinculado el control. El icono con el signo “marca de verificación” significa el estado “activado” (on). El icono sin el signo “marca de verificación” significa el estado “desactivado” (off). Junto con el botón se encuentra la descripción breve del parámetro.
Vamos a utilizar tres objetos gráficos para diseñar este control. Son los siguientes:
Fig. 1. Partes integrantes del control “Casilla de verificación”.
Vamos a ver cómo está organizada la clase de este control.
Autor: Anatoli Kazharski