512 lines
20 KiB
MQL5
512 lines
20 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| 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);
| |||
}
| |||
//+------------------------------------------------------------------+
|