//+------------------------------------------------------------------+
//| 脚本程序起始函数 |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 声明图形资源的参数
string rc_name="Resource";
uint rc_width=100;
uint rc_height=100;
uint rc_data[];
uint rc_size=rc_width*rc_height;
ResetLastError();
//--- 设置像素数组的大小
if(ArrayResize(rc_data,rc_size)!=rc_size)
{
Print("ArrayResize() failed. Error code: ",GetLastError());
return;
}
//--- 用透明颜色填充像素数组,并在此基础上创建图形资源
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());
//--- 查看已创建的图形资源。
//--- 获取当前柱形图的时间和价格数据
MqlTick tick={};
if(!SymbolInfoTick(Symbol(),tick))
{
Print("SymbolInfoTick() failed. Error code: ",GetLastError());
return;
}
//--- 使用最后报价和时间的坐标创建位图对象
string obj_name="Bitmap";
if(!ObjectCreate(0,obj_name,OBJ_BITMAP,0,tick.time,tick.bid))
{
Print("ObjectCreate() failed. Error code: ",GetLastError());
return;
}
//--- 将创建的位图对象的宽度和高度设置为图形资源的宽度和高度。
//--- 将对象定位点设置为其中心。
ObjectSetInteger(0,obj_name,OBJPROP_XSIZE,rc_width);
ObjectSetInteger(0,obj_name,OBJPROP_YSIZE,rc_height);
ObjectSetInteger(0,obj_name,OBJPROP_ANCHOR,ANCHOR_CENTER);
//--- 将前面为位图对象创建的图形资源指定为图像文件
//--- 在这种情况下,为了指示所使用的图形资源的名称,我们需要在其名称之前添加“::”
ObjectSetString(0,obj_name,OBJPROP_BMPFILE,"::"+rc_name);
//--- 设置DodgerBlue的透明度为200
uint clr=ColorToARGB(clrDodgerBlue,200);
//--- 用设置的颜色填充图形资源的整个像素数组
ArrayInitialize(rc_data,clr);
//--- 更新图形资源数据
Update(rc_name,rc_data,rc_width,rc_height,true);
//--- 等待3秒,改变图像颜色
Print("Wait 3 seconds before changing color");
Sleep(3000);
//--- 设置OrangeRed的透明度为200
Print("Change color");
clr=ColorToARGB(clrOrangeRed,200);
//--- 用设置的颜色填充图形资源的整个像素数组
ArrayInitialize(rc_data,clr);
//--- 更新图形资源数据
Update(rc_name,rc_data,rc_width,rc_height,true);
//--- 等待3秒,释放图形资源
Print("Wait 3 seconds before ResourceFree()");
Sleep(3000);
bool res=ResourceFree("::"+rc_name);
Print("ResourceFree: ",res);
//--- 在释放资源后尝试改变颜色
Print("Trying to change color to GreenYellow after ResourceFree()");
//--- 设置GreenYellow的透明度为200
clr=ColorToARGB(clrGreenYellow,200);
//--- 用设置的颜色填充图形资源的整个像素数组
ArrayInitialize(rc_data,clr);
//--- 更新图形资源数据(图像保留,但不能更改颜色)
Update(rc_name,rc_data,rc_width,rc_height,true);
Print("The color has not changed because the resource has been released");
//--- 等待3秒,删除位图对象
Print("Wait 3 seconds before deleting the Bitmap object");
Sleep(3000);
Print("Delete Bitmap object");
ObjectDelete(0,obj_name);
}
//+------------------------------------------------------------------+
//| 更新图形资源数据 |
//+------------------------------------------------------------------+
void Update(const string res_name,const uint &pixel_data[],const uint width,const uint height,const bool redraw)
{
//--- 如果传递的维度为零,则离开
if(width==0 || height==0)
return;
//--- 更新资源数据并重新绘制图表
if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
ChartRedraw();
}
|