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

 
Anatoli Kazharski:

ElementSet, donde hay que especificar (1) propiedad y valor o (2) propiedad, modificador y valor.

Sí, es universal en términos de acceso a las propiedades de control.

Generalmente PropGet/Set es un buen mecanismo para manejar las clases de plantilla cuando la interfaz heredada es inicialmente desconocida.


Pero quiero devolver la discusión a mi pregunta original: ¿cómo puedo hacer un "inicio rápido" para un programador sobre el esquema de colores de los controles?

Y es posible implementar no un funcional (SetBgColor o SetProp(Enum_Color, ), etc.), sino una clase de atributos más universal.
Para que todos los controladores accedan a una clase universal de atributos y el codificador pueda entender fácilmente qué color utiliza cada controlador.

Pero todo esto es mi razonamiento sobre mi esquema. No excluyo que todavía cambie mucho cuando empiece la transición. Así que todo lo que escribí anteriormente puede no ser relevante para el tema que se está discutiendo aquí. )

Debe desarrollarlo hasta un resultado satisfactorio ) cuanto más codificadores lo entiendan, menor será el umbral para entrar en sus clases de características.
 
o_O:

En principio estoy de acuerdo, quedará claro qué colores tiene y qué se puede cambiar.

¿Implica el tema la redundancia de los parámetros no utilizados?

Sí, es redundante, para todas las variantes. Pero entonces es conveniente crear un nuevo tema repintando y cambiando valores en el anterior. Al igual que los temas en Windows.

P.D.

Y soy escéptico sobre los cambios masivos de algunos valores por el codificador diferentes de los utilizados en el tema actual. Me recuerda a un proyecto de Delphi en el que lo primero que intentas hacer es pintar la interfaz con tus propios colores que posteriormente no cambia al cambiar el tema del sistema.

¿Y por qué manchar los estilos de diseño en alguna parte? Heredar una clase de tema de uno de los temas existentes y redibujar sólo aquellos valores en él que necesitan ser cambiados.

 

existe esta tecnología CSS

1) conocido y bien documentado

2) familiar y versátil

3) etiquetas==controles en principio, lo que lo hace adecuado para nuestra tarea


pruébalo, debería funcionar como se pretende.

 
o_O:

hay una tecnología CSS


Entonces vaya directamente a LESS / SCSS (SASS)
 
Igor Volodin:

Entonces vaya directamente a LESS / SCSS (SASS)

ugh, Lass es probablemente bueno, pero no necesitamos su funcionalidad. no estamos haciendo un intérprete.

Tomamos puramente el principio de construir y redefinir estilos en cascada^selectiva^punto a punto - la forma en que lo hacen.

 

Y asegúrese de incluir una opción de diseño responsivo para diferentes resoluciones. Ver las consultas de medios en CSS

Y algunas partes pueden tener un tamaño fijo, mientras que otras pueden estirarse al máximo.

 

Estimados miembros del foro, no deseo desmotivar a nadie, pero en mi opinión, la tecnología que se está debatiendo es tan compleja que no puede aplicarse mediante esfuerzos dispersos conjuntos. No podemos combinar estos esfuerzos de forma eficaz, ya que todos diferimos en niveles de comprensión, profesionalidad y enfoques... También nos separan las distancias e incluso los países.

Mi conclusión es que esta tecnología puede ser implementada por un solo desarrollador que haya trabajado mucho y duro en ella. Tal vez más de un año. Pero es poco probable que esta persona haga crowdsourcing de esta tecnología porque puso demasiado esfuerzo, demasiada alma, y simplemente se agotó con este trabajo... Es su proyecto y tiene derecho a no distribuirlo libremente. (Quizá al principio, pero no siempre).

Creo que esta tecnología ya se ha implementado en MQL.

P.D. Aunque, aunque lo sea, ¿por qué no intentar aplicarlo de nuevo? ))

 
Igor Volodin:

Por qué puede ser útil:

1. la interfaz del mapa de bits es rápida. Tan rápido que es prácticamente indistinguible de la interfaz del sistema. Por ejemplo, he implementado elementos translúcidos con gradientes, eincluso cuando se mueven, se renderizan suavemente sin ningún retraso visible, teniendo en cuenta la mezcla de colores y el cálculo del canal alfa en otros objetos con gradientes translúcidos.

2. La interfaz es escalable. Puedes hacer la aplicación más compleja y no se ralentizará debido a la eliminación y creación de un gran número de objetos gráficos. Los costes de redibujado son mínimos, sólo se trata de sustituir una imagen, en milésimas de segundo.

3. Puede crear controles ya hechos y proporcionar la capacidad de crear otros nuevos, porque puede proporcionar su propio grupo de eventos, por ejemplo:

OnMouseDown - pulsó el LKM

OnMouseUp - se pulsa el botón del ratón

OnMouseHoverOn - al pasar el cursor del ratón por encima de un objeto

OnMouseHoverOut - aleja el cursor del ratón del objeto

OnMouseClick - pulsar y hacer clic dentro de los límites del objeto

OnMouseDblClick - doble clic del ratón dentro de los límites del objeto

OnDragStart - evento que ocurre una vez al inicio del movimiento con el botón izquierdo del ratón presionado

OnDragMove - evento generado durante el movimiento con el botón izquierdo del ratón

OnDragEnd - evento generado después de moverse con LKM

OnPut - el objeto se convierte en otro objeto

OnGet - el objeto es volcado a otro objeto

OnFocus - El objeto se ha enfocado

OnBlur - el objeto pierde el foco

OnResize - El objeto ha cambiado de tamaño

OnParentResize - El objeto padre ha cambiado de tamaño

OnKeyPress - una tecla pulsada

OnChange - El valor de un campo ha cambiado

etc.

Estás exagerando un poco en lo siguiente:

La velocidad a la que se dibuja un mapa de bits depende de su tamaño. Si se redibuja todo el mapa de bits que representa la ventana cuando se redibuja la pieza, la respuesta será lenta (verificada). La solución obvia es repintar sólo el área del mapa de bits.

Sin embargo, para redibujar sólo una parte del patrón del mapa de bits que representa una ventana, es necesario almacenar la máscara digital del mapa de bits en la memoria (en una matriz). A continuación, hay que navegar dentro de esta máscara, y encontrar el patrón deseado dentro de ella. Sin embargo, hay que tener en cuenta que puede haber muchas ventanas. Ahora evalúe la cantidad de memoria necesaria para almacenar las máscaras de todas las ventanas. Se podría idear un sistema de prioridades para elegir qué ventanas recordar y cuáles "olvidar", y cuándo. Sin embargo, no es una tarea fácil.

Tienes que entender que redibujar es reescribir valores en un array, y si necesitas reescribir 1000000 valores (número aproximado de píxeles en la imagen de la ventana y en el mapa de bits), no serán "milésimas de segundos", sino segundos. Por lo tanto, debe dibujar una ventana completamente sólo una vez, guardarla en la memoria y luego, en los eventos, volver a dibujar cada objeto por separado. Entonces la velocidad será muy alta.

Aparentemente, has implementado sólo objetos separados, pero intenta crear una ventana e implementar la interactividad de sus elementos allí, entenderás lo que quiero decir.

En cuanto a los eventos que has citado, su implementación en el programa no está relacionada con la tecnología de los controles de dibujo y debería estar presente en cualquier interfaz.

 
Реter Konow:

...

Aparentemente sólo has implementado objetos individuales, pero prueba a crear una ventana e implementar la interactividad de tus elementos allí, verás a lo que me refiero.

...

Lee desde este post(enlace) y mira los ejemplos de gif-animaciones allí también.
Обсуждение статьи "Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1)"
Обсуждение статьи "Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1)"
  • www.mql5.com
Включение в проект классов для хранения указателей и обработки событий.
 
Реter Konow:

Está exagerando un poco lo siguiente:

La velocidad de dibujo del mapa de bits depende de su tamaño. Si se vuelve a pintar todo el mapa de bits que representa una ventana, la respuesta será lenta (probado). La solución obvia es hacer que sólo se pinte la zona de la pieza.

Sin embargo, para redibujar sólo una parte de un dibujo de mapa de bits que representa una ventana, es necesario tener una máscara digital de ese mapa de bits almacenada en la memoria (en una matriz). A continuación, tienes que navegar dentro de esta máscara, y encontrar la parte que quieres en ella. Sin embargo, hay que tener en cuenta que puede haber muchas ventanas. Ahora evalúe la cantidad de memoria necesaria para almacenar las máscaras de todas las ventanas. Se podría idear un sistema de prioridades para elegir qué ventanas recordar y cuáles "olvidar", y cuándo. Sin embargo, no es una tarea fácil.

Tienes que entender que redibujar es reescribir valores en un array, y si quieres reescribir 1000000 valores (número aproximado de píxeles en la imagen de la ventana y en el mapa de bits), serán segundos, no "milésimas de segundo". Por lo tanto, debe dibujar una ventana completamente sólo una vez, guardarla en la memoria y luego, en los eventos, volver a dibujar cada objeto por separado. Entonces la velocidad será muy alta.

Probablemente hayas implementado sólo objetos individuales, pero intenta crear una ventana e implementar la interactividad de tus elementos allí, entenderás de lo que hablo.

En cuanto a los eventos que has citado, su implementación en el programa no está relacionada con la tecnología de los controles de dibujo y debe estar presente en cualquier interfaz.

Quiero hacer una pequeña aclaración:

Primero creamos una máscara digital de la ventana con todos sus elementos. Luego creamos un mapa de bits con ResourceCreate(). Tenemos nuestra ventana en el gráfico.

Luego movemos el ratón sobre la interfaz de esta ventana y captamos, por ejemplo, el evento de apuntar (_Object_Pointed).

Describiré dos enfoques de la implementación de la interactividad de los objetos - uno malo, el otro - mejor:

1. Si la máscara digital de nuestra ventana no se guardó en la matriz después de su creación, entonces para cambiar cualquier detalle del dibujo de esa ventana, tenemos que volver a crearla completamente. Es decir, hay que redigitalizarlo. Esto en sí mismo lleva tiempo porque necesitas inicializar el array con los valores de color de los píxeles de todos los detalles de la ventana para pasarlo a ResourceCreate(). Cuanto más grande sea la ventana y más detalles contenga, más tiempo tardará (entre 250 milisegundos y 2 segundos). Y así, en cada evento de cada elemento. Esta opción es demasiado defectuosa.

2. Si se ha almacenado una máscara numérica en una matriz, sólo hay que reinicializar los valores que se refieren a una parte concreta de esa ventana. Encontramos esa parte en el array y reescribimos sus valores. A continuación, - enviamos el array a ResourceCreate() y obtenemos inmediatamente el resultado.

Esa es en realidad toda la tecnología. Casi))

Razón de la queja: