ResourceSav

Consente di salvare una risorsa nel file specificato.

bool  ResourceSave(
   const string  resource_name      // Nome della risorsa
   const string  file_name          // Nome del File
   );

Parametri

resource_name

[in] Il nome della risorsa, deve iniziare con "::".

file_name

[in] Il nome del file relativo a MQL5\Files.

Valore restituito

true - in caso di successo, altrimenti false. Per le informazioni di errore chiamare GetLastError().

Nota

La funzione sovrascrive sempre un file e crea tutte le directory necessarie intermedie nel nome del file, se necessario.

Esempio:

//-- parametri della risorsa grafica
string ExtResName="Resource";
int    ExtResWidth=100;
int    ExtResHeight=100;
uint   ExtResData[];
int    ExtResSize=ExtResWidth*ExtResHeight;
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
//-- impostare la dimensione dell'array dei pixel
   if(ArrayResize(ExtResData,ExtResSize)!=ExtResSize)
     {
      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(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());
 
//--- 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,ExtResWidth);
   ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,ExtResHeight);
   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,"::"+ExtResName);
   
//-- impostare il colore GreenYellow con la trasparenza di 200
   uint clr=ColorToARGB(clrGreenYellow,200);
//-- riempie l'intero array di pixel della risorsa grafica con il colore impostato
   ArrayInitialize(ExtResData,clr);
//--- disegnare la griglia usando il colore DodgerBlue
   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));
//--- aggiornare i dati delle risorse grafiche
   Update(ExtResName,ExtResData,ExtResWidth,ExtResHeight,true);
   
//--- aspettare 3 secondi prima di eliminare la risorsa e l'oggetto grafico
   Print("Wait 3 seconds before deleting the resource and graphic object");
   Sleep(3000);
 
//--- salvare la risorsa nel file
   ResetLastError();
   if(!ResourceSave("::"+ExtResName,"ResourceSave\\"+ExtResName+".bmp"))
     {
      Print("ResourceSave() failed. Error code: ",GetLastError());
      return;
     }
//--- eliminare la risorsa e l'immagine dell'oggetto grafico
   if(!ResourceFree("::"+ExtResName))
     {
      Print("ResourceFree() failed. Error code: ",GetLastError());
      return;
     }
   if(!ObjectDelete(0,obj_name))
     {
      Print("ObjectDelete() failed. Error code: ",GetLastError());
      return;
     }
 
//--- ora creare l'oggetto "Etichetta grafica" usando le coordinate del prezzo e l'ora dell'ultimo tick spostato a sinistra dalla larghezza dell'immagine
//-- ottenere le coordinate dello schermo utilizzando il prezzo e l'ora dell'ultimo tick ricevuto in precedenza
   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;
     }
//--- impostare il punto di ancoraggio dell'oggetto al suo centro.
   ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- impostare le coordinate del prezzo e l'ora dell'ultimo tick, spostato a sinistra dalla larghezza dell'immagine, per l'oggetto etichetta grafica
   ObjectSetInteger(0,obj_name,OBJPROP_XDISTANCE,x-ExtResWidth);
   ObjectSetInteger(0,obj_name,OBJPROP_YDISTANCE,y);
//--- specificare la risorsa, precedentemente salvata come immagine bmp, per l'oggetto etichetta grafica come file immagine
   ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"\\Files\\ResourceSave\\"+ExtResName+".bmp");
//-- aggiornare il grafico
   ChartRedraw();
   
//--- attender 3 secondi prima di cancellare l'oggetto etichetta grafica
   Print("Wait 3 seconds before deleting the new graphic object");
   Sleep(3000);
   if(!ObjectDelete(0,obj_name))
      Print("ObjectDelete() failed. Error code: ",GetLastError());
  }
//+------------------------------------------------------------------+
//| 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();
  }
//+------------------------------------------------------------------+
//| Tracciare una linea verticale                                    |
//+------------------------------------------------------------------+
void LineVertical(int x,int y1,int y2,const uint clr)
  {
   int tmp;
//-- ordinare per Y
   if(y1>y2)
     {
      tmp=y1;
      y1 =y2;
      y2 =tmp;
     }
//-- linea al di fuori dei bordi dell'immagine
   if(y2<0 || y1>=ExtResHeight || x<0 || x>=ExtResWidth)
      return;
//-- rimanere entro i bordi dell'immagine
   if(y1<0)
      y1=0;
   if(y2>=ExtResHeight)
      y2=ExtResHeight-1;
//-- tracciare la linea
   int index=y1*ExtResWidth+x;
   for(int i=y1i<=y2i++,index+=ExtResWidth)
      ExtResData[index]=clr;
  }
//+------------------------------------------------------------------+
//| Tracciare una linea orizzontale                                  |
//+------------------------------------------------------------------+
void LineHorizontal(int x1,int x2,int y,const uint clr)
  {
   int tmp;
//-- ordinare per X
   if(x1>x2)
     {
      tmp=x1;
      x1 =x2;
      x2 =tmp;
     }
//-- linea al di fuori dei bordi dell'immagine
   if(x2<0 || x1>=ExtResWidth || y<0 || y>=ExtResHeight)
      return;
//-- rimanere entro i bordi dell'immagine
   if(x1<0)
      x1=0;
   if(x2>=ExtResWidth)
      x2=ExtResWidth-1;
//-- tracciare la linea
   ArrayFill(ExtResData,y*ExtResWidth+x1,(x2-x1)+1,clr);
  }

Vedi anche

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