ResourceFree

Löscht dynamisch erstellte Ressource (gibt den von der Ressource belegten Speicher frei).

bool  ResourceFree(
   const string  resource_name      // Ressource-Name
   );

Optionen

resource_name

[in]  Name der Ressource, muss beginnen mit "::".

Rückgabewert

true – wenn erfolgreich, andernfalls false. Um Informationen über den Fehler zu erhalten, rufen Sie GetLastError() an.

Hinweis

Funktion ResourceFree() erlaubt es dem Entwickler von MQL5-Programm Speicherbedarf beim Arbeiten mit Ressourcen zu kontrollieren. Grafische Objekte, die an aus dem Speicher gelöschten Ressource gebunden sind, werden richtig nach ihrer Löschung angezeigt werden. Aber die neu erstellten graphischen Objekte (OBJ_BITMAP und OBJ_BITMAP_LABEL) können nicht die gelöschte Ressource nutzen.

Die Funktion löscht nur die dynamischen Ressourcen, die durch das Programm erstellt werden.

Beispiel:

//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Deklaration der Parameter der grafischen Ressource
   string rc_name="Resource";
   uint   rc_width=100;
   uint   rc_height=100;
   uint   rc_data[];
   uint   rc_size=rc_width*rc_height;
 
   ResetLastError();
//--- Festlegen der Größe des Pixelarrays
   if(ArrayResize(rc_data,rc_size)!=rc_size)
     {
      Print("ArrayResize() failed. Error code: ",GetLastError());
      return;
     }
//--- Füllen des Pixelarrays mit einer transparenten Farbe und Erstellen einer grafischen Ressource auf der Grundlage dieser Farbe
   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());
 
//--- Überprüfung der erstellten grafischen Ressource.
//--- Ermitteln der Zeit- und Preisdaten des aktuellen Balkens
   MqlTick tick={};
   if(!SymbolInfoTick(Symbol(),tick))
     {
      Print("SymbolInfoTick() failed. Error code: ",GetLastError());
      return;
     }
//--- Erstellen des Bitmap-Objekts unter Verwendung der Koordinaten des letzten Tickpreises und der Zeit
   string obj_name="Bitmap";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- die Breite und Höhe des erstellten Bitmap-Objekts auf die Breite und Höhe der grafischen Ressource einstellen.
//--- Setzen des Ankerpunkts des Objekts auf seine Mitte.
   ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- Angabe der zuvor erstellten grafischen Ressource für das Bitmap-Objekt als Bilddatei
//--- in diesem Fall müssen wir, um den Namen der verwendeten grafischen Ressource anzugeben, "::" vor ihrem Namen hinzufügen
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
   
//--- Einstellen der Farbe DodgerBlue mit einer Transparenz von 200
   uint clr=ColorToARGB(clrDodgerBlue,200);
//--- Füllen des gesamten Pixelarrays der grafischen Ressource mit der eingestellten Farbe
   ArrayInitialize(rc_data,clr);
//--- Aktualisierung der grafischen Ressourcendaten
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- drei Sekunden warten und dann die Bildfarbe ändern
   Print("Wait 3 seconds before changing color");
   Sleep(3000);
//--- Einstellen der Farbe OrangeRed mit einer Transparenz von 200
   Print("Change color");
   clr=ColorToARGB(clrOrangeRed,200);
//--- Füllen des gesamten Pixelarrays der grafischen Ressource mit der eingestellten Farbe
   ArrayInitialize(rc_data,clr);
//--- Aktualisierung der grafischen Ressourcendaten
   Update(rc_name,rc_data,rc_width,rc_height,true);
   
//--- drei Sekunden warten und dann grafische Ressource freigeben
   Print("Wait 3 seconds before ResourceFree()");
   Sleep(3000);
   bool res=ResourceFree("::"+rc_name);
   Print("ResourceFree: ",res);
 
//--- Versuch, die Farbe nach Freigabe der Ressource zu ändern
   Print("Trying to change color to GreenYellow after ResourceFree()");
//--- Einstellen der Farbe GreenYellow mit einer Transparenz von 200
   clr=ColorToARGB(clrGreenYellow,200);
//--- Füllen des gesamten Pixelarrays der grafischen Ressource mit der eingestellten Farbe
   ArrayInitialize(rc_data,clr);
//--- Aktualisierung der grafischen Ressourcendaten (das Bild bleibt erhalten, aber die Farbe kann nicht geändert werden)
   Update(rc_name,rc_data,rc_width,rc_height,true);
   Print("The color has not changed because the resource has been released");
   
//--- drei Sekunden warten und dann das Bitmap-Objekt löschen
   Print("Wait 3 seconds before deleting the Bitmap object");
   Sleep(3000);
   Print("Delete Bitmap object");
   ObjectDelete(0,obj_name);
  }
//+------------------------------------------------------------------+
//| Grafische Ressourcendaten aktualisieren                          |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
  {
//--- Verlassen, wenn Dimensionen von 0 übergeben wurden
   if(width==0 || height==0)
      return;
//--- Ressourcendaten aktualisieren und den Chart neu zeichnen
   if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
      ChartRedraw();
  }

Siehe auch

Ressourcen, ObjectCreate(), PlaySound(), ObjectSetString(), OBJPROP_BMPFILE