ResourceFree

Supprime la ressource dynamiquement créée(libère la mémoire occupée par la ressource).

bool  ResourceFree(
   const string  resource_name      // le nom de la ressource
   );

Paramètres

resource_name

[in]  Le nom de la ressource, doit commencer par "::".

Valeur de Retour

true — en cas de succès, false sinon. Pour en savoir plus sur l'erreur, il faut appeler la fonction GetLastError().

Note

La fonction ResourceFree () permet au développeur du programme mql5 de maîtriser la consommation de la mémoire en travaillant avec les ressources. Les objets graphiques, attachés à la ressource supprimée de la mémoire, s'afficheront correctement aussi après son suppression. Mais les nouveaux objets graphiques (OBJ_BITMAP et OBJ_BITMAP_LABEL) ne pourront pas utiliser la ressource supprimée.

La fonction supprime seulement les ressources dynamiques créées par ce programme.

Exemple :

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- déclare les paramètres de la ressource graphique
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//--- définit la taille du tableau de pixels
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- remplit le tableau de pixels avec une couleur transparente et crée une ressource graphique basée sur celle-ci
   ArrayInitialize(rc_data,0x00FFFFFF);
   if(!ResourceCreate(rc_name,rc_data,rc_width,rc_height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("ResourceCreate() failed. Error code: ",GetLastError());
      return;
     }
   Print("Size of created recource array: ",rc_data.Size());
 
//--- vérifie la ressource graphique créée.
//--- récupère l'heure et le prix de la barre actuelle
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- crée l'objet Bitmap en utilisant les coordonnées du dernier prix et de l'heure du tick
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- définit la largeur et la hauteur de l'objet bitmap créé égales à la largeur et à la hauteur de la ressource graphique.
//--- définit le point d'ancrage de l'objet en son centre.
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- spécifie la ressource graphique créée précédemment pour l'objet bitmap en tant que fichier image
//--- dans ce cas, afin d'indiquer le nom de la ressource graphique utilisée, il faut ajouter "::" avant son nom
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- définit la couleur DodgerBlue avec une transparence de 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- remplit tout le tableau de pixels de la ressource graphique avec la couleur définie
   ArrayInitialize(rc_data,clr);
//--- met à jour les données de la ressource graphique
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- attente de 3 secondes et changement de la couleur de l'image
   Print("Wait 3 seconds before changing color");
   Sleep(3000);
//--- définit la couleur OrangeRed avec une transparence de 200
   Print("Change color");
   clr=ColorToARGB(clrOrangeRed,200);
//--- remplit tout le tableau de pixels de la ressource graphique avec la couleur définie
   ArrayInitialize(rc_data,clr);
//--- met à jour les données de la ressource graphique
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- attente de 3 secondes et libération de la ressource graphique
   Print("Wait 3 seconds before ResourceFree()");
   Sleep(3000);
   bool res=ResourceFree("::"+rc_name);
   Print("ResourceFree: ",res);
 
//--- essaye de changer la couleur après avoir libéré la ressource
   Print("Trying to change color to GreenYellow after ResourceFree()");
//--- définit la couleur GreenYellow avec une transparence de 200
   clr=ColorToARGB(clrGreenYellow,200);
//--- remplit tout le tableau de pixels de la ressource graphique avec la couleur définie
   ArrayInitialize(rc_data,clr);
//--- met à jour les données de la ressource graphique (l'image reste, mais la couleur ne peut pas être modifiée)
   Update(rc_name,rc_data,rc_width,rc_height,true);
   Print("The color has not changed because the resource has been released");
   
//--- attente de 3secondes et suppression de l'objet bitmap
   Print("Wait 3 seconds before deleting the Bitmap object");
   Sleep(3000);
   Print("Delete Bitmap object");
   ObjectDelete(0,obj_name);
  }
//+------------------------------------------------------------------+
//| Met à jour les données des ressources graphiques                 |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- laisser si aucune dimension n'est passée
   if(width==0 || height==0)
      return;
//--- met à jour les données des ressources et redessine le graphique
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Voir aussi

Ressources, ObjectCreate(), PlaySound(), ObjectSetString(), OBJPROP_BMPFILE