Discusión sobre el artículo "Interfaces gráficas X: Actualizaciones para la librería Easy And Fast (build 2)" - 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
Tal vez mi código fue borrado y no puedo decir con seguridad ahora.
...
Interfaces gráficas I: Preparando la estructura de la librería (Capítulo 1) >>>
Fíjate en los dos puntos dobles delante de las funciones en el listado de código anterior. De hecho, puede omitirlos y todo funcionará correctamente. Pero en programación se considera una buena práctica poner dobles dos puntos antes de las funciones del sistema de un lenguaje. Esto deja claro que la función es una función del sistema.
El error se produce cuando cierro una ventana creada por el indicador con una cruz. He cambiado ligeramente el archivo MainWindow.mqh del ejemplo que se encuentra aquí: Indicators\Article 10\SeparateWindow.
Voy a excluir el error mediante la comprobación adicional. La solución estará en la próxima actualización. Repetición fallida. ¿Qué cambios se hicieron en el archivo MainWindow.mqh?
y tampoco entiendo como borrar una fila en la tabla creada ?
Por ahora no hay manera. Será en las próximas versiones de la biblioteca. Será posible añadir y eliminar filas en tablas y listas.
Debo haber borrado algo innecesario. Adjunto los archivos.
p.d. ¿Puedo establecer un ancho diferente para cada columna de la tabla?
Debo haber borrado algo innecesario. Adjunto los archivos.
p.d. ¿Puedo establecer un ancho diferente para cada columna de la tabla?
La razón es que has añadido un objeto de la misma tabla al elemento base dos veces. Primero en el método de creación de la tabla CProgram:: CreateTable(), donde debería hacerse, y luego en tu método CProgram::ModifyTable(). Borra la línea resaltada en rojo en el siguiente listado de código.
//---
Al borrar el programa del gráfico o recargarlo, por ejemplo, al cambiar el marco temporal o el símbolo, se intentaba borrar por segunda vez un elemento que ya se había borrado antes. Al eliminar un objeto de la tabla, se liberaban las matrices y se producía un error al volver a llamar al método de eliminación de un elemento.
p.d. ¿Puedo establecer una anchura diferente para cada columna de la tabla?
No en este tipo de tablas(CTable). Puede establecer el ancho de las columnas sólo en las tablas de tipo CCanvasTable. Pero en este tipo de tablas por el momento hay muchas otras restricciones, que muy probablemente no le convendrán. Las posibilidades de las tablas de tipo CCanvasTable se ampliarán.
La razón fue que agregaste el mismo objeto tabla al elemento base dos veces. Primero en el método CProgram ::CreateTable(), donde debería hacerse, y luego en tu método CProgram::ModifyTable(). Borra la línea resaltada en rojo en el siguiente listado de código.
Ah sí, es una tontería, no me di cuenta porque copié mi método ModifyTable de CreateTable.
Probaré con CCanvasTable, quizás funcione.
¡Gracias!
p.s: Si no puedo borrar filas de la tabla, puedo borrar toda la tabla y crearla de nuevo, la que necesito. Tampoco he encontrado ningún método de borrado. ¿Aún no puedo borrar la tabla?
p.s2: Como no puedo crear las columnas de la tabla de diferentes anchos, lo lógico es colocar dos tablas una al lado de la otra, pero según tengo entendido no puedo hacerlo porque la tabla se expande automáticamente hasta el borde derecho. Existe un método AutoXResizeMode, pero todavía no funciona... Cuando se pone a false, no se produce ningún cambio.
...
p.d: Si no puedo borrar filas de una tabla, puedo borrar toda la tabla y crearla de nuevo, la que necesito. Tampoco he encontrado ningún método de borrado. ¿Aún no puedo borrar la tabla?
Ahora todos los elementos de la GUI se crean a la vez y luego puedes controlar su visibilidad usando los métodos Show() y Hide().
Alexey Oreshkin:
p.s2: Como no puedo crear las columnas de la tabla de diferentes anchos, es logico colocar dos tablas una al lado de la otra, pero como me di cuenta no puedo hacerlo porque la tabla se expande automaticamente hasta el borde derecho. Hay un método AutoXResizeMode, pero todavía no funciona... Cuando está en false, no se produce ningún cambio.
Utiliza el método XSize() para establecer el ancho de la tabla.
Ejemplo:
m_table.XSize(300);Gracias por las respuestas.
Hay un par de preguntas más:
1.Si los datos no caben en una celda de la tabla, ¿hay planes para hacer un tooltip o un ticker en esta celda en el futuro?
2.¿Es posible desactivar el desplazamiento horizontal en algunas tablas?
p.s:
El error se produce cuando creamos una tabla con 5 columnas, pero intentamos mostrar más. La opción es una tontería, estoy de acuerdo, pero es necesaria. Especialmente si las tablas pueden llegar a ser dinámicas en el futuro.
p.s2: Los métodos Mostrar y Ocultar funcionan perfectamente y permiten no cambiar la tabla sobre la marcha, sino mostrar la que sea necesaria. En cada pestaña he creado tablas necesarias que están vinculadas a botones de radio y cuando se activan se muestra la necesaria, las que no lo son - se ocultan. Aquí todo funciona. Pero por alguna razón no puedo ocultar las tablas irrelevantes inmediatamente después de su creación. Debido a esto, creo, barras de desplazamiento no funcionan correctamente, pero tan pronto como haga clic una vez en el botón de radio y todo lo innecesario se oculta - todo empieza a funcionar bien.
1.Si los datos no caben en una celda de la tabla, ¿hay planes para hacer un tooltip o un ticker en esta celda en el futuro?
Añadido a la lista de futuras actualizaciones. Haré un modo de tooltips en tablas.
2.¿Es posible desactivar el desplazamiento horizontal en algunas tablas?
Las barras de desplazamiento aparecen cuando la parte visible de la tabla es menor que la parte total.
El error se produce cuando creamos una tabla con 5 columnas e intentamos mostrar más. La opción es una tontería, estoy de acuerdo, pero necesitamos una comprobación. Sobre todo si las tablas pueden llegar a ser dinámicas en el futuro.
He hecho correcciones. Estarán disponibles en la próxima actualización.
p.s2: Los métodos Mostrar y Ocultar funcionan perfectamente y permiten no cambiar la tabla sobre la marcha, sino mostrar la que se necesita. En cada pestaña he creado tablas necesarias que están vinculadas a botones de radio y cuando se activan se muestra la necesaria, las que no - se ocultan. Todo funciona aquí. Pero por alguna razón no puedo ocultar las tablas irrelevantes inmediatamente después de su creación. Debido a esto, creo, barras de desplazamiento no funcionan correctamente, pero tan pronto como haga clic una vez en el botón de radio y todo lo innecesario está oculto - todo empieza a funcionar bien.
Ocúltalas después de actualizar los elementos de la pestaña:
Si eso no funciona, envíame tu código y le echaré un vistazo.
Al inicio casi no funcionan, pero si uso botones de radio para actualizarlas, todo empieza a funcionar normalmente. Al cambiar a una nueva pestaña el mismo problema hasta que hago clic en el botón de radio.
He enviado el archivo a PM.
Parece que estoy haciendo algo mal o el problema es de otra manera, pero tengo algunos problemas con las barras de desplazamiento.
Al inicio casi no funcionan, pero si uso botones de radio para actualizarlas, todo empieza a funcionar normalmente. Al cambiar a una nueva pestaña el mismo problema, hasta que hago clic en el botón de radio.
He enviado el archivo a PM.
He mirado sus archivos. El problema es claro. Hay un conflicto entre las barras de desplazamiento, que se encuentran una encima de la otra en las tablas visibles. La cosa es que cuando cambias de pestaña, todos los elementos que están asignados a la pestaña actualmente seleccionada se hacen visibles. Como tienes todas las tablas una encima de otra, no lo has visto. Mira la captura de pantalla de abajo, he cambiado las coordenadas de dos tablas de esta pestaña para mayor claridad:
//---
Necesitamos un evento que nos diga que ha habido un cambio de pestaña. Luego en un manejador de clase personalizado se puede recibir y tomar las acciones necesarias. En tu caso, entonces podrías obtener el índice del botón de opción seleccionado y mostrar la tabla que asocies a él, y ocultar las demás.
Ahora mismo no se genera un evento de este tipo al cambiar de pestaña. Estará disponible en la próxima actualización de la biblioteca.