Gráficos no terminal MetaTrader 5: Canvas - desenho interior, o buffer com o snap de objeto

 

A nova função ResourceCreate surgiu na versão 619 para criar recursos gráficos dinâmicos em tempo real.

Com esta função, agora é possível criar qualquer imagem colorida complexa em 32 bits (incluindo o canal alfa) e anexá-la a objetos gráficos.

Como os desenvolvedores podem se beneficiar:

  • programas podem criar rapidamente belas interfaces, sem a necessidade de carregar lotes de arquivos

  • arquivos de recursos adicionais (não apenas BMP e WAV) podem ser adicionados diretamente para arquivos EX5, usando a diretiva # Resource "file name", com leitura em tempo de execução, modificando e aplicando a objetos

    A função ResourceLoad() estará disponível na próxima versão. Isso permitirá a leitura dos recursos que são anexados ao arquivo EX5 com antecedência

  • é possível aplicar qualquer construção analítica sobre uma gestão transparente de gráfico, usando canais alfa

    por exemplo, podemos desenhar uma nuvem semi-transparente com a previsão de possíveis direções do mercado, gerenciamento de cores e saturação

  • desenhar qualquer coisa no gráfico

Em breve iremos adicionar a classe CCanvas na biblioteca padrão. Esta classe permitirá manipular facilmente as imagens, desenhando-as em seu próprio buffer com saída a um objeto vinculado.

Aqui está um script simples mostrando o funcionamento dessa classe (os arquivos estão anexos):

#include "Canvas.mqh"
//+------------------------------------------------------------------+
//| Função Start do Programa Script                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   CCanvas can;
//---
   can.Create("MySpace",0,0,512,512,COLOR_FORMAT_ARGB_RAW);
   MathSrand(0);
//---
   for(int i=0;i<10000;i++)
     {
      can.FillRect(MathRand()&255,MathRand()&255,256+(MathRand()&255),256+(MathRand()&255),XRGB(MathRand(),MathRand(),MathRand()));
      can.Circle(MathRand()&511,MathRand()&511,MathRand()&127,XRGB(MathRand(),MathRand(),MathRand()));
      can.Triangle(MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,MathRand()&511,XRGB(MathRand(),MathRand(),MathRand()));
      //---
      can.Update();
     }
//---
  }