ResourceSave

Speichert die Ressource in eine angegebene Datei.

bool  ResourceSave(
   const string  resource_name      // Ressourcenname
   const string  file_name          // Dateiname
   );

Parameter

resource_name

[in]  Ressourcenname muss mit "::" anfangen.

file_name

[in]  Dateiname relativ zu MQL5\Files.

Rückgabewert

Gibt true beim Erfolgsfall zurück, anderenfalls false. Für Erhaltung des Fehlerkodes muss man die Funktion GetLastError() aufrufen.

Hinweis

Die Funktion überschreibt immer die Datei und erstellt, falls erforderlich, alle dazwischen liegenden Unterverzeichnisse im Dateinamen, falls sie nicht existieren.

Beispiel:

//--- die Parameter der grafische Ressource
string ExtResName="Resource";
int    ExtResWidth=100;
int    ExtResHeight=100;
uint   ExtResData[];
int    ExtResSize=ExtResWidth*ExtResHeight;
 
//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
//--- Festlegen der Größe des Pixelarrays
   if(ArrayResize(ExtResData,ExtResSize)!=ExtResSize)
     {
      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(ExtResData,0x00FFFFFF);
   if(!ResourceCreate(ExtResName,ExtResData,ExtResWidth,ExtResHeight,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE))
     {
      Print("ResourceCreate() failed. Error code: ",GetLastError());
      return;
     }
   Print("Size of created recource array: ",ExtResData.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 Uhrzeit
   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,ExtResWidth);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,ExtResHeight);
   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,"::"+ExtResName);
   
//--- Einstellen der Farbe GreenYellow mit einer Transparenz von 200
   uint clr=ColorToARGB(clrGreenYellow,200);
//--- Füllen des gesamten Pixelarrays der grafischen Ressource mit der eingestellten Farbe
   ArrayInitialize(ExtResData,clr);
//--- das Gitter mit der Farbe DodgerBlue zeichnen
   for(int x=0;x<ExtResWidth;x+=9)
      LineVertical(x,0,ExtResHeight,ColorToARGB(clrDodgerBlue,200));
   for(int y=0;y<ExtResHeight;y+=9)
      LineHorizontal(0,ExtResWidth,y,ColorToARGB(clrDodgerBlue,200));
//--- Aktualisierung der grafischen Ressourcendaten
   Update(ExtResName,ExtResData,ExtResWidth,ExtResHeight,true);
   
//--- 3 Sekunden warten, bevor die Ressource und das grafische Objekt gelöscht wird
   Print("Wait 3 seconds before deleting the resource and graphic object");
   Sleep(3000);
 
//--- Speichern der Ressource in der Datei
   ResetLastError();
   if(!ResourceSave("::"+ExtResName,"ResourceSave\\"+ExtResName+".bmp"))
     {
      Print("ResourceSave() failed. Error code: ",GetLastError());
      return;
     }
//--- die Ressource und das grafische Objektbild löschen
   if(!ResourceFree("::"+ExtResName))
     {
      Print("ResourceFree() failed. Error code: ",GetLastError());
      return;
     }
   if(!ObjectDelete(0,obj_name))
     {
      Print("ObjectDelete() failed. Error code: ",GetLastError());
      return;
     }
 
//--- jetzt wird das Objekt "Graphical label" unter Verwendung der Koordinaten des Preises und der Uhrzeit des letzten Ticks erstellt, die um die Bildbreite nach links verschoben.
//--- Abrufen der Bildschirmkoordinaten unter Verwendung des zuvor erhaltenen Preises und der Zeit des letzten Ticks
   int x=0,y=0;
   if(!ChartTimePriceToXY(0,0,tick.time,tick.bid,x,y))
     {
      Print("ChartTimePriceToXY() failed. Error code: ",GetLastError());
      return;
     }
   obj_name="BitmapLabel";
   if(!ObjectCreate(0,obj_name,OBJ_BITMAP_LABEL,0,0,0))
     {
      Print("ObjectCreate() failed. Error code: ",GetLastError());
      return;
     }
//--- Setzen des Ankerpunkts des Objekts auf seine Mitte.
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- bestimmen der Koordinaten des grafischen Label-Objekt des Preises und der Zeit des letzten Ticks, um die Bildbreite nach links verschoben
   ObjectSetInteger(0,obj_name,OBJPROP_XDISTANCE,x-ExtResWidth);
   ObjectSetInteger(0,obj_name,OBJPROP_YDISTANCE,y);
//--- die Ressource, die zuvor als bmp-Bild gespeichert wurde, für das grafische Etikettenobjekt als Bilddatei angeben
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"\\Files\\ResourceSave\\"+ExtResName+".bmp");
//--- den Chart aktualisieren
   ChartRedraw();
   
//--- 3 Sekunden warten, bevor das grafische Label-Objekt gelöscht wird
   Print("Wait 3 seconds before deleting the new graphic object");
   Sleep(3000);
   if(!ObjectDelete(0,obj_name))
      Print("ObjectDelete() failed. Error code: ",GetLastError());
  }
//+------------------------------------------------------------------+
//| 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();
  }
//+------------------------------------------------------------------+
//| Eine Vertikale ziehen                                            |
//+------------------------------------------------------------------+
void LineVertical(int x,int y1,int y2,const uint clr)
  {
   int tmp;
//--- nach Y sortieren
   if(y1>y2)
     {
      tmp=y1;
      y1 =y2;
      y2 =tmp;
     }
//--- Linie außerhalb der Bildgrenzen
   if(y2<0 || y1>=ExtResHeight || x<0 || x>=ExtResWidth)
      return;
//--- innerhalb der Bildgrenzen bleiben
   if(y1<0)
      y1=0;
   if(y2>=ExtResHeight)
      y2=ExtResHeight-1;
//--- zeichnen der Linie
   int index=y1*ExtResWidth+x;
   for(int i=y1i<=y2i++,index+=ExtResWidth)
      ExtResData[index]=clr;
  }
//+------------------------------------------------------------------+
//| Eine Horizontale ziehen                                          |
//+------------------------------------------------------------------+
void LineHorizontal(int x1,int x2,int y,const uint clr)
  {
   int tmp;
//--- nach X sortieren
   if(x1>x2)
     {
      tmp=x1;
      x1 =x2;
      x2 =tmp;
     }
//--- Linie außerhalb der Bildgrenzen
   if(x2<0 || x1>=ExtResWidth || y<0 || y>=ExtResHeight)
      return;
//--- innerhalb der Bildgrenzen bleiben
   if(x1<0)
      x1=0;
   if(x2>=ExtResWidth)
      x2=ExtResWidth-1;
//--- zeichnen der Linie
   ArrayFill(ExtResData,y*ExtResWidth+x1,(x2-x1)+1,clr);
  }

Siehe auch

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