Discusión sobre el artículo "Interfaces gráficas X: Selección del texto en el campo de edición multilínea (build 13)"

 

Artículo publicado Interfaces gráficas X: Selección del texto en el campo de edición multilínea (build 13):

En este artículo vamos a implementar la posibilidad de seleccionar el texto usando diferentes combinaciones de teclas y eliminar el texto seleccionado, de la misma manera como se hace en cualquier otro editor de texto. Además de eso, seguiremos optimizando el código y prepararemos las clases para el traspaso al proceso final de la segunda fase del desarrollo de la librería, cuando todos los controles estarán dibujados en las imágenes separadas (lienzos para el dibujado).

Los métodos para la selección del texto están implementados, pues así se mostrará todo eso en una aplicación final:

 Fig. 6. Demostración de la selección del texto en el campo de edición de una aplicación MQL.

Fig. 6. Demostración de la selección del texto en el campo de edición de una aplicación MQL.

Autor: Anatoli Kazharski

 
¡Genial! ¿Cuál es la situación de pegar desde el búfer?
 
Igor Volodin:
¡Genial! ¿Cuál es la situación de pegar desde el búfer?


Todavía no he contactado con los desarrolladores de servicedesk con tal petición.

Probablemente, es necesario no sólo insertar desde el buffer, sino también enviar al buffer, para poder transferir texto entre los campos de entrada, si surge tal necesidad.

Lo más probable es que necesitemos la capacidad de manejar eventos del sistema causados por pulsar Ctrl + X (cortar), Ctrl + C (copiar) y Ctrl + V (pegar).

 
¿Mostrarás los nuevos elementos dibujados en el próximo artículo? Sería muy curioso:)

¿Probablemente los implementarás en base a la clase CCanvas?
 
Реter Konow:
Esto va a ser curioso:)
Permítanme explicarles por qué siento curiosidad.

Sé por mi propia experiencia de desarrollo que es mucho más fácil y rápido inventar y aplicar nuevos "gadgets" que arreglar y rediseñar los fundamentos de tu tecnología.

Sin embargo, para cada transición a un nivel cualitativamente nuevo, es necesariamente necesario rediseñar los mecanismos básicos. Esto tiene graves consecuencias para todo el sistema. El gran rediseño es la etapa más peligrosa del desarrollo. Todo se derrumba casi hasta los cimientos y luego se vuelve a crear. No todo el mundo puede atreverse a hacerlo.

Hasta ahora, sólo se ha avanzado, es decir, se ha realizado la parte fácil del desarrollo: inventar cosas nuevas sobre la base antigua. No ha habido rediseños serios en los mecanismos básicos. Pero ahora que la transición a elementos dibujados se ha hecho urgente, no puedes evitar un rediseño global. Una interfaz dibujada requiere al menos un mapa de objetos, y tú no lo tienes. Pero eso son sólo las flores. La tecnología es completamente diferente y no puedes escapar de ella.

No sé si os atreveréis a hacer este rediseño global y cómo os irá. Por eso tengo curiosidad.

Le deseo mucha suerte.
 
Реter Konow:
¿Mostrarás los nuevos elementos dibujados en el próximo artículo? Sería muy curioso:)

¿Probablemente los implementarás en base a la clase CCanvas?

1. Sí. Todos los elementos serán finalmente elementos dibujados. Como parte de la segunda etapa de desarrollo: 1 elemento=1 objeto (lienzo para dibujar).

2. Sí. Al igual que todos los elementos que ya están dibujados utiliza esta clase CCanvas. Ya tiene métodos listos para dibujar formas gráficas simples. Es una buena clase, que si no existiera, tendrías que implementarla tu mismo. En aquellos elementos de la librería, que ya están dibujados, se utilizan métodos para dibujar pixel a pixel y líneas, salida de texto, así como formas como rectángulo, rectángulo con relleno.

 
Реter Konow:
...

No sé si decidirá hacer esta redistribución global y cómo le irá. Por eso tengo curiosidad.

El enfoque OOP es mucho más simple de lo que has descrito. Los cambios en el esquema de librerías ya descrito antes son mínimos. Al final, todo será aún más conveniente y mucho mejor de lo que es ahora.
 
Anatoli Kazharski:
El enfoque OOP es mucho más sencillo de lo que has descrito. Los cambios en el esquema de la biblioteca ya descritos antes son mínimos. Al final, todo será aún más cómodo y mucho mejor de lo que es ahora.

Esta misma receta de desarrollo del sistema sin su renacimiento interno es completamente desconocida para mí. Es como un grial - quiero creer que hay uno, pero es poco probable....


Por supuesto, no es muy difícil dibujar un elemento. Casi todo se puede dibujar a partir de rectángulos (excepto el gradiente), pero hay que crear otro modelo de eventos. La función OnChartEvent() ya no proporcionará la fijación de los eventos de clic en el patrón del elemento dibujado. Tampoco servirá Zorder para la priorización. Hace mucho tiempo te hablé de la creación de un mapa de objetos, y enumeré sus ventajas, pero entonces rechazaste esta solución, y ahora, no puedes ir a ninguna parte sin ella.


No hay duda de que los elementos dibujados tienen más propiedades, y la interacción con ellos es mucho más compleja. En esta tecnología, el sistema debería ser más holístico y los mecanismos más universales. Por ejemplo, debería existir una memoria común para todos los elementos de la interfaz, que contenga los valores de todas sus propiedades. Es una solución más eficaz que crear muchas matrices y variables separadas en diferentes estructuras y clases. Todas las convenciones de la POO (objetos de referencia para acceder a variables de otras clases de las que se necesita obtener el valor de alguna propiedad de algún objeto, por ejemplo) sólo ralentizarán y complicarán el trabajo, no lo simplificarán. La programación orientada a objetos tiene una desventaja más, por la cual no lamento no tener la ventaja de usar clases ajenas como tú. Un desarrollador que utiliza en su desarrollo bloques creados por otras personas, conoce peor su desarrollo que el que lo ha creado todo él, y además está más limitado en la posibilidad de mejora en su desarrollo no sólo porque lo conoce peor, sino porque no va a rediseñar bloques ajenos, ya que no se lo proporciona el "estilo profesional" de desarrollo.


Todo lo anterior es sólo mi opinión y la he dado por finalizada.


Miraré con interés el futuro desarrollo de la biblioteca.

 
Реter Konow:

Por supuesto, dibujar un elemento no es muy difícil. Casi todo se puede dibujar a partir de rectángulos (excepto el gradiente), pero hay que crear otro modelo de eventos. La función OnChartEvent() ya no proporcionará la fijación de eventos de clic en el detalle del elemento dibujado. Tampoco servirá Zorder para priorizar. Hace mucho tiempo te hablé de la creación de un mapa de objetos, y enumeré sus ventajas, pero entonces rechazaste esta solución, y ahora, no estás en ninguna parte sin ella.

Usted está equivocado, como siempre. Aquí hay ejemplos, donde incluso en el modelo actual no tengo los problemas que usted describió (ver GIF-animaciones a continuación). La mesa está dibujada y la interacción con ella es una de las más complicadas de todos los elementos existentes, por no decir la más complicada. Además, esta no es la versión final todavía. Tal vez ya en el próximo artículo habrá un código final para esta tabla.


//---

Por favor, muéstrame cómo has implementado lo mismo.

//---

Retag Konow:

... No hay duda de que los elementos dibujados tienen más propiedades, y la interacción con ellos es mucho más compleja. En esta tecnología, el sistema debería ser más holístico y los mecanismos más universales. Por ejemplo, debería haber una memoria común para todos los elementos de la interfaz, que contenga los valores de todas sus propiedades. Esto es más eficiente que crear muchas matrices y variables separadas en diferentes estructuras y clases.

Me resulta mucho más fácil interactuar con los elementos dibujados. Poco a poco todo será lo más universal posible. En realidad de artículo a artículo en esta serie este proceso debería ser notable, si por supuesto lees cuidadosamente y no sólo miras las imágenes. Puedes hacer una memoria compartida, o puedes simplemente proporcionar un acceso fácil desde una clase a las propiedades de cada elemento, como hice yo. No puedes afirmar categóricamente que debe ser así y no al revés. Nadie le debe nada a nadie. En tus desarrollos puedes hacer lo que te convenga. Yo prefiero tener mi propia opinión sobre tal o cual cuenta. Como me demuestra mi práctica personal y mi experiencia vital, mucho de lo que dicen los demás es erróneo. Al mismo tiempo, no me excluyo de esta cifra. Pero no tengo miedo a equivocarme y, si me equivoco, busco la forma de corregir el error.

Retag Konow:

... Todas las convenciones de POO (objetos de referencia para acceder a variables de otras clases de las que necesitas obtener el valor de alguna propiedad de algún objeto, por ejemplo) sólo ralentizarán y complicarán el trabajo, no lo simplificarán.

En tu caso - sí, en el mío - no. )

Retag Konow:

La programación orientada a objetos tiene una desventaja más, por la que no lamento no tener la ventaja de usar clases ajenas como tú. Un desarrollador que utiliza bloques creados por otras personas en su desarrollo conoce peor su desarrollo que el que lo ha creado todo él mismo, y además está más limitado en la posibilidad de mejorar su desarrollo no sólo porque lo conoce peor, sino porque no rediseñará los bloques de otras personas, ya que no se lo proporciona el "estilo profesional" de desarrollo.

En este caso, empieza desde cero y por tu cuenta. Escriba su propio sistema operativo, luego escriba un terminal de operaciones con el lenguaje MQL, y después empiece a desarrollar su propia biblioteca para crear interfaces gráficas. Después de haber hecho todo esto, podrás golpearte con orgullo el talón en el pecho. )))

//---

P.D. Y para mi la tarea era:

  1. Practicar programación.
  2. Escribir para mi mismo una libreria para crear interfaces graficas con una calidad que me satisficiera.
  3. Compartir este desarrollo con MQL-comunidad.
  4. Al menos compensar parcialmente los costes laborales del desarrollo. Gracias a MQ por apoyar el proyecto.

Creo que ha salido muy bien. Al menos no soy el único al que le gusta el resultado. :)

 
Anatoli Kazharski:

Anatoly, he expuesto mi opinión y no tengo ningún deseo de entrar en otra agria discusión contigo.


Mis tablas no están terminadas, pero el ejemplo que has demostrado me funciona igual. La tabla es interactiva, hay imágenes en las celdas, casillas de verificación, e incluso las columnas también cambian de ancho. Por supuesto, no todo funciona perfectamente todavía.... La apariencia es un poco diferente. Añadir columnas y columnas no está implementado todavía. No lo mostraré aquí, o seré baneado por PR de nuevo.

Todo lo que estoy hablando es de la experiencia que he ganado en el proceso de trabajo duro, y el hecho de que lo comparto, no debe ser percibido como hostil. Al fin y al cabo, ¿quién más aquí contigo podrá discutir todos estos temas en pie de igualdad?


Suerte.

 
Реter Konow:

Anatoly, ya he expuesto mi opinión, y no tengo ningún deseo de entrar en otra agria discusión contigo.

De acuerdo, no te distraeré. )

Mis tablas no están terminadas, pero el ejemplo que has demostrado funciona igual. La tabla es interactiva, hay imágenes en las celdas, casillas de verificación, e incluso las columnas también cambian de ancho. Por supuesto, no todo funciona perfectamente todavía.... La apariencia es un poco diferente. Añadir columnas y columnas no está implementado todavía. No lo mostraré aquí, o seré baneado por PR de nuevo.

Tienes una gran oportunidad de leer artículos sobre este tema e incluso utilizar las soluciones publicadas en el código fuente de forma fácil y sencilla adaptándolas a tu esquema.

Puedes publicar los resultados en tu blog. Sigo tus publicaciones. ;)