Discusión sobre el artículo "Interfaces gráficas X: Actualizaciones para la librería Easy And Fast (build 2)" - página 4

 

http://prntscr.com/tmjkm3


Hola. Estoy trabajando con MT4, así que por desgracia estoy stock con esta última versión de MT4. Aquí hay un error que no importa lo que he intentado no se arregla. Como se ve en la imagen de arriba, hay una línea horizontal "cerca" de la leyenda. En caso de que esa línea horizontal esté seleccionada, si haces click dentro del caption, saltará al medio del caption y empezará a moverse con el caption. Además, si hay una línea horizontal en algún lugar del fondo de la ventana que está seleccionada, si hace clic y arrastra dentro de la ventana cuando está cerca de la línea, comenzará a arrastrar la línea alrededor. Esto sucede a todos los objetos en el gráfico no sólo la línea, sólo cuando se seleccionan esto sucederá.


En otras palabras, el panel y el título no están "capturando" el evento del ratón y lo dejan pasar a través de los objetos debajo de ellos. ¿Cómo solucionar este problema?

Por favor, que alguien me ayude

Screenshot
Screenshot
  • prnt.sc
Captured with Lightshot
 

Hola,
Entiendo que este artículo es la última actualización para mql4 EasyAndFastGUI?
Por favor, ¿podríais decirme cómo solucionar el aviso "expresion not boolen".


 
Nauris Zukas #:

Hola,
Entiendo que este artículo es la última actualización para mql4 EasyAndFastGUI?
Por favor, ¿podríais decirme cómo solucionar el aviso "expresion not boolen".


¿Qué tipo esm_show_flags ? Si no es bool, entonces es así: return((bool)m_show_flags);

 
Artyom Trishkin #:

¿Qué tipo tienem_show_flags ? Si no es bool, entonces return((bool)m_show_flags);

uint m_show_flags. Si lo cambio a bool, la advertencia desaparecerá, pero como no estoy seguro de que no dañe alguna función en algún punto de la cadena, haré lo que me has aconsejado. Gracias.

 
Nauris Zukas #:

uint m_show_flags. Si lo cambio a bool, el aviso desaparecerá, pero como no estoy seguro de que no dañe alguna función en algún punto de la cadena, haré lo que me has aconsejado. Muchas gracias.

No puedes cambiarlo a bool porque es un conjunto de flags. En consecuencia, el valor de la variable puede ser mayor que 1. Si su valor es igual a cero, es igual al valor false de una variable de tipo bool. Por lo tanto, cuando el resultado de volver al tipo bool se convierte al tipo bool, cualquier valor de una variable distinto de cero dará el valor true. Correspondientemente, sólo 0 dará el valor falso.

Y puesto que el método (a juzgar por su nombre) devuelve la bandera de visibilidad del objeto, entonces a cualquier valor distinto de cero, el método devolverá la bandera de que el objeto es visible en algún marco temporal. Sólo cuando el valor de la variable es cero sabemos con certeza que el objeto está oculto en todos los marcos temporales.

Puedo estar equivocado sobre el propósito de este método. Pero tomé mis suposiciones del hecho de que es este conjunto de banderas:

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Видимость объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Y, por cierto, basándote en lo anterior, puedes escribir el método así:

bool ShowFlags(void) const { return m_show_flags!=OBJ_NO_PERIODS; }

Entonces no tendrás que convertir el tipo devuelto de una variable no booleana a un valor con el tipo bool - el resultado de la comprobación se devuelve de todos modos, que es bool.

Pero es tu elección - no hay ninguna diferencia.

 
Artyom Trishkin tipo bool - devuelve el resultado de la comprobación de todos modos, y eso es bool.

Pero es tu elección - no hay diferencia.

Artem, en mi opinión, es mejor cambiar el tipo de función a uint.

uint ShowFlags(void) const { return m_show_flags; }

Entonces usted será capaz de comprobar la visibilidad del objeto en un determinado TF por el valor recibido de esta función. Después de todo, no es un valor específico, sino un conjunto de banderas ...

 
Alexey Viktorov #:

Artem, en mi opinión es mejor cambiar el tipo de función a uint

Entonces será posible comprobar la visibilidad del objeto en un TF particular por el valor recibido de esta función. Después de todo, no es un valor específico, sino un conjunto de banderas...

No sabemos el significado de este método. Lo más probable es que sea una bandera - visible/no visible. Y forjar las banderas necesarias a partir del resultado es una complicación de la vida del usuario de la biblioteca.

 
Artyom Trishkin #:

No conocemos el significado de este método. Lo más probable es que sea una bandera - visible/no visible. Y forjar las banderas necesarias del resultado es complicar la vida del usuario de la biblioteca.

Y si yo, como principiante, estoy interesado en saber si el objeto es visible en el gráfico de TF H1 y usando este método obtengo que el objeto es visible en TF M15, respectivamente cierto, pero no lo veo en el gráfico... ¿Entonces cómo?

Tal vez sería mejor añadir un parámetro de entrada y comprobar la visibilidad en el TF especificado. O de alguna otra manera, pero en esta forma no es muy claro para mí....

 
Alexey Viktorov #:

Y si yo, como principiante, estoy interesado en saber si el objeto es visible en el gráfico de TF H1 y usando este método obtengo que el objeto es visible en TF M15, respectivamente cierto, pero no lo veo en el gráfico... ¿Entonces cómo?

Tal vez sería mejor añadir un parámetro de entrada y comprobar la visibilidad en el TF especificado. O de alguna otra manera, pero en esta forma no es muy claro para mí....

Así que usted debe preguntar a Anatoly. O leer el artículo, donde se escribirá lo que el método en discusión se utiliza para, y cuál utilizar para las necesidades que usted describe.

La conversación era sobre un método en particular y por qué el compilador genera una advertencia. Por qué - está claro (tipo incorrecto), y cómo solucionarlo - Te mostré dos opciones.