ResourceFree

Elimina el recurso creado dinámicamente (libera la memoria ocupada por el recurso)

bool  ResourceFree(
   const string  resource_name      // nombre del recurso
   );

Parámetros

resource_name

[in]  El nombre del recurso debe empezarse con "::".

Valor devuelto

Devuelve true en caso de éxito, de lo contrario devuelve false. Para obtener la información sobre el error, hay que llamar a la función GetLastError().

Nota

La función ResourceFree() permite al desarrollador del programa mql5 administrar el consumo de la memoria en caso de trabajar con los recursos de forma activa. Los objetos gráficos vinculados al recurso que se elimina de la memoria van a mostrarse correctamente incluso después de su eliminación. Pero los objetos gráficos creados nuevamente (OBJ_BITMAP y OBJ_BITMAP_LABEL) ya no podrán utilizar el recurso eliminado.

La función elimina sólo los recursos dinámicos creados por este programa.

Ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos los parámetros del recurso gráfico
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//--- establecemos el tamaño del array en píxeles
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- rellenamos la matriz de píxeles con un color transparente y creamos un recurso gráfico basado en él
   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());
 
//--- comprobamos el recurso gráfico creado.
//--- obtenemos los datos de hora y precio de la siguiente barra
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- creamos un objeto "Dibujo" en las coordenadas del precio y la hora del último tick
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- establecemos una anchura y una altura del objeto de dibujo creado igual a la anchura y la altura del recurso gráfico.
//--- establecemos el punto de anclaje del objeto en su centro.
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- establecemos un recurso gráfico creado previamente como archivo de imagen para el objeto de dibujo
//--- en este caso, para especificar el nombre del recurso gráfico que se va a utilizar, debemos añadir antes de su nombre "::"
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- establecemos el color DodgerBlue con una transparencia 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- rellenamos todo el array de píxeles del recurso gráfico con el color establecido
   ArrayInitialize(rc_data,clr);
//--- actualizamos los datos del recurso gráfico
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- esperamos tres segundos y cambiamos el color de la imagen
   Print("Wait 3 seconds before changing color");
   Sleep(3000);
//--- establecemos el color OrangeRed con una transparencia
   Print("Change color");
   clr=ColorToARGB(clrOrangeRed,200);
//--- rellenamos todo el array de píxeles del recurso gráfico con el color establecido
   ArrayInitialize(rc_data,clr);
//--- actualizamos los datos del recurso gráfico
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- esperamos tres segundos y liberamos el recurso gráfico
   Print("Wait 3 seconds before ResourceFree()");
   Sleep(3000);
   bool res=ResourceFree("::"+rc_name);
   Print("ResourceFree: ",res);
 
//--- intentamos cambiar el color después de liberar el recurso
   Print("Trying to change color to GreenYellow after ResourceFree()");
//--- establecemos el color GreenYellow con una transparencia 200
   clr=ColorToARGB(clrGreenYellow,200);
//--- rellenamos todo el array de píxeles del recurso gráfico con el color establecido
   ArrayInitialize(rc_data,clr);
//--- actualizamos los datos del recurso gráfico (el dibujo se mantiene, pero no se puede cambiar el color)
   Update(rc_name,rc_data,rc_width,rc_height,true);
   Print("The color has not changed because the resource has been released");
   
//--- esperamos tres segundos y eliminamos el objeto de dibujo
   Print("Wait 3 seconds before deleting the Bitmap object");
   Sleep(3000);
   Print("Delete Bitmap object");
   ObjectDelete(0,obj_name);
  }
//+------------------------------------------------------------------+
//| Actualiza los datos del recurso gráfico                          |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- si se ha transmitido un tamaño cero, salimos
   if(width==0 || height==0)
      return;
//--- actualizamos los datos de los recursos y redibujamos el gráfico
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Véase también

Recursos, ObjectCreate(), PlaySound(), ObjectSetString(), OBJPROP_BMPFILE