Objets Graphiques dans MetaTrader 5 : Canvas - dessin à l'intérieur du tampon avec l'accrochage aux objets

 

La nouvelle fonction ResourceCreate est apparue dans la build 619 pour la création de ressources graphiques dynamiques à la volée.

Avec cette fonction, vous pouvez désormais créer des images complexes en couleur 32 bits (y compris le canal alpha) et les attacher à des objets graphiques.

Comment les développeurs peuvent-ils en bénéficier :

  • les programmes peuvent créer rapidement de belles interfaces sans avoir besoin de transporter beaucoup de fichiers

  • des fichiers de ressources supplémentaires (pas seulement BMP et WAV) peuvent être ajoutés directement aux fichiers EX5 à l'aide de la directive # Resource "file name", lus à l'exécution, modifiés et appliqués aux objets

    La fonction ResourceLoad() sera disponible dans la version la plus proche. Cela permettra de lire les ressources qui avaient été attachées au fichier EX5 quelque temps auparavant

  • il est possible d'appliquer n'importe quelle construction analytique sur un graphe gérant la transparence avec l'utilisation de canaux alpha

    par exemple, nous pouvons dessiner un nuage semi-transparent avec la prédiction des directions possibles du marché en gérant la couleur et la saturation

  • dessiner n'importe quoi sur un graphique

Bientôt, nous ajouterons la classe CCanvas à la bibliothèque standard. Cette classe permettra de manipuler facilement les images en les dessinant dans son propre tampon avec la sortie vers un objet lié.

Voici un script simple montrant le fonctionnement de cette classe (les fichiers sont joints) :

#include "Canvas.mqh"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
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();
     }
//---
  }