ResourceFree

La funzione elimina le risorse create dinamicamente (liberando la memoria allocata per essa).

bool  ResourceFree(
   const string  resource_name      // nome della risorsa
   );

Parametri

resource_name

[in] Resource il nome deve iniziare con "::".

Valore restituito

True se avviene con successo, altrimenti false. Per ottenere informazioni sull'errore, chiamare la funzione GetLastError().

Nota

ResourceFree() consente agli sviluppatori di applicazioni mql5 di gestire il consumo di memoria quando si lavora attivamente con le risorse. Oggetti grafici legati alla risorsa sono eliminati dalla memoria vengono visualizzati correttamente dopo la sua eliminazione. Tuttavia, oggetti grafici di nuova costruzione (OBJ_BITMAP e OBJ_BITMAP_LABEL) non saranno in grado di utilizzare la risorsa eliminata.

La funzione cancella solo le risorse dinamiche create dal programma.

Esempio:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- dichiarare i parametri della risorsa grafica
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//-- impostare la dimensione dell'array dei pixel
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- riempire l'array di pixel con un colore trasparente e creare una risorsa grafica basata su di esso
   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());
 
//--- controlla la risorsa grafica creata.
//-- ottenere i dati di tempo e prezzo della barra corrente
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- creare l'oggetto Bitmap utilizzando le coordinate del prezzo e del tempo dell'ultimo tick
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- impostare la larghezza e l'altezza dell'oggetto bitmap creato uguale alla larghezza e all'altezza della risorsa grafica.
//--- impostare il punto di ancoraggio dell'oggetto al suo 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);
//--- specificare la risorsa grafica precedentemente creata per l'oggetto bitmap come file immagine
//--- in questo caso, per indicare il nome della risorsa grafica usata, dobbiamo aggiungere "::" prima del suo nome
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//-- impostare il colore DodgerBlue con la trasparenza di 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//-- riempie l'intero array di pixel della risorsa grafica con il colore impostato
   ArrayInitialize(rc_data,clr);
//--- aggiornare i dati delle risorse grafiche
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- aspettare tre secondi e cambiare il colore dell'immagine
   Print("Wait 3 seconds before changing color");
   Sleep(3000);
//-- impostare il colore OrangeRed con la trasparenza di 200
   Print("Change color");
   clr=ColorToARGB(clrOrangeRed,200);
//-- riempie l'intero array di pixel della risorsa grafica con il colore impostato
   ArrayInitialize(rc_data,clr);
//--- aggiornare i dati delle risorse grafiche
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- attendere tre secondi e rilasciare la risorsa grafica
   Print("Wait 3 seconds before ResourceFree()");
   Sleep(3000);
   bool res=ResourceFree("::"+rc_name);
   Print("ResourceFree: ",res);
 
//--- provare a cambiare il colore dopo aver rilasciato la risorsa
   Print("Trying to change color to GreenYellow after ResourceFree()");
//-- impostare il colore GreenYellow con la trasparenza di 200
   clr=ColorToARGB(clrGreenYellow,200);
//-- riempie l'intero array di pixel della risorsa grafica con il colore impostato
   ArrayInitialize(rc_data,clr);
//--- aggiornare i dati della risorsa grafica (l'immagine rimane, ma il colore non può essere modificato)
   Update(rc_name,rc_data,rc_width,rc_height,true);
   Print("The color has not changed because the resource has been released");
   
//--- aspettare tre secondi ed eliminare l'oggetto bitmap
   Print("Wait 3 seconds before deleting the Bitmap object");
   Sleep(3000);
   Print("Delete Bitmap object");
   ObjectDelete(0,obj_name);
  }
//+------------------------------------------------------------------+
//| Aggiornamento dei dati delle risorse grafiche                    |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//-- uscire se vengono passate dimensioni zero
   if(width==0 || height==0)
      return;
//-- aggiornare i dati delle risorse e ridisegnare il grafico
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Vedi anche

Risorse, ObjectCreate(), PlaySound(), ObjectSetString(), OBJPROP_BMPFILE