//+------------------------------------------------------------------+ //| 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(); } |