OBJ_BITMAP

Objet Bitmap.

ObjBitmap

Note

Pour l'objet Bitmap, vous pouvez sélectionner la zone visible d'une image.

Exemple

Le script suivant crée plusieurs bitmaps sur le graphique. Des fonctions spéciales ont été développées pour créer et modifier les propriétés de l'objet graphique. Vous pouvez utiliser ces fonctions "telles quelles" dans vos propres applications.

 

//--- description
#property description "Le script crée un bitmap dans la fenêtre du graphique."
//--- affichage de la fenêtre des paramètres d'entrée lors du lancement du script
#property script_show_inputs
//--- paramètres d'entrée du script
input string          InpFile="\\Images\\dollar.bmp"// Nom du fichier Bitmap
input int             InpWidth=24;                    // Coordonnée X de la zone visible
input int             InpHeight=24;                   // Coordonnée Y de la zone visible
input int             InpXOffset=4;                   // Décalage de la zone visible sur l'axe X
input int             InpYOffset=4;                   // Décalage de la zone visible sur l'axe Y
input color           InpColor=clrRed;                // Couleur de la bordure au moment de la surbrillance
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID;           // Style de ligne au moment de la surbrillance
input int             InpPointWidth=1;                // Taille du point à déplacer
input bool            InpBack=false;                  // Objet en arrière-plan
input bool            InpSelection=false;             // Mise en surbrillance pour déplacer
input bool            InpHidden=true;                 // Cahcé dans la liste des objets
input long            InpZOrder=0;                    // Priorité du clic de souris
//+----------------------------------------------------------------------------------------------------+
//| Crée une bitmap dans la fenêtre du graphique                                                       |
//+----------------------------------------------------------------------------------------------------+
bool BitmapCreate(const long            chart_ID=0,        // identifiant du graphique
                  const string          name="Bitmap",     // nom du bitmap
                  const int             sub_window=0,      // indice de sous-fenêtre
                  datetime              time=0,            // heure du point d'ancrage
                  double                price=0,           // prix du point d'ancrage
                  const string          file="",           // nom du fichier bitmap
                  const int             width=10,          // Coordonnée X de la zone visible
                  const int             height=10,         // Coordonnée Y de la zone visible
                  const int             x_offset=0,        // Décalage de la zone visible sur l'axe X
                  const int             y_offset=0,        // Décalage de la zone visible sur l'axe Y
                  const color           clr=clrRed,        // couleur de la bordure en surbrillance
                  const ENUM_LINE_STYLE style=STYLE_SOLID// style de trait en surbrillance
                  const int             point_width=1,     // taille du point de déplacement
                  const bool            back=false,        // en arrière-plan
                  const bool            selection=false,   // mise en surbrillance pour déplacer
                  const bool            hidden=true,       // caché dans la liste des objets
                  const long            z_order=0)         // priorité du clic de souris
  {
//--- Définit les coordonnées du point d'ancrage si elles ne sont pas définies
   ChangeBitmapEmptyPoint(time,price);
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- crée une bitmap
   if(!ObjectCreate(chart_ID,name,OBJ_BITMAP,sub_window,time,price))
     {
      Print(__FUNCTION__,
            " : n'a pas réussi à créer une bitmap dans la fenêtre du graphique ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- définit le chemin d'accès au fichier image
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
     {
      Print(__FUNCTION__,
            " : impossible de charger l'image ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- définit la zone visible de l'omage ; si la largeur et la hauteur
//--- excèdent la largeur et la hauteur (respectivement) d'une image source,
//--- elle n'est pas dessinée ; dans le cas opposé,
//--- seule la partie correspondant à ces valeurs sera dessinée
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- définit la partie d'une image à afficher dans la zone visible
//--- la partie par défaut est la partie supérieure gauche de l'image ; les valeurs permettent
//--- d'effectuer un décalage de cette zone pour afficher une autre partie de l'image
   ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
   ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
//--- définit la couleur de la bordure lorsque le mode de mise en surbrillance de l'objet est activé
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- définit le style de ligne de la bordure lorsque le mode de mise en surbrillance de l'objet est activé
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- définit la taille du point d'ancrage pour déplacer un objet
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- affiche en premier plan (false) ou en arrière-plan (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- active (true) ou désactive (false) le mode de déplacement de l'étiquette par la souris
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- masque (true) ou affiche (false) le nom de l'objet graphique dans la liste des objets
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- définit la priorité pour recevoir l'événement d'un clic de souris dans le graphique
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Définit une nouvelle image pour le bitmap                                                          |
//+----------------------------------------------------------------------------------------------------+
bool BitmapSetImage(const long   chart_ID=0,    // identifiant du graphique
                    const string name="Bitmap"// nom du bitmap
                    const string file="")       // chemin vers le fichier
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- définit le chemin d'accès au fichier image
   if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,file))
     {
      Print(__FUNCTION__,
            " : impossible de charger l'image ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Déplace une image bitmap dans la fenêtre du graphique                                              |
//+----------------------------------------------------------------------------------------------------+
bool BitmapMove(const long   chart_ID=0,    // identifiant du graphique
                const string name="Bitmap"// nom du bitmap
                datetime     time=0,        // heure du point d'ancrage
                double       price=0)       // prix du point d'ancrage
  {
//--- si la position du point n'est pas définie, le déplace vers la barre courante du prix Bid
   if(!time)
      time=TimeCurrent();
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- déplace le point d'ancrage
   if(!ObjectMove(chart_ID,name,0,time,price))
     {
      Print(__FUNCTION__,
            " : impossible de déplacer le point d'ancrage ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Change la taille de la zone visible (bitmap)                                                       |
//+----------------------------------------------------------------------------------------------------+
bool BitmapChangeSize(const long   chart_ID=0,    // identifiant du graphique
                      const string name="Bitmap"// nom du bitmap
                      const int    width=0,       // largeur du bitmap
                      const int    height=0)      // hauteur du bitmap
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- change la taille du bitmap
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
     {
      Print(__FUNCTION__,
            " : impossible de modifier la largeur du bitmap ! Code d'erreur = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
     {
      Print(__FUNCTION__,
            ": n'a pas réussi à modifier la hauteur du bitmap ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+--------------------------------------------------------------------------------+
//| Change les coordonnées du coin supérieur gauche de la zone visible             |
//+--------------------------------------------------------------------------------+
bool BitmapMoveVisibleArea(const long   chart_ID=0,    // identifiant du graphique
                           const string name="Bitmap"// nom du bitmap
                           const int    x_offset=0,    // Coordonnée X de la zone visible
                           const int    y_offset=0)    // Coordonnée Y de la zone visible
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- change les coordonnées de la zone visible de l'image
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
     {
      Print(__FUNCTION__,
            " : échec du changement de la coordonnée X de la zone visible ! Code d'erreur = ",GetLastError());
      return(false);
     }
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
     {
      Print(__FUNCTION__,
            " : échec du changement de la coordonnée Y de la zone visible ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Supprime un bitmap                                                                                 |
//+----------------------------------------------------------------------------------------------------+
bool BitmapDelete(const long   chart_ID=0,    // identifiant du graphique
                  const string name="Bitmap"// nom du bitmap
  {
//--- réinitialise la valeur d'erreur
   ResetLastError();
//--- supprime l'étiquette
   if(!ObjectDelete(chart_ID,name))
     {
      Print(__FUNCTION__,
            " : n'a pas réussi à supprimer le bitmap ! Code d'erreur = ",GetLastError());
      return(false);
     }
//--- exécution réussie
   return(true);
  }
//+----------------------------------------------------------------------------------------------------+
//| Vérifie les valeurs du point d'ancrage et définit les valeurs par défaut                           |
//| pour les points vides                                                                              |
//+----------------------------------------------------------------------------------------------------+
void ChangeBitmapEmptyPoint(datetime &time,double &price)
  {
//--- si l'heure du point n'est pas définie, elle sera sur la barre courante
   if(!time)
      time=TimeCurrent();
//--- si le prix du point n'est pas défini, il aura la valeur Bid
   if(!price)
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
  }
//+----------------------------------------------------------------------------------------------------+
//| Fonction de démarrage du script                                                                    |
//+----------------------------------------------------------------------------------------------------+
void OnStart()
  {
   datetime date[];  // tableau pour stocker les dates des barres visibles
   double   close[]; // tableau pour le stockage des prix de Clôture
//--- nom du fichier bitmap
   string   file="\\Images\\dollar.bmp";
//--- nombre de barres visibles dans la fenêtre du graphique
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- allocation mémoire
   ArrayResize(date,bars);
   ArrayResize(close,bars);
//--- remplit le tableau de dates
   ResetLastError();
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1)
     {
      Print("N'a pas réussi à copier les valeurs de l'heure ! Code d'erreur = ",GetLastError());
      return;
     }
//--- remplit le tableau des prix de Clôture
   if(CopyClose(Symbol(),Period(),0,bars,close)==-1)
     {
      Print("Impossible de copier les valeurs des prix de Clôture ! Code d'erreur = ",GetLastError());
      return;
     }
//--- définit à quelle fréquence les images doivent être affichées
   int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- définit le pas
   int step=1;
   switch(scale)
     {
      case 0:
         step=27;
         break;
      case 1:
         step=14;
         break;
      case 2:
         step=7;
         break;
      case 3:
         step=4;
         break;
      case 4:
         step=2;
         break;
     }
//--- crée les bitmaps pour les valeurs High et Low des barres (avec les gaps)
   for(int i=0;i<bars;i+=step)
     {
      //--- crée les bitmaps
      if(!BitmapCreate(0,"Bitmap_"+(string)i,0,date[i],close[i],InpFile,InpWidth,InpHeight,InpXOffset,
         InpYOffset,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
        {
         return;
        }
      //--- vérifie si l'exécution du script a été stoppée
      if(IsStopped())
         return;
      //--- redessine le graphique
      ChartRedraw();
      // délai de 0,05 secondes
      Sleep(50);
     }
//--- délai d'une demie seconde
   Sleep(500);
//--- supprime les signaux de Vente
   for(int i=0;i<bars;i+=step)
     {
      if(!BitmapDelete(0,"Bitmap_"+(string)i))
         return;
      if(!BitmapDelete(0,"Bitmap_"+(string)i))
         return;
      //--- redessine le graphique
      ChartRedraw();
      // délai de 0,05 secondes
      Sleep(50);
     }
//---
  }