//+------------------------------------------------------------------+ //| ChartObjectsBmpControls.mqh | //| Copyright 2000-2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ //| All objects with "bmp" pictures. | //+------------------------------------------------------------------+ #include "ChartObject.mqh" //+------------------------------------------------------------------+ //| Class CChartObjectBitmap. | //| Purpose: Class of the "Bitmap" object of chart. | //| Derives from class CChartObject. | //+------------------------------------------------------------------+ class CChartObjectBitmap : public CChartObject { public: CChartObjectBitmap(void); ~CChartObjectBitmap(void); //--- methods of access to properties of the object string BmpFile(void) const; bool BmpFile(const string name) const; int X_Offset(void) const; bool X_Offset(const int X) const; int Y_Offset(void) const; bool Y_Offset(const int Y) const; //--- method of creating the object bool Create(long chart_id,const string name,const int window,const datetime time,const double price); //--- method of identifying the object virtual int Type(void) const { return(OBJ_BITMAP); } //--- methods for working with files virtual bool Save(const int file_handle); virtual bool Load(const int file_handle); }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CChartObjectBitmap::CChartObjectBitmap(void) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CChartObjectBitmap::~CChartObjectBitmap(void) { } //+------------------------------------------------------------------+ //| Create object "Bitmapp" | //+------------------------------------------------------------------+ bool CChartObjectBitmap::Create(long chart_id,const string name,const int window,const datetime time,const double price) { if(!ObjectCreate(chart_id,name,OBJ_BITMAP,window,time,price)) return(false); if(!Attach(chart_id,name,window,1)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Get name of bmp-file | //+------------------------------------------------------------------+ string CChartObjectBitmap::BmpFile(void) const { //--- check if(m_chart_id==-1) return(""); //--- result return(ObjectGetString(m_chart_id,m_name,OBJPROP_BMPFILE)); } //+------------------------------------------------------------------+ //| Set name of bmp-file | //+------------------------------------------------------------------+ bool CChartObjectBitmap::BmpFile(const string name) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetString(m_chart_id,m_name,OBJPROP_BMPFILE,name)); } //+------------------------------------------------------------------+ //| Get the XOffset property | //+------------------------------------------------------------------+ int CChartObjectBitmap::X_Offset(void) const { //--- check if(m_chart_id==-1) return(0); //--- result return((int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_XOFFSET)); } //+------------------------------------------------------------------+ //| Set the XOffset property | //+------------------------------------------------------------------+ bool CChartObjectBitmap::X_Offset(const int X) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_XOFFSET,X)); } //+------------------------------------------------------------------+ //| Get the YOffset property | //+------------------------------------------------------------------+ int CChartObjectBitmap::Y_Offset(void) const { //--- check if(m_chart_id==-1) return(0); //--- result return((int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_YOFFSET)); } //+------------------------------------------------------------------+ //| Set the YOffset property | //+------------------------------------------------------------------+ bool CChartObjectBitmap::Y_Offset(const int Y) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_YOFFSET,Y)); } //+------------------------------------------------------------------+ //| Writing parameters of object to file | //+------------------------------------------------------------------+ bool CChartObjectBitmap::Save(const int file_handle) { int len; string str; //--- check if(file_handle==INVALID_HANDLE || m_chart_id==-1) return(false); //--- write if(!CChartObject::Save(file_handle)) return(false); //--- write value of the "name of bmp-file" property str=ObjectGetString(m_chart_id,m_name,OBJPROP_BMPFILE); len=StringLen(str); if(FileWriteInteger(file_handle,len,INT_VALUE)!=INT_VALUE) return(false); if(len!=0 && FileWriteString(file_handle,str,len)!=len) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Reading parameters of object from file | //+------------------------------------------------------------------+ bool CChartObjectBitmap::Load(const int file_handle) { int len; string str; //--- check if(file_handle==INVALID_HANDLE || m_chart_id==-1) return(false); //--- read if(!CChartObject::Load(file_handle)) return(false); //--- read value of the "name of bmp-file" property len=FileReadInteger(file_handle,INT_VALUE); str=(len!=0) ? FileReadString(file_handle,len) : ""; if(!ObjectSetString(m_chart_id,m_name,OBJPROP_BMPFILE,str)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Class CChartObjectBmpLabel. | //| Purpose: Class of the "Bitmap label" object of chart. | //| Derives from class CChartObject. | //+------------------------------------------------------------------+ class CChartObjectBmpLabel : public CChartObject { public: CChartObjectBmpLabel(void); ~CChartObjectBmpLabel(void); //--- methods of access to properties of the object int X_Distance(void) const; bool X_Distance(const int X) const; int Y_Distance(void) const; bool Y_Distance(const int Y) const; int X_Size(void) const; int Y_Size(void) const; ENUM_BASE_CORNER Corner(void) const; bool Corner(const ENUM_BASE_CORNER corner) const; string BmpFileOn(void) const; bool BmpFileOn(const string name) const; string BmpFileOff(void) const; bool BmpFileOff(const string name) const; bool State(void) const; bool State(const bool state) const; int X_Offset(void) const; bool X_Offset(const int X) const; int Y_Offset(void) const; bool Y_Offset(const int Y) const; //--- change of time/price coordinates is blocked bool Time(const datetime time) const { return(false); } bool Price(const double price) const { return(false); } //--- method of creating the object bool Create(long chart_id,const string name,const int window,const int X,const int Y); //--- method of identifying the object virtual int Type(void) const { return(OBJ_BITMAP_LABEL); } //--- methods for working with files virtual bool Save(const int file_handle); virtual bool Load(const int file_handle); }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CChartObjectBmpLabel::CChartObjectBmpLabel(void) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CChartObjectBmpLabel::~CChartObjectBmpLabel(void) { } //+------------------------------------------------------------------+ //| Create object "Bitmap label" | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::Create(long chart_id,const string name,const int window,const int X,const int Y) { if(!ObjectCreate(chart_id,name,OBJ_BITMAP_LABEL,window,0,0.0)) return(false); if(!Attach(chart_id,name,window,1)) return(false); if(!X_Distance(X) || !Y_Distance(Y)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Get the X-distance property | //+------------------------------------------------------------------+ int CChartObjectBmpLabel::X_Distance(void) const { //--- check if(m_chart_id==-1) return(0); //--- result return((int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_XDISTANCE)); } //+------------------------------------------------------------------+ //| Set the X-distance property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::X_Distance(const int X) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_XDISTANCE,X)); } //+------------------------------------------------------------------+ //| Get the Y-distance property | //+------------------------------------------------------------------+ int CChartObjectBmpLabel::Y_Distance(void) const { //--- check if(m_chart_id==-1) return(0); //--- result return((int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_YDISTANCE)); } //+------------------------------------------------------------------+ //| Set the Y-distance property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::Y_Distance(const int Y) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_YDISTANCE,Y)); } //+------------------------------------------------------------------+ //| Get the X-size | //+------------------------------------------------------------------+ int CChartObjectBmpLabel::X_Size(void) const { //--- check if(m_chart_id==-1) return(0); //--- result return((int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_XSIZE)); } //+------------------------------------------------------------------+ //| Get the Y-size | //+------------------------------------------------------------------+ int CChartObjectBmpLabel::Y_Size(void) const { //--- check if(m_chart_id==-1) return(0); //--- result return((int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_YSIZE)); } //+------------------------------------------------------------------+ //| Get the Corner property | //+------------------------------------------------------------------+ ENUM_BASE_CORNER CChartObjectBmpLabel::Corner(void) const { //--- check if(m_chart_id==-1) return(WRONG_VALUE); //--- result return((ENUM_BASE_CORNER)ObjectGetInteger(m_chart_id,m_name,OBJPROP_CORNER)); } //+------------------------------------------------------------------+ //| Set the Corner property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::Corner(const ENUM_BASE_CORNER corner) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_CORNER,corner)); } //+------------------------------------------------------------------+ //| Get filename of the "bmp-ON" property | //+------------------------------------------------------------------+ string CChartObjectBmpLabel::BmpFileOn(void) const { //--- check if(m_chart_id==-1) return(""); //--- result return(ObjectGetString(m_chart_id,m_name,OBJPROP_BMPFILE,0)); } //+------------------------------------------------------------------+ //| Set filename for the "bmp-ON" property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::BmpFileOn(const string name) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetString(m_chart_id,m_name,OBJPROP_BMPFILE,0,name)); } //+------------------------------------------------------------------+ //| Get filename of the "bmp-OFF" property | //+------------------------------------------------------------------+ string CChartObjectBmpLabel::BmpFileOff(void) const { //--- check if(m_chart_id==-1) return(""); //--- result return(ObjectGetString(m_chart_id,m_name,OBJPROP_BMPFILE,1)); } //+------------------------------------------------------------------+ //| Set filename for the "bmp-OFF" property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::BmpFileOff(const string name) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetString(m_chart_id,m_name,OBJPROP_BMPFILE,1,name)); } //+------------------------------------------------------------------+ //| Get the State property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::State(void) const { //--- check if(m_chart_id==-1) return(false); //--- result return((bool)ObjectGetInteger(m_chart_id,m_name,OBJPROP_STATE)); } //+------------------------------------------------------------------+ //| Set the State property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::State(const bool state) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_STATE,state)); } //+------------------------------------------------------------------+ //| Get the XOffset property | //+------------------------------------------------------------------+ int CChartObjectBmpLabel::X_Offset(void) const { //--- check if(m_chart_id==-1) return(0); //--- result return((int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_XOFFSET)); } //+------------------------------------------------------------------+ //| Set the XOffset property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::X_Offset(const int X) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_XOFFSET,X)); } //+------------------------------------------------------------------+ //| Get the YOffset property | //+------------------------------------------------------------------+ int CChartObjectBmpLabel::Y_Offset(void) const { //--- check if(m_chart_id==-1) return(0); //--- result return((int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_YOFFSET)); } //+------------------------------------------------------------------+ //| Set the YOffset property | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::Y_Offset(const int Y) const { //--- check if(m_chart_id==-1) return(false); //--- result return(ObjectSetInteger(m_chart_id,m_name,OBJPROP_YOFFSET,Y)); } //+------------------------------------------------------------------+ //| Writing parameters of object to file | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::Save(const int file_handle) { int len; string str; //--- check if(file_handle==INVALID_HANDLE || m_chart_id==-1) return(false); //--- write if(!CChartObject::Save(file_handle)) return(false); //--- write value of the "X-distance" property if(FileWriteInteger(file_handle,(int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_XDISTANCE),INT_VALUE)!=sizeof(int)) return(false); //--- write value of the "Y-distance" property if(FileWriteInteger(file_handle,(int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_YDISTANCE),INT_VALUE)!=sizeof(int)) return(false); //--- write value of the "Corner" property if(FileWriteInteger(file_handle,(int)ObjectGetInteger(m_chart_id,m_name,OBJPROP_CORNER),INT_VALUE)!=sizeof(int)) return(false); //--- write value of the "filename bmp-ON" property str=ObjectGetString(m_chart_id,m_name,OBJPROP_BMPFILE,0); len=StringLen(str); if(FileWriteInteger(file_handle,len,INT_VALUE)!=INT_VALUE) return(false); if(len!=0 && FileWriteString(file_handle,str,len)!=len) return(false); //--- write value of the "filename bmp-OFF" property str=ObjectGetString(m_chart_id,m_name,OBJPROP_BMPFILE,1); len=StringLen(str); if(FileWriteInteger(file_handle,len,INT_VALUE)!=INT_VALUE) return(false); if(len!=0 && FileWriteString(file_handle,str,len)!=len) return(false); //--- write state if(FileWriteLong(file_handle,ObjectGetInteger(m_chart_id,m_name,OBJPROP_STATE))!=sizeof(long)) return(false); //--- successful return(true); } //+------------------------------------------------------------------+ //| Reading object parameters from file | //+------------------------------------------------------------------+ bool CChartObjectBmpLabel::Load(const int file_handle) { int len; string str; //--- check if(file_handle==INVALID_HANDLE || m_chart_id==-1) return(false); //--- read if(!CChartObject::Load(file_handle)) return(false); //--- read value of the "X-distance" property if(!ObjectSetInteger(m_chart_id,m_name,OBJPROP_XDISTANCE,FileReadInteger(file_handle,INT_VALUE))) return(false); //--- read value of the "Y-distance" property if(!ObjectSetInteger(m_chart_id,m_name,OBJPROP_YDISTANCE,FileReadInteger(file_handle,INT_VALUE))) return(false); //--- read value of "Corner" property if(!ObjectSetInteger(m_chart_id,m_name,OBJPROP_CORNER,FileReadInteger(file_handle,INT_VALUE))) return(false); //--- read value of the "filename bmp-ON" property len=FileReadInteger(file_handle,INT_VALUE); str=(len!=0) ? FileReadString(file_handle,len) : ""; if(!ObjectSetString(m_chart_id,m_name,OBJPROP_BMPFILE,0,str)) return(false); //--- read value of the "filename bmp-OFF" property len=FileReadInteger(file_handle,INT_VALUE); str=(len!=0) ? FileReadString(file_handle,len) : ""; if(!ObjectSetString(m_chart_id,m_name,OBJPROP_BMPFILE,1,str)) return(false); //--- read state if(!ObjectSetInteger(m_chart_id,m_name,OBJPROP_STATE,FileReadLong(file_handle))) return(false); //--- successful return(true); } //+------------------------------------------------------------------+