Realización de un proyecto crowdsourced en Canvas - página 23
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
))) Entonces, ¿por qué empecé este tema? ) Ahora voy a estudiar OOP.
Esa es la ventaja de su camino: de la práctica a la teoría. Yo también lo he hecho así. Mi instinto se resistió al paradigma OOP durante mucho tiempo, porque empecé a programar cuando no existía en la naturaleza. Pero ahora entiendo que es el invento más valioso de la programación. Y a veces me parece que si no se hubiera inventado aún la AOP, la habría inventado yo mismo :))
A ti, Peter, te gustará y estarás encantado cuando te des cuenta de la maravilla de la POO y de las oportunidades que abre. Se lo aseguro :)). Y no hay nada complicado y enredado en la POO, especialmente para ti con tu experiencia en programación. Y me parece que, en su caso, la documentación de Metakvot puede incluso ser suficiente para llegar al fondo del asunto. Hay mucha literatura por ahí.
Pero Nikolay, todavía no entiendo lo que estaba preguntando - ¿hay una posibilidad de establecer un color específico para las líneas de degradado del marco en la clase CCcanvas? Viendo su ejemplo, uno podría pensar que hay... Si es así, ¿puede dibujar algo similar a mi ejemplo?
VALE, VALE. Aunque no es un tema de este hilo, pero intentaré aclarar cosas que parecen obvias para los programadores con conocimientos, pero que no lo son para los programadores que se encuentran con Canvas por primera vez.
Entonces, ¿qué es el lienzo? Traducido del inglés es un lienzo. Se trata simplemente de cualquier área de la pantalla dentro de una ventana a la que se adjunta. Sus principales características son su tamaño (anchura y altura). Y de hecho, es un array unidimensional de puntos de tipo uint (4 bytes) con tamaño Width*Height. En la implementación de la clase CCanvas este array se llama m_pixels, y por defecto es privado (lo que significa que es accesible sólo dentro de la clase), pero yo personalmente siempre lo hago público (accesible no sólo dentro de la clase, sino también en las aplicaciones de usuario), porque quiero operar con el array de datos directamente. Cada punto de este lienzo puede tomar cualquier valor de tipo de color (también 4 bytes como uint, un byte reservado), lo que significa un punto de cualquier color RGB. Cada color (rojo, verde o azul) corresponde a un byte (256 valores), por lo que hay 256*256*256=16.777.216 colores RGB en total.
Para poner un punto rojo en las coordenadas X,Y, donde X puede tomar valores de 0 a (Ancho-1) e Y de 0 a (Alto-1) sólo hay que asignar un valor rojo a una celda del array m_pixels numerada (Y*Ancho+X) :
m_pixels[Y*Width+X]=clrRed;
o lo que es lo mismo:
¡¡¡Eso es todo!!!
Ahora ni siquiera se pueden utilizar las funciones integradas de la clase CCanvas (lo que, por supuesto, es una tontería, porque hay un montón de cosas útiles allí) . Si puedes poner un punto en la pantalla en cualquier lugar y en cualquier color, Dios lo que quieras y dibújalo: botones, gráficos, crea tu propio GDI, etc.
Y si alguien piensa que Kanvas es lento, se equivoca. Kanvas es increíblemente rápido y es un mérito del equipo de desarrollo. He probado la velocidad de dibujo de kanvas muchas veces usando bibliotecas Dll escritas en C++ también. Ahora, tras las actualizaciones del último año, el lienzo en MT5 es casi tan rápido como si lo hubieras escrito en Visual Studio en C++. Sólo es un 10-15% más lento. Y no olvides que Windows está escrito en C++ y que todo es Canvas. ¡¡¡Esta es la belleza y la promesa de MT5 con su MQL5!!! Ni Java ni C# podrán presumir de tal velocidad, como algunos han escrito en este hilo.
No en vano, los desarrolladores han introducido recientemente una nueva propiedad CHART_SHOW para desactivar la representación de gráficos.
Te lo demostraré con un ejemplo de guión:
Funcionamiento de este script:
La pantalla se borra, pero el acceso a las cotizaciones permanece y podemos usar este lienzo en blanco para hacer nuestra propia interfaz de gráfico, como esta con un gradiente:
Pero Nikolai, todavía no he entendido lo que preguntaba: ¿hay una opción en la clase CCcanvas para establecer un color específico a las líneas de degradado del marco? Viendo su ejemplo, uno podría pensar que hay... Si es así, ¿puede dibujar algo similar a mi ejemplo?
Dibuja algo similar a tu ejemplo - es tu tarea, Peter :)) Vamos, empezar a entender las clases, de ahí la OOP.
Buena suerte.
Buena suerte.
Bien, Nikolai. Gracias y buena suerte para ti también.
Nikolai, quise responder a tu post informativo de ayer, pero no pude ordenar mis pensamientos. Ahora he reunido mis pensamientos y me he dado cuenta de que tengo que escribir desde el corazón, no desde la mente, porque si no, no explicaré nada. Por supuesto, sería off-topic y los moderadores probablemente lo borrarían, pero aun así...
Lo que escribes sobre OOP es inspirador. Ya he empezado a estudiarlo con la seria intención de dominarlo. Sin embargo, en el proceso de aprendizaje, me bombardearon constantemente con preguntas de la categoría "¿por qué tomar el camino largo cuando hay un atajo?" Constantemente veía formas fáciles, concisas y claras de resolver los problemas, y era como si me dijeran: "¡No! En POO esto no es una solución. Hay que hacerlo de una manera formal, formal y noble". En respuesta me pregunté: "¿Pero cómo puede ser? No necesito esas entidades. ¿Por qué debería añadirlos al código? Son superfluos. Quiero comprimir el código". Y yo dije: "No, no es profesional. Eso es un mal código".
Estuve discutiendo mucho sobre el tema de la OOP tratando de averiguar cuáles eran sus ventajas para mí. Pensé: "Si resuelvo las tareas perfectamente bien y con facilidad sin POO, ¿por qué debería utilizarla? ¿Por qué debería complicar las cosas adicionalmente simples y claras para mí? ¿Cómo, dónde y por qué debo poner en mi código algo que no necesito?". Entonces decidí que no necesito OOP porque lo hago todo yo mismo y soy muy bueno en ello. Cuando lo haces todo tú mismo y no esperas enchufar nada y además buscas y encuentras las soluciones más eficaces, entonces surge una pregunta natural: "¿Por qué otra cosa? Parece que la POO le da comodidad y orden a un programa. Sí, así es. Pero yo tengo mi propia orden. Mi propia estructura. Mis propias entidades. Mis propias reglas. Entonces, ¿por qué debería rechazarlo?
Al igual que nuestros cuerpos rechazan el tejido ajeno, yo no podría "fusionarme" con el producto del pensamiento ajeno. En todas partes y en todo me sentí rechazado. Para mí, la OLP fue una orden creada por el pensamiento de otra persona y no pasó mi prueba de eficacia. Esta prueba fue el factor decisivo para mí. Me di cuenta de que si utilizo la POO seré un programador más débil que si sigo mi propio camino y resuelvo todos los problemas yo mismo. Mi "fuerza de programación" es que escribo en un lenguaje que entiendo en ruso, utilizo una memoria global compartida para los objetos gráficos, a la que llamo "kernel", y creo mecanismos grandes y complejos que funcionan con este kernel. Este es mi enfoque.
No programaré OOP hasta que alguien me derrote con este enfoque. Hasta que haga lo mismo que yo, pero más eficazmente.
He preguntado sobre los kanvas porque quería entender por qué mi mecanismo resulta ser más eficaz de hecho. No en las teorías, ni en la belleza del código, sino en la práctica.
En fin, gracias Nikolay por inspirarme y guiarme. ))
...
No programaré OOP hasta que alguien me gane con este enfoque.
...
Ese alguien es probablemente uno de esos molinos de viento contra los que luchas tan frenéticamente en tu imaginación. )
Este alguien debe ser uno de esos molinos de viento contra los que luchas tan frenéticamente en tu imaginación. )
¡Ahí lo tienes! Vienen los trolls...))
No soy en absoluto un fan de la POO, pero hay que conocerla y saber usarla con claridad si te consideras un programador, al menos por autoformación.
Pero utilizarlo o no para resolver sus tareas de aplicación depende de usted.
Cálmate Peter. Sólo son molinos. Sólo están parados, cumpliendo una función determinada y no tratando de vencerte. Aunque quién sabe cómo se está visualizando en su fértil imaginación. Por lo que parece, tiene un aspecto muy espectacular. )
Anatoly, molinos o no, me gusta luchar y ganar. Especialmente en lo que soy bueno. Me gusta la competición en vivo, los duelos y demás... Todo forma parte de la evolución y la selección natural. Así que está bien... Siempre que las reglas sean justas.
Colaborar con personas afines, participar en proyectos comunes, trabajar en equipo, también es genial. Y la imaginación, por supuesto, no debe sustituir a la realidad. Si eso es lo que quieres decir, estoy de acuerdo.
... Pero hay que conocerlo y saber utilizarlo con claridad si te consideras un programador, al menos por autoformación.
Pero depende de ti utilizarlo o no para tus propias aplicaciones.
No programaré OOP hasta que alguien me derrote con este enfoque. Hasta que hagan con ella lo mismo que yo, pero aún más eficientemente.
He preguntado sobre los kanvas porque quería entender por qué mi mecanismo resulta ser más eficaz de hecho. No en las teorías ni en la belleza del código, sino en la práctica.
En cualquier caso, gracias Nikolay por inspirarme y guiarme. ))
Si dos programadores con igual experiencia e inteligencia compiten en la creación degrandes proyectos similares. Pero el primero sólo utiliza funciones, mientras que el segundo utiliza funciones y clases. El segundo ganará definitivamente. Pero, repito, si se trata de un proyecto voluminoso, esto último lo hará más rápido porque habrá menos errores y más orden. Y el producto de la segunda será más legible, fácil de mantener y de actualizar y complementar. Esto ni siquiera es mi imho, es sólo una declaración de hechos. Es más fácil cavar un agujero con una pala que con una paleta. Si implementaras tu mecanismo no sólo en las funciones sino también en las clases, sería más eficiente. Esa es mi opinión.
Y, Peter, he echado un vistazo rápido a tu código y me he dado cuenta de que estás utilizando canvas al máximo (aunque no la clase CCanvas, pero a quién le importa). ¿Por qué todas estas preguntas sobre el lienzo y por qué estoy tratando de explicar todas estas cosas aquí? :)).