1
0
Derivar 0
EasyAndFastMod/Objects.mqh

259 linhas
24 KiB
MQL5

2026-01-15 07:23:17 -05:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| Objects.mqh |
//| Copyright 2015, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#include "Enums.mqh"
#include "Defines.mqh"
#include "Fonts.mqh"
#include "Colors.mqh"
#include <Graphics\Graphic.mqh>
#include <ChartObjects\ChartObjectSubChart.mqh>
2026-01-15 07:38:32 -05:00
#include "Resources.mqh"
2026-01-15 07:23:17 -05:00
//--- !?8A>: :;0AA>2 2 D09;5 4;O 1KAB@>3> ?5@5E>40 (Alt+G)
class CImage;
class CRectCanvas;
class CSubChart;
//+------------------------------------------------------------------+
//| ;0AA 4;O E@0=5=8O 40==KE 87>1@065=8O |
//+------------------------------------------------------------------+
class CImage
{
protected:
CResources m_resources;
uint m_image_data[]; // 0AA82 ?8:A5;59 :0@B8=:8 (F25B0)
uint m_image_width; // (8@8=0 87>1@065=8O
uint m_image_height; // KA>B0 87>1@065=8O
string m_bmp_path; // CBL : D09;C 87>1@065=8O
uint m_resource_index; // =45:A : @5AC@AC
//---
public:
CImage(void);
~CImage(void);
//--- (1) 07<5@ <0AA820 40==KE, (2) CAB0=>28BL/25@=CBL 40==K5 (F25B ?8:A5;O)
uint DataTotal(void) { return(::ArraySize(m_image_data)); }
uint Data(const uint data_index) { return(m_image_data[data_index]); }
void Data(const uint data_index,const uint data) { m_image_data[data_index]=data; }
//--- #AB0=>28BL/25@=CBL H8@8=C 87>1@065=8O
void Width(const uint width) { m_image_width=width; }
uint Width(void) { return(m_image_width); }
//--- #AB0=>28BL/25@=CBL 2KA>BC 87>1@065=8O
void Height(const uint height) { m_image_height=height; }
uint Height(void) { return(m_image_height); }
//--- #AB0=>28BL/25@=CBL ?CBL : 87>1@065=8N
void BmpPath(const string bmp_file_path) { m_bmp_path=bmp_file_path; }
string BmpPath(void) { return(m_bmp_path); }
//--- #AB0=>28BL/25@=CBL 8=45:A : 87>1@065=8N
void ResourceIndex(const uint resource_index) { m_resource_index=resource_index; }
uint ResourceIndex(void) { return(m_resource_index); }
//--- '8B05B 8 A>E@0=O5B 40==K5 ?5@540==>3> 87>1@065=8O (?CBL : @5AC@AC)
bool ReadImageData(const string bmp_file_path);
//--- '8B05B 8 A>E@0=O5B 40==K5 ?5@540==>3> 87>1@065=8O (8=45:A : @5AC@AC)
bool ReadImageData(const uint resource_index);
//--- >?8@C5B 40==K5 ?5@540==>3> 87>1@065=8O
void CopyImageData(CImage &array_source);
//--- #40;O5B 40==K5 87>1@065=8O
void DeleteImageData(void);
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CImage::CImage(void) : m_image_width(0),
m_image_height(0),
m_bmp_path(""),
m_resource_index(INT_MAX)
{
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CImage::~CImage(void)
{
DeleteImageData();
}
//+------------------------------------------------------------------+
//| !>E@0=O5B ?5@540==CN :0@B8=:C (?CBL : @5AC@AC) 2 <0AA82 |
//+------------------------------------------------------------------+
bool CImage::ReadImageData(const string bmp_file_path)
{
//--- K9B8, 5A;8 ?CAB0O AB@>:0
if(bmp_file_path=="")
return(false);
//--- !>E@0=8< ?CBL : 87>1@065=8N
m_bmp_path=bmp_file_path;
//--- !1@>A8BL ?>A;54=NN >H81:C
::ResetLastError();
//--- @>G8B0BL 8 A>E@0=8BL 40==K5 87>1@065=8O
if(!::ResourceReadImage("::"+m_bmp_path,m_image_data,m_image_width,m_image_height))
{
::Print(__FUNCTION__," > H81:0 ?@8 GB5=88 87>1@065=8O ("+m_bmp_path+"): ",::GetLastError());
return(false);
}
//---
return(true);
}
//+------------------------------------------------------------------+
//| !>E@0=O5B ?5@540==CN :0@B8=:C (8=45:A : @5AC@AC) 2 <0AA82 |
//+------------------------------------------------------------------+
bool CImage::ReadImageData(const uint resource_index)
{
//--- K9B8, 5A;8 ?CAB0O AB@>:0
if(resource_index == INT_MAX)
return(false);
//--- !>E@0=8< 8=45:A : @5AC@AC
m_resource_index=resource_index;
//--- !1@>A8BL ?>A;54=NN >H81:C
::ResetLastError();
//--- @>G8B0BL 8 A>E@0=8BL 40==K5 87>1@065=8O
if(m_resources.GetData(resource_index, m_image_data, m_image_width, m_image_height) == "")
return(false);
//---
return(true);
}
//+------------------------------------------------------------------+
//| >?8@C5B 40==K5 ?5@540==>3> 87>1@065=8O |
//+------------------------------------------------------------------+
void CImage::CopyImageData(CImage &array_source)
{
//--- >;CG8< @07<5@ <0AA820-8AB>G=8:0
uint source_data_total =array_source.DataTotal();
//--- 7<5=8BL @07<5@ <0AA820-?@8Q<=8:0
::ArrayResize(m_image_data,source_data_total);
//--- >?8@C5< 40==K5
for(uint i=0; i<source_data_total; i++)
m_image_data[i]=array_source.Data(i);
}
//+------------------------------------------------------------------+
//| #40;O5B 40==K5 87>1@065=8O |
//+------------------------------------------------------------------+
void CImage::DeleteImageData(void)
{
::ArrayFree(m_image_data);
m_image_width =0;
m_image_height =0;
m_bmp_path ="";
}
//+------------------------------------------------------------------+
//| ;0AA A 4>?>;=8B5;L=K<8 A2>9AB20<8 4;O >1J5:B0 Rectangle Canvas |
//+------------------------------------------------------------------+
class CRectCanvas : public CCanvas
{
protected:
int m_x;
int m_y;
int m_x2;
int m_y2;
int m_x_gap;
int m_y_gap;
int m_x_size;
int m_y_size;
bool m_mouse_focus;
//---
public:
CRectCanvas(void);
~CRectCanvas(void);
//--- >>@48=0BK
int X(void) { return(m_x); }
void X(const int x) { m_x=x; }
int Y(void) { return(m_y); }
void Y(const int y) { m_y=y; }
int X2(void) { return(m_x+m_x_size); }
int Y2(void) { return(m_y+m_y_size); }
//--- BABC?K >B :@09=59 B>G:8 (xy)
int XGap(void) { return(m_x_gap); }
void XGap(const int x_gap) { m_x_gap=x_gap; }
int YGap(void) { return(m_y_gap); }
void YGap(const int y_gap) { m_y_gap=y_gap; }
//--- 07<5@K
int XSize(void) { return(m_x_size); }
void XSize(const int x_size) { m_x_size=x_size; }
int YSize(void) { return(m_y_size); }
void YSize(const int y_size) { m_y_size=y_size; }
//--- $>:CA
bool MouseFocus(void) { return(m_mouse_focus); }
void MouseFocus(const bool focus) { m_mouse_focus=focus; }
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CRectCanvas::CRectCanvas(void) : m_x(0),
m_y(0),
m_x2(0),
m_y2(0),
m_x_gap(0),
m_y_gap(0),
m_x_size(0),
m_y_size(0),
m_mouse_focus(false)
{
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CRectCanvas::~CRectCanvas(void)
{
}
//+------------------------------------------------------------------+
//| ;0AA A 4>?>;=8B5;L=K<8 A2>9AB20<8 4;O >1J5:B0 Sub Chart |
//+------------------------------------------------------------------+
class CSubChart : public CChartObjectSubChart
{
protected:
int m_x;
int m_y;
int m_x2;
int m_y2;
int m_x_gap;
int m_y_gap;
int m_x_size;
int m_y_size;
bool m_mouse_focus;
//---
public:
CSubChart(void);
~CSubChart(void);
//--- >>@48=0BK
int X(void) { return(m_x); }
void X(const int x) { m_x=x; }
int Y(void) { return(m_y); }
void Y(const int y) { m_y=y; }
int X2(void) { return(m_x+m_x_size); }
int Y2(void) { return(m_y+m_y_size); }
//--- BABC?K >B :@09=59 B>G:8 (xy)
int XGap(void) { return(m_x_gap); }
void XGap(const int x_gap) { m_x_gap=x_gap; }
int YGap(void) { return(m_y_gap); }
void YGap(const int y_gap) { m_y_gap=y_gap; }
//--- 07<5@K
int XSize(void) { return(m_x_size); }
void XSize(const int x_size) { m_x_size=x_size; }
int YSize(void) { return(m_y_size); }
void YSize(const int y_size) { m_y_size=y_size; }
//--- $>:CA
bool MouseFocus(void) { return(m_mouse_focus); }
void MouseFocus(const bool focus) { m_mouse_focus=focus; }
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CSubChart::CSubChart(void) : m_x(0),
m_y(0),
m_x2(0),
m_y2(0),
m_x_gap(0),
m_y_gap(0),
m_x_size(0),
m_y_size(0),
m_mouse_focus(false)
{
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CSubChart::~CSubChart(void)
{
}
//+------------------------------------------------------------------+