Discussion de l'article "Étudier la classe CCanvas. Comment dessiner des objets transparents" - page 4

 
Artyom Trishkin:
MQL4 ;)

Je ne suis pas favorable à MQL4. Tous les exemples sont uniquement dans MQL5.

//+------------------------------------------------------------------+
//|Test.mq5 |
//|Copyright © 2016, Vladimir Karputov
//| http ://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
#include <Canvas\Canvas.mqh>
CCanvas     m_canvas;           // l'objet canvas
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime arr_time[];
   double   arr_open[];
   double   arr_close[];
   if(CopyTime(Symbol(),Period(),0,2,arr_time)==-1)
      return;
   if(CopyClose(Symbol(),Period(),0,2,arr_close)==-1)
      return;
   if(CopyOpen(Symbol(),Period(),0,2,arr_open)==-1)
      return;
   int x1,y1,x2,y2;
   if(!ChartTimePriceToXY(0,0,arr_time[0],arr_open[0],x1,y1))
      Print("Error ",GetLastError());
   if(!ChartTimePriceToXY(0,0,arr_time[1],arr_close[0],x2,y2))
      Print("Error ",GetLastError());
//x1 = Time[1] ;
//y1 = Open[1] ;
//x2 = Time[0] ;
//y2 = Close[1] ;
   Print("arr_time[0]=",arr_time[0],", arr_open[0]=",arr_open[0]);
   m_canvas.CreateBitmapLabel("COLOR_FORMAT_ARGB_NORMALIZE",x1,y1,MathAbs(x2-x1),MathAbs(y2-y1),COLOR_FORMAT_ARGB_NORMALIZE);
   m_canvas.Erase(ColorToARGB(clrBlue,200));
   m_canvas.Update();
   Sleep(10000);
   m_canvas.Destroy();
  }
//+------------------------------------------------------------------+
//| Obtient la largeur du graphique (en pixels)|
//+------------------------------------------------------------------+
int ChartWidthInPixels(const long chart_ID=0)
  {
//--- préparer la variable pour obtenir la valeur de la propriété
   long result=-1;
//--- réinitialiser la valeur de l'erreur
   ResetLastError();
//--- reçoit la valeur de la propriété
   if(!ChartGetInteger(chart_ID,CHART_WIDTH_IN_PIXELS,0,result))
     {
      //--- afficher le message d'erreur dans le journal des experts
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- renvoie la valeur de la propriété du graphique
   return((int)result);
  }
//+------------------------------------------------------------------+
//| Obtient la hauteur du graphique (en pixels) ||
//+------------------------------------------------------------------+
int ChartHeightInPixelsGet(const long chart_ID=0,const int sub_window=0)
  {
//--- préparer la variable pour obtenir la valeur de la propriété
   long result=-1;
//--- réinitialiser la valeur de l'erreur
   ResetLastError();
//--- reçoit la valeur de la propriété
   if(!ChartGetInteger(chart_ID,CHART_HEIGHT_IN_PIXELS,sub_window,result))
     {
      //--- afficher le message d'erreur dans le journal des experts
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- renvoie la valeur de la propriété du graphique
   return((int)result);
  }
//+------------------------------------------------------------------+

Et le résultat du script :

résultat

 

Vladimir, une question pour vous en tant qu'expert.

Il y a un panneau sous la forme d'un canevas. Des lignes de tendance sont tracées sur le graphique. Comment les cacher derrière le canevas ?

Captures d'écran de la plateforme de trading MetaTrader

RTS Splice, H1, 2016.10.16

JSC &#39;&#39;Otkritie Broker&#39;&#39 ;, MetaTrader 5, Demo

RTS Splice, H1, 2016.10.16, JSC ''Otkritie Broker'', MetaTrader 5, Démo


 
Dennis Kirichenko:

Vladimir, une question pour vous en tant qu'expert.

Il y a un panneau sous la forme d'un canevas. Des lignes de tendance sont tracées sur le graphique. Comment les cacher derrière le canevas ?


Par exemple, détruire le panneau et les dessiner à nouveau....
 
Oui, merci. Jusqu'à présent, j'ai eu l'idée de placer des objets dans l'arrière-plan....
[Supprimé]  
Vladimir Karputov:
Merci pour cet article. Malheureusement, tous les liens vers la documentation qu'il contient sont cassés.
 
Alexey Kozitsyn:
Merci pour cet article. Malheureusement, tous les liens de documentation qu'il contient sont cassés.

Merci pour le message - l'aide a été reconstruite, d'où les erreurs. Nous allons corriger les liens.

 
Vladimir Karputov:

Au moyen de la classe CCanvas ?

P.S. Utilisez CCanvas.CreateBitmap:

Crée une ressource graphique liée à un objet graphique.

1. Crée une ressource graphique dans la fenêtre principale du graphique actuel.

bool CreateBitmap(
const string nom, // nom
const datetimetime, // date
const doubleprice, // prix
constintwidth, // largeur
const int hauteur, // hauteur
ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA// format
) ;

Ainsi, vous pourrez lier un coin d'un Canvas. Mais la largeur et la hauteur seront tout de même exprimées en pixels.


Puis-je écrire en russe ici ?

Parce que vous donnez des instructions à l'un, mais en réalité vous professez deux poids deux mesures.

 
Alexey Kozitsyn:
Merci pour cet article. Malheureusement, tous les liens vers la documentation qu'il contient sont cassés.
Les liens ont été corrigés. Merci pour le message.
 
Alexey Petrov:
Les liens ont été corrigés. Merci pour le message.

Des erreurs subsistent.

Paragraphe d'introduction :

...

Avant de commencer à dessiner directement avec la classe CCanvas, vous devez apprendre quelques définitions relatives à la gestion des couleurs. Par exemple, qu'est-ce que la transparence et qu'est-ce qu'un canal alpha.

...


Point "5.1 Créer un script "Illusion.mq5""

...

Dessinez un cercle peint. Le cercle sera dessiné sur la couleur avec laquelle nous avons rempli le canevas (canvas_XRGB_NOALPHA.Erase(ColorToARGB(colr,alpha)) ;).

canvas_XRGB_NOALPHA.CreateBitmapLabel - Nous avons créé ici une ressource graphique liée à l'objet graphique.

Remplir tout le canevas avec une couleur au format ARGB avec une transparence alpha.

Texte de sortie - type de traitement d'image pour ce canevas. Couleur du texte au format ARGB avec canal alpha égal à 255, c'est-à-dire la couleur du texte de sortie.

Si nous voulons que tout ce qui est dessiné soit affiché à l'écran, nous devons rafraîchir l'écran.

Puisque nous avons créé la ressource graphique avec une liaison à l'objet graphique ( méthode CreateBitmapLabel), nous allons supprimer la ressource à l'aide de la méthode Destroy().

...

 

Bonjour, pouvez-vous me dire comment faire pour que le panneau d'information ne soit pas surchargé par les icônes des offres.

Il semble être au premier plan, tout est dessiné derrière lui, mais les offres sont superposées.

void CreateEdit(long             chart_id,         // identifiant du graphique
                int              sub_window,       // numéro de la fenêtre (sous-fenêtre)
                string           name,             // nom de l'objet
                color            font_color,       // couleur de la police
                int              x_size,           // largeur
                int              y_size,           // hauteur
                int              x_distance,       // Coordonnée de l'axe X
                int              y_distance,       // Coordonnée de l'axe Y
                long             z_order,          // priorité
                color            background_color) // couleur d'arrière-plan 
  {
// Si l'objet a été créé avec succès, alors...
   if(ObjectCreate(chart_id,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
     {
      // ...définir ses propriétés
      ObjectSetInteger(chart_id,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);  // réglage de l'angle du graphique
      ObjectSetInteger(chart_id,name,OBJPROP_COLOR,font_color);         // couleur de la police
      ObjectSetInteger(chart_id,name,OBJPROP_BGCOLOR,background_color); // couleur d'arrière-plan
      ObjectSetInteger(chart_id,name,OBJPROP_XSIZE,x_size);             // largeur
      ObjectSetInteger(chart_id,name,OBJPROP_YSIZE,y_size);             // hauteur
      ObjectSetInteger(chart_id,name,OBJPROP_XDISTANCE,x_distance);     // définir la coordonnée X
      ObjectSetInteger(chart_id,name,OBJPROP_YDISTANCE,y_distance);     // réglage de la coordonnée Y
      ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,false);         // l'objet ne peut être sélectionné si FALSE
      ObjectSetInteger(chart_id,name,OBJPROP_ZORDER,z_order);           // priorité à l'objet
      ObjectSetInteger(chart_id,name,OBJPROP_READONLY,true);            // en lecture seule
      ObjectSetInteger(chart_id,name,OBJPROP_ALIGN,ALIGN_LEFT);         // alignement à gauche
      //--- affichage en avant-plan (false) ou en arrière-plan (true) 
    ObjectSetInteger(chart_id,name,OBJPROP_BACK,false); 
      ObjectSetString(chart_id,name,OBJPROP_TOOLTIP,"\n");              // pas d'info-bulle si "\n".
     }
  }