El lienzo es genial. - página 6

 
Vladimir Karputov:

canvas.Rectangle no es un objeto, es un comando para dibujar un montón de píxeles. Es como un disparo: se dispara una bala y adiós. No hay retroalimentación.

Gracias por la falta de comentarios - lo tengo.

Rashid Umarov:

Hay un artículo titulado Explorando la clase CCanvas.Implementación de la transparencia de los objetos gráficos, debe haber una solución.

Lo he visto 217 veces y ahora está abierto, pero no he visto ninguna solución.

Necesito un ejemplo en vivo para cambiar el color del lienzo y del marco en OnTick().

Gracias.

 
Vitaly Muzichenko:

Gracias por la conexión - lo tengo.

Lo he mirado 217 veces, y ahora está abierto, pero no he visto la solución.

Necesito un ejemplo en vivo para cambiar el color del lienzo y del marco en OnTick().

Gracias.

Basado en mi código, sólo se ha quedado en cambiar el color del lienzo y dibujar un marco.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static long counter=0;
   counter++;
   if(counter%40==0)
     {
      m_canvas.Erase(ColorToARGB(clrBlue,210));
      m_canvas.Rectangle(10,10,m_canvas.Width()-10,m_canvas.Height()-10,ColorToARGB(clrRed,255));
      m_canvas.Update();
      return;
     }
   if(counter%20==0)
     {
      m_canvas.Erase(ColorToARGB(clrRed,210));
      m_canvas.Rectangle(10,10,m_canvas.Width()-10,m_canvas.Height()-10,ColorToARGB(clrBlue,255));
      m_canvas.Update();
      return;
     }
  }


Como utilizo colores con transparencia, he especificado"COLOR_FORMAT_ARGB_NORMALIZE" al crear el lienzo:

//--- create canvas
   if(!m_canvas.CreateBitmapLabel("SampleCanvas",5,15,700,300,COLOR_FORMAT_ARGB_NORMALIZE))
Archivos adjuntos:
 
Vladimir Karputov:

Basándome en mi propio código, sólo pongo un cambio de color del lienzo y dibujo un marco.


Como utilizo colores con transparencia, he especificado"COLOR_FORMAT_ARGB_NORMALIZE" al crear el lienzo:

Voy a echar un vistazo ahora, ¡gracias!

Lo que esperaba obtener, lo conseguí hace tiempo, es un lienzo apenas transparente con un marco y una selección, pero ahora tengo que cambiar los colores, lo que no funciona.


 
Vitaly Muzichenko:

Voy a echar un vistazo ahora, ¡gracias!

Lo que esperaba obtener, lo conseguí hace tiempo, es un lienzo apenas transparente con un borde y una selección, pero ahora necesito cambiar los colores, lo que no funciona.


Probablemente el problema sea ENUM_COLOR_FORMAT (al crear el lienzo) y el método de obtención del color.

 
Vitaly Muzichenko:

En OnInit creo un lienzo

Entonces necesito cambiar el color a las 10:00 a gris en OnTick y devolverlo al estado original de nuevo a las 11:00.

No funciona:

Pregunta:

¿Cómo puedo cambiar el color del lienzo y del marco - sin referencia a los nombres de los objetos?

Gracias.

Tengo la sensación de que te has metido con los colores.

¿Cuál es el significado de esta línea?

ObjectSetInteger(0,"CanvasExamlple",OBJPROP_COLOR,clrNONE);

COLOR_FORMAT_ARGB_NORMALIZE no necesita llenar el lienzo con el color de fondo, sino llenarlo con cero:

canvas.Erase(0);

ya que significa que el lienzo es completamente transparente.

También es conveniente utilizar la representación de 16 colores:

por ejemplo:

0x00000000 - negro totalmente transparente

0xFF000000 - negro opaco

0xFFFFFFFFFF - blanco opaco

0xFFFF0000 - rojo opaco

0xFF00FF00 - verde opaco

0xFF0000FF - azul opaco

0x8000FF00 - verde translúcido

0x80FFFFFFFF - negro translúcido

0xFF808080 - gris

etc.

 
Vladimir Karputov:

Probablemente un problema con ENUM_COLOR_FORMAT (al crear el kanvas) y el método de obtención del color.

Problema resuelto.

Mi código no tenía el lienzo eliminado cuando cerraba el terminal, por lo que ya estaba en el gráfico al iniciarse, por lo que no se inicializaba, y los cambios de propiedades no sabían dónde aplicarse.

Gracias a todos.

 
Nikolai Semko:

Tengo la sensación de que te has metido con los colores.

¿Qué sentido tiene esa línea?

ObjectSetInteger(0,"CanvasExamlple",OBJPROP_COLOR,clrNONE);

El punto de la línea es que sin ella se obtiene esta imagen


Si con la línea, entonces es correcto, un bonito marco con mi color elegido


 
Vitaly Muzichenko:

Problema resuelto.

Mi código no eliminó el lienzo cuando cerré el terminal, por lo que ya estaba en el gráfico cuando lo inicié, por lo que no se inicializó, y los cambios de propiedades no sabían dónde aplicarse.

Gracias a todos.

Hmmm, realmente no se puede adivinar dónde está el perro a la vez :)

 

Demostración de una secuencia de comandos con escala de mapa de bits

En el archivo Ex5 se encuentra un archivo BMP bastante grande como recurso.


Archivos adjuntos:
TestScaling.ex5  784 kb
 
Nikolai Semko:

Demostración de script de escalado de trama

No, es realmente impresionante.

Pero, tienes que hacer algún complemento útil que aproveche todas esas características de Canvas.

Para que su trabajo no sufra el mismo destino que el adaptador CGA, un maravilloso adaptador gráfico, incomprendido y subestimado por sus contemporáneos.

Yo mismo siempre consideré que el CGA era "más cutre que nunca" al perder con los gráficos de ocho bits del Commodore 64 o del Sinclair Spectrum. Pero recientemente resultó que, simplemente por la falta de popularidad - casi nadie utilizó todas las oportunidades de esta tarjeta. Y casi no había juegos que pudieran competir con los ordenadores domésticos de ocho bits.

Si IBM hubiera promovido el CGA, si esta demo hubiera aparecido en 1981, el CGA habría sido mucho más popular, y posiblemente el EGA se habría lanzado más tarde:


Cuando miro esta pantalla, no puedo creer que esto sea posible en un viejo adaptador CGA con su videomemoria de 16K, conectado a un televisor doméstico común (el monitor RGB no es adecuado para esto en absoluto. Esa era la idea de los desarrolladores: mejor calidad de texto en el monitor RGB, pero pobre paleta de colores, pero ricas posibilidades gráficas con texto mal legible en el televisor doméstico con una entrada compuesta)

Razón de la queja: