//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
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;
}
//--- 마지막 틱 가격과 시간의 좌표를 사용하여 Bitmap 객체를 생성합니다.
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);
//--- 투명도 200으로 DodgerBlue 색상을 설정합니다.
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);
//--- 투명도 200으로 OrangeRed 색상을 설정합니다.
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()");
//--- 투명도 200으로 GreenYellow 색상을 설정합니다.
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)
{
//--- 0차원이 전달되면 종료
if(width==0 || height==0)
return;
//--- 리소스 데이터를 업데이트하고 차트를 다시 그립니다.
if(ResourceCreate(res_name,pixel_data,width,height,0,0,0,COLOR_FORMAT_ARGB_NORMALIZE) && redraw)
ChartRedraw();
}
|