Realización de un proyecto crowdsourced en Canvas - página 37

 
Алексей Барбашин:

De lo anterior se puede entender que un elemento de estructura es un control de diálogo específico, contiene sus propias propiedades y puede contener controles anidados. El conjunto de propiedades de un control universal de este tipo sólo está limitado por la imaginación del desarrollador.

Por supuesto, podemos evitar la estructura y describir las propiedades de los controles en un array multidimensional, pero no es inicialmente rentable porque necesitamos recordar claramente qué índice de alguna propiedad se almacena. Y el array no puede contener tipos de datos heterogéneos. Resulta que la descripción del elemento de control en la programación procedimental sólo es posible a través de las estructuras. Es decir, el elemento de estructura es un control concreto, es decir, el objeto concreto del diálogo con sus propiedades.

En la biblioteca estándar, hay una carpeta Generic en la carpeta Include, que contiene la clase CHashMapque implementa la interfaz de tipo clave-valor.
Un mismo objeto puede tener un conjunto de valores de cualquier tipo. Aunque el árbol de mapas tiene un tiempo de ejecución largo, funciona bastante rápido.
Puede que incluso funcione para describir propiedades, debería probarlo en general.
O utilizar otro tipo de clase de esta biblioteca, que es más adecuado para la tarea.

Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
  • www.mql5.com
Библиотека содержит классы и интерфейсы для определения шаблонных коллекций, которые, в свою очередь, дают пользователю возможность создавать строго типизированные коллекции. Они обеспечивают большее удобство и высокую производительность работы с данными, чем обычные типизированные коллекции.
 

Léalo de nuevo, es decir, usted propone almacenar un array igual a un array de píxeles, para almacenar información en este array (en su caso "qué número de función" debe utilizarse para el procesamiento). ?

 
Maxim Kuznetsov:

Luego vendrá lo contrario: vincular la interfaz con el gráfico. Por ejemplo, haga un botón que esté estrictamente vinculado a la hora y al precio.

Se puede escribir una interfaz gráfica de usuario independiente en muy poco tiempo, con todas las tablas, pestañas, menús y silbatos. En C# o incluso en BASIC. Y dentro de la carta es un problema importante para las aplicaciones externas.

Y entonces, ¿por qué atar la interfaz al gráfico?
Al fin y al cabo, puede obtener cualquier dato, como las marcas de tiempo y los precios, directamente de las funciones correspondientes.

 
Alexandr Andreev:

Léalo de nuevo, es decir, usted propone almacenar un array igual a un array de píxeles, para almacenar información en este array (en su caso "qué número de función" debe utilizarse para el procesamiento). ?

Si me preguntas a mí, yo no he sugerido nada de eso. No he sugerido nada en absoluto)). Sólo describo un poco mis puntos de vista. Usted es libre de no estar de acuerdo.

 
Реter Konow:

En principio, es posible generalizar los tipos. He llegado a la conclusión de que no pasará nada malo, si la gran mayoría de las propiedades de los objetos serán de tipo int. Todos los demás tipos abreviados (el doble está prácticamente ausente en las propiedades de los objetos gráficos) los he rechazado en aras de la simplificación. El "exceso" de memoria es tan insignificante que no tiene sentido pensar en ello. Por supuesto, no podemos ir por tal sacrilegio en aras de la profesionalidad)). Pero estamos en el siglo XXI y no me amenazan las hogueras).

Hice los nombres de los objetos como números, y los puse en la serie general de propiedades de los objetos.

El único lugar donde necesitaba un tipo de datos diferente era en los parámetros de control. Allí creé un segundo núcleo, que almacena las propiedades de los parámetros, y los propios valores en tipo string, que puedo reducir fácilmente a cualquier cosa (más precisamente, a lo que está escrito en las propiedades del parámetro).

SUGERENCIA: Por "parámetro del elemento de control" se entiende el PARÁMETRO GESTIONADO POR EL EQUIPO.

Resulta que el array global, que contiene todos los controles y todas sus propiedades, tiene una profundidad de dimensión igual a la suma de todas las diferentes propiedades de los controles. Es decir, aunque algunas propiedades del control no sean necesarias, estas celdas seguirán estando en este array, ya que el array es siempre uniforme.

Sin embargo, lo que sorprende es la uniformidad del propio conjunto. En este sentido, el uso de una estructura está más que justificado, porque en este caso cada una de las propiedades puede ser descrita por su propio tipo, incluyendo launión.

El uso de estructuras realmente simplifica el almacenamiento de propiedades, no tienes que limitarte a un tipo ni renunciar a nada. No tiene que ocuparse de las conversiones de cadenas a otros tipos de datos... Una estructura elimina todas estas limitaciones desde el principio.

Además de las propiedades y coordenadas propiamente dichas, esta matriz global debe almacenar también el sistema de subordinación de los elementos. Si el objeto Caption de nuestro dibujo ha cambiado, los botones también deben ser redibujados, ya que se encuentran en el campo de la cabecera. Por lo tanto, si algún control del "medio" ha cambiado, todo lo que hay en él debe ser redibujado. Peter, ¿cómo se almacena la estructura de dependencia de los objetos?
 
Алексей Барбашин:

Resulta que el array global, que contiene todos los controles y todas sus propiedades, tiene una profundidad de dimensión igual a la suma de todas las diferentes propiedades de los controles. Es decir, aunque algunas propiedades no sean necesarias para un elemento, estas celdas seguirán estando en este array, porque el array es siempre uniforme.

Sin embargo, lo que sorprende es la uniformidad del propio conjunto. En este sentido, el uso de una estructura está más que justificado, porque en este caso cada una de las propiedades puede ser descrita por su propio tipo, incluyendo launión.

El uso de estructuras realmente simplifica el almacenamiento de propiedades, no tienes que limitarte a un tipo ni renunciar a nada. No tiene que ocuparse de las conversiones de cadenas a otros tipos de datos... Una estructura elimina todas estas limitaciones desde el principio.

El núcleo es la matriz. Contiene todas las propiedades de los objetos.

Puedes elegir tu propio método. Pero, a lo largo de los años de gui, he llegado a la conclusión de que ningún otro método dará un crecimiento similar en la funcionalidad de un sistema en evolución. La máxima simplicidad y eficacia es la perfección.


 
Алексей Барбашин:

...Peter, ¿cómo se almacena la estructura de dependencia de los objetos?

Si te refieres a coordinar dependencias, también en el núcleo.

Tengo un manejador especial para coordinar las dependencias de los objetos. Funciona con todo tipo de dependencias.
 
Roman:

Y entonces, ¿por qué atar la interfaz al gráfico?
Después de todo, puede recuperar directamente cualquier dato, las mismas marcas de tiempo y el precio, desde las funciones pertinentes.

al hecho de que la interfaz de la aplicación (con la que opera el usuario) no se limita a una sola ventana.

Estamos hablando de comercio, ¿no?

Pues bien, la colocación de los elementos interactivos en el gráfico (y su vinculación) es casi imposible de resolver por medios externos.

De nuevo, los diálogos/formularios externos son fáciles de dibujar. Pero los elementos del interior del gráfico son casi imposibles de dibujar sin las particularidades del terminal y del gráfico específico.

 
Реter Konow:
El núcleo es la matriz. Contiene todas las propiedades de los objetos.

Puedes elegir tu propio método. Pero, a lo largo de los años de gui, he llegado a la conclusión de que ningún otro método dará un crecimiento similar en la funcionalidad de un sistema en evolución. La máxima simplicidad y eficacia es la perfección.


La matriz es bucles anidados y los bucles anidados son tiempo. Imho, sin sarcasmo, sólo razonando lógicamente.

 

Peter, obtienes lo siguiente: el núcleo consiste en una matriz global de propiedades de elementos, una matriz global de valores de elementos, una matriz global de dependencias, una matriz global de imágenes...

Si hay que añadir más propiedades, se aumenta la dimensionalidad de las matrices.

Se accede a las propiedades estrictamente por índices porque las celdas no tienen nombres.

Al menos se puede acceder a los nombres de los campos con una estructura.

Peter, eres... gigante...

Yo, por ejemplo, lo veo así (simplificado):

class CControl : public CObject

{

public:

        int ПозицияХ;

        int ПозицияY;

        int Длина;

        int Ширина;

        color ЦветОсновы;

        color ЦветБордюра;

        int ТолщинаБордюра;

}

Una "clase" de facto es una cadena específica en su matriz global, sólo que con una cara más "humana". Las clases están diseñadas para crear sus propios objetos de datos, con un conjunto de propiedades comprensibles a las que se puede acceder por nombre en lugar de por índice. Una clase es sólo un constructor de tipo universal.

Así, creamos un control básico que contiene las propiedades más comunes, que casi cualquier control tiene.

Se pueden crear objetos especializados basados en él:

class CButton : public CControl 

{

public:

        string Заголовок;

        int Image[];

}

Es decir, cada tipo de control posterior simplemente complementa el tipo base con las propiedades requeridas.

Y puesto que, como he escrito antes, las propiedades básicas se almacenan en el control base, el recorrido de "golpear" el cursor en el control se hace comprobando un tipo de datos: CControl. Habiendo encontrado el objeto deseado, el programa tiene inmediatamente acceso a las propiedades de ese objeto, ya que el punto del programa ya está en el propio objeto, al igual que en su bucle el programa está en la línea del array deseado.

Razón de la queja: