ResourceFree

A função exclui dinamicamente recursos criados (liberando a memória alocada para ele).

bool  ResourceFree(
   const string  resource_name      // nome do recurso
   );

Parâmetros

resource_name

[in]  Nome do recurso deve começar com "::".

Valor de retorno

true se bem sucedido, caso contrário false. Para obter informações sobre o erro, chamar a função GetLastError().

Observação

ResourceFree() permite aos desenvolvedores de aplicativos MQL5 gerenciarem o consumo de memória quando se trabalha ativamente com recursos. Objetos gráficos vinculados ao recurso que será apagado da memória serão exibidos corretamente após a sua exclusão. No entanto, os objetos gráficos recém-criados ((OBJ_BITMAP e OBJ_BITMAP_LABEL) não poderão utilizar o recurso suprimido.

A função deleta apenas recursos dinâmicos criados pelo programa.

Exemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos os parâmetros do 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();
//--- definimos o tamanho do array de pixels
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- preenchemos o array de pixels com cor transparente e com base nele criamos um recurso gráfico
   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());
 
//--- verificamos o recurso gráfico criado
//--- obtemos os dados de tempo e preço da barra atual
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- criamos um objeto "Desenho" nas coordenadas de preço e tempo do ú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;
     }
//--- definimos para o objeto-desenho a largura e a altura iguais às do recurso gráfico.
//--- definimos o ponto de ancoragem do objeto pelo seu 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);
//--- especificamos para o objeto-desenho o arquivo de imagem do recurso gráfico criado anteriormente
//--- neste caso, para indicar o nome do recurso gráfico usado, deve-se escrever "::" antes de seu nome
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- definimos a cor DodgerBlue com transparência de 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- preenchemos com a cor definida todo o array de pixels do recurso gráfico
   ArrayInitialize(rc_data,clr);
//--- atualizamos os dados do recurso gráfico
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- esperamos três segundos e mudamos a cor da imagem
   Print("Wait 3 seconds before changing color");
   Sleep(3000);
//--- definimos a cor OrangeRed com transparência de 200
   Print("Change color");
   clr=ColorToARGB(clrOrangeRed,200);
//--- preenchemos com a cor definida todo o array de pixels do recurso gráfico
   ArrayInitialize(rc_data,clr);
//--- atualizamos os dados do recurso gráfico
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- esperamos três segundos e liberamos o recurso gráfico
   Print("Wait 3 seconds before ResourceFree()");
   Sleep(3000);
   bool res=ResourceFree("::"+rc_name);
   Print("ResourceFree: ",res);
 
//--- tentamos mudar a cor após a liberação do recurso
   Print("Trying to change color to GreenYellow after ResourceFree()");
//--- definimos a cor GreenYellow com transparência de 200
   clr=ColorToARGB(clrGreenYellow,200);
//--- preenchemos com a cor definida todo o array de pixels do recurso gráfico
   ArrayInitialize(rc_data,clr);
//--- atualizamos os dados do recurso gráfico (o desenho permanece, mas a cor não pode mais ser alterada)
   Update(rc_name,rc_data,rc_width,rc_height,true);
   Print("The color has not changed because the resource has been released");
   
//--- esperamos três segundos e deletamos o objeto-desenho
   Print("Wait 3 seconds before deleting the Bitmap object");
   Sleep(3000);
   Print("Delete Bitmap object");
   ObjectDelete(0,obj_name);
  }
//+------------------------------------------------------------------+
//| Atualizamos os dados do recurso gráfico                          |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- se forem passados tamanhos nulos, saímos
   if(width==0 || height==0)
      return;
//--- atualizamos os dados do recurso e redesenhamos o gráfico
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Também Veja

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