| #property strict//--- description
 #property description "Script creates \"Bitmap Label\" object."
 //--- display window of the input parameters during the script's launch
 #property script_show_inputs
 //--- input parameters of the script
 input string            InpName="BmpLabel";               // Label name
 input string            InpFileOn="\\Images\\dollar.bmp"; // File name for On mode
 input string            InpFileOff="\\Images\\euro.bmp";  // File name for Off mode
 input bool              InpState=false;                   // Label pressed/released
 input ENUM_BASE_CORNER  InpCorner=CORNER_LEFT_UPPER;      // Chart corner for anchoring
 input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER;          // Anchor type
 input color             InpColor=clrRed;                  // Border color when highlighted
 input ENUM_LINE_STYLE   InpStyle=STYLE_SOLID;             // Line style when highlighted
 input int               InpPointWidth=1;                  // Point size to move
 input bool              InpBack=false;                    // Background object
 input bool              InpSelection=false;               // Highlight to move
 input bool              InpHidden=true;                   // Hidden in the object list
 input long              InpZOrder=0;                      // Priority for mouse click
 //+------------------------------------------------------------------+
 //| Create Bitmap Label object                                       |
 //+------------------------------------------------------------------+
 bool BitmapLabelCreate(const long              chart_ID=0,               // chart's ID
 const string            name="BmpLabel",          // label name
 const int               sub_window=0,             // subwindow index
 const int               x=0,                      // X coordinate
 const int               y=0,                      // Y coordinate
 const string            file_on="",               // image in On mode
 const string            file_off="",              // image in Off mode
 const int               width=0,                  // visibility scope X coordinate
 const int               height=0,                 // visibility scope Y coordinate
 const int               x_offset=10,              // visibility scope shift by X axis
 const int               y_offset=10,              // visibility scope shift by Y axis
 const bool              state=false,              // pressed/released
 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // chart corner for anchoring
 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // anchor type
 const color             clr=clrRed,               // border color when highlighted
 const ENUM_LINE_STYLE   style=STYLE_SOLID,        // line style when highlighted
 const int               point_width=1,            // move point size
 const bool              back=false,               // in the background
 const bool              selection=false,          // highlight to move
 const bool              hidden=true,              // hidden in the object list
 const long              z_order=0)                // priority for mouse click
 {
 //--- reset the error value
 ResetLastError();
 //--- create a bitmap label
 if(!ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
 {
 Print(__FUNCTION__,
 ": failed to create \"Bitmap Label\" object! Error code = ",GetLastError());
 return(false);
 }
 //--- set the images for On and Off modes
 if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on))
 {
 Print(__FUNCTION__,
 ": failed to load the image for On mode! Error code = ",GetLastError());
 return(false);
 }
 if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off))
 {
 Print(__FUNCTION__,
 ": failed to load the image for Off mode! Error code = ",GetLastError());
 return(false);
 }
 //--- set label coordinates
 ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
 ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
 //--- set visibility scope for the image; if width or height values
 //--- exceed the width and height (respectively) of a source image,
 //--- it is not drawn; in the opposite case,
 //--- only the part corresponding to these values is drawn
 ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
 ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
 //--- set the part of an image that is to be displayed in the visibility scope
 //--- the default part is the upper left area of an image; the values allow
 //--- performing a shift from this area displaying another part of the image
 ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
 ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
 //--- define the label's status (pressed or released)
 ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
 //--- set the chart's corner, relative to which point coordinates are defined
 ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
 //--- set anchor type
 ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
 //--- set the border color when object highlighting mode is enabled
 ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
 //--- set the border line style when object highlighting mode is enabled
 ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
 //--- set a size of the anchor point for moving an object
 ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
 //--- display in the foreground (false) or background (true)
 ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
 //--- enable (true) or disable (false) the mode of moving the label by mouse
 ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
 ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
 //--- hide (true) or display (false) graphical object name in the object list
 ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
 //--- set the priority for receiving the event of a mouse click in the chart
 ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
 //--- successful execution
 return(true);
 }
 //+------------------------------------------------------------------+
 //| Set a new image for Bitmap label object                          |
 //+------------------------------------------------------------------+
 bool BitmapLabelSetImage(const long   chart_ID=0,      // chart's ID
 const string name="BmpLabel", // label name
 const int    on_off=0,        // modifier (On or Off)
 const string file="")         // path to the file
 {
 //--- reset the error value
 ResetLastError();
 //--- set the path to the image file
 if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,on_off,file))
 {
 Print(__FUNCTION__,
 ": failed to load the image! Error code = ",GetLastError());
 return(false);
 }
 //--- successful execution
 return(true);
 }
 //+------------------------------------------------------------------+
 //| Move Bitmap Label object                                         |
 //+------------------------------------------------------------------+
 bool BitmapLabelMove(const long   chart_ID=0,      // chart's ID
 const string name="BmpLabel", // label name
 const int    x=0,             // X coordinate
 const int    y=0)             // Y coordinate
 {
 //--- reset the error value
 ResetLastError();
 //--- move the object
 if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
 {
 Print(__FUNCTION__,
 ": failed to move X coordinate of the object! Error code = ",GetLastError());
 return(false);
 }
 if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
 {
 Print(__FUNCTION__,
 ": failed to move Y coordinate of the object! Error code = ",GetLastError());
 return(false);
 }
 //--- successful execution
 return(true);
 }
 //+------------------------------------------------------------------+
 //| Change visibility scope (object) size                            |
 //+------------------------------------------------------------------+
 bool BitmapLabelChangeSize(const long   chart_ID=0,      // chart's ID
 const string name="BmpLabel", // label name
 const int    width=0,         // label width
 const int    height=0)        // label height
 {
 //--- reset the error value
 ResetLastError();
 //--- change the object size
 if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
 {
 Print(__FUNCTION__,
 ": failed to change the object width! Error code = ",GetLastError());
 return(false);
 }
 if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
 {
 Print(__FUNCTION__,
 ": failed to change the object height! Error code = ",GetLastError());
 return(false);
 }
 //--- successful execution
 return(true);
 }
 //+--------------------------------------------------------------------+
 //| Change coordinate of the upper left corner of the visibility scope |
 //+--------------------------------------------------------------------+
 bool BitmapLabelMoveVisibleArea(const long   chart_ID=0,      // chart's ID
 const string name="BmpLabel", // label name
 const int    x_offset=0,      // visibility scope X coordinate
 const int    y_offset=0)      // visibility scope Y coordinate
 {
 //--- reset the error value
 ResetLastError();
 //--- change the object's visibility scope coordinates
 if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
 {
 Print(__FUNCTION__,
 ": failed to change X coordinate of the visibility scope! Error code = ",GetLastError());
 return(false);
 }
 if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
 {
 Print(__FUNCTION__,
 ": failed to change Y coordinate of the visibility scope! Error code = ",GetLastError());
 return(false);
 }
 //--- successful execution
 return(true);
 }
 //+------------------------------------------------------------------+
 //| Delete "Bitmap label" object                                     |
 //+------------------------------------------------------------------+
 bool BitmapLabelDelete(const long   chart_ID=0,      // chart's ID
 const string name="BmpLabel") // label name
 {
 //--- reset the error value
 ResetLastError();
 //--- delete the label
 if(!ObjectDelete(chart_ID,name))
 {
 Print(__FUNCTION__,
 ": failed to delete \"Bitmap label\" object! Error code = ",GetLastError());
 return(false);
 }
 //--- successful execution
 return(true);
 }
 //+------------------------------------------------------------------+
 //| Script program start function                                    |
 //+------------------------------------------------------------------+
 void OnStart()
 {
 //--- chart window size
 long x_distance;
 long y_distance;
 //--- set window size
 if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
 {
 Print("Failed to get the chart width! Error code = ",GetLastError());
 return;
 }
 if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
 {
 Print("Failed to get the chart height! Error code = ",GetLastError());
 return;
 }
 //--- define bitmap label coordinates
 int x=(int)x_distance/2;
 int y=(int)y_distance/2;
 //--- set label size and visibility scope coordinates
 int width=32;
 int height=32;
 int x_offset=0;
 int y_offset=0;
 //--- place bitmap label at the center of the window
 if(!BitmapLabelCreate(0,InpName,0,x,y,InpFileOn,InpFileOff,width,height,x_offset,y_offset,InpState,
 InpCorner,InpAnchor,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
 {
 return;
 }
 //--- redraw the chart and wait one second
 ChartRedraw();
 Sleep(1000);
 //--- change label's visibility scope size in the loop
 for(int i=0;i<6;i++)
 {
 //--- change visibility scope size
 width--;
 height--;
 if(!BitmapLabelChangeSize(0,InpName,width,height))
 return;
 //--- check if the script's operation has been forcefully disabled
 if(IsStopped())
 return;
 //--- redraw the chart
 ChartRedraw();
 // 0.3 seconds of delay
 Sleep(300);
 }
 //--- 1 second of delay
 Sleep(1000);
 //--- change label's visibility scope coordinates in the loop
 for(int i=0;i<2;i++)
 {
 //--- change visibility scope coordinates
 x_offset++;
 y_offset++;
 if(!BitmapLabelMoveVisibleArea(0,InpName,x_offset,y_offset))
 return;
 //--- check if the script's operation has been forcefully disabled
 if(IsStopped())
 return;
 //--- redraw the chart
 ChartRedraw();
 // 0.3 seconds of delay
 Sleep(300);
 }
 //--- 1 second of delay
 Sleep(1000);
 //--- delete the label
 BitmapLabelDelete(0,InpName);
 ChartRedraw();
 //--- 1 second of delay
 Sleep(1000);
 //---
 }
 |