geforkt von nique_372/GrapichsByLeo
433 Zeilen
35 KiB
MQL5
433 Zeilen
35 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| TituloSimpel.mqh |
|
|
//| Copyright 2025, Niquel Mendoza. |
|
|
//| https://www.mql5.com/es/users/nique_372/news |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2025, Niquel Mendoza."
|
|
#property link "https://www.mql5.com/es/users/nique_372/news"
|
|
#property strict
|
|
|
|
#ifndef GENERAL_TEXTO_CANVAS_BY_LEO_MQH
|
|
#define GENERAL_TEXTO_CANVAS_BY_LEO_MQH
|
|
|
|
|
|
#include "..\\General\\Canvas.mqh"
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
class CTextCanvas
|
|
{
|
|
protected:
|
|
CCanvasCustom* m_canvas; // Canvas
|
|
bool m_init; // Iniciado?
|
|
uint m_clr; // Color
|
|
string m_text; // Texto
|
|
string m_font; // Fuente
|
|
int m_font_size; // Tamaño de fuente
|
|
uint m_alingement; // Bandera de alineación
|
|
uint m_posicion; // Ángulo
|
|
uint m_flags_text; // Banderas de texto
|
|
int m_x; // X
|
|
int m_y; // Y
|
|
uint m_clr_clean; // Color de limpieza
|
|
|
|
public:
|
|
CTextCanvas();
|
|
|
|
//--- Creación
|
|
void Create(CCanvasCustom *c, int x, int y, const string& txt
|
|
, uint clr, uint align, int fontsize = 0, string font = NULL, uint flagtext = UINT_MAX, uint textpos = UINT_MAX);
|
|
|
|
//--- Update (solo pixeles)
|
|
void UpdateTextPx();
|
|
|
|
//--- Limpia el texto
|
|
void CleanText();
|
|
|
|
//--- Setea la fuente
|
|
void SetFont(); // Gloabal (canvas no ve los cambios)
|
|
void SetFontInCanvas(); // Canvas (varialbes internas + global)
|
|
|
|
//--- Setters y Getters
|
|
//- Color de limpieza
|
|
__forceinline uint CleanColor() const { return m_clr_clean; }
|
|
void CleanColor(uint new_value) { m_clr_clean = new_value; }
|
|
|
|
//- X
|
|
__forceinline int X() const { return m_x; }
|
|
void X(int new_value);
|
|
inline void XSetValue(int new_value) { m_x = new_value; }
|
|
__forceinline void XSetFast(int new_value);
|
|
|
|
//- Y
|
|
__forceinline int Y() const { return m_y; }
|
|
void Y(int new_value);
|
|
inline void YSetValue(int new_value) { m_y = new_value; }
|
|
__forceinline void YSetFast(int new_value);
|
|
|
|
//-
|
|
void ChangeYAndX(int x, int y);
|
|
__forceinline void ChangeYAndXFast(int x, int y);
|
|
|
|
//- Font
|
|
__forceinline string Font() const { return m_font; }
|
|
void Font(const string& new_value);
|
|
inline void FontSetValue(const string& new_value) { m_font = new_value; }
|
|
void FontSetFast(const string& new_value);
|
|
|
|
//- Font Size
|
|
__forceinline int FontSize() const { return m_font_size; }
|
|
void FontSize(int new_value);
|
|
inline void FontSizeSetValue(int new_value) { m_font_size = new_value;}
|
|
__forceinline void FontSizeSetFast(int new_value);
|
|
|
|
|
|
//- Alineamiento
|
|
__forceinline uint TextAlingement() const { return m_alingement; }
|
|
void TextAlingement(uint new_value);
|
|
inline void TextAlingementSetValue(uint new_value) { m_alingement = new_value; }
|
|
__forceinline void TextAlingementSetFast(uint new_value);
|
|
|
|
//- Flags text
|
|
__forceinline uint TextFlags() const { return m_flags_text; }
|
|
void TextFlags(uint new_value);
|
|
inline void TextFlagsSetValue(uint new_value) { m_flags_text = new_value;}
|
|
__forceinline void TextFlagsSetFast(uint new_value);
|
|
|
|
//- Color
|
|
__forceinline uint Color() const { return m_clr; }
|
|
void Color(uint new_value);
|
|
inline void ColorSetValue(uint new_value) { m_clr = new_value; }
|
|
__forceinline void ColorSetFast(uint new_value);
|
|
|
|
//- Texto
|
|
__forceinline string Text() const { return m_text; }
|
|
void Text(const string& new_value);
|
|
inline void TextSetValue(const string& new_value) { m_text = new_value; }
|
|
void TextSetFast(const string& new_value);
|
|
|
|
//- Posición (ángulo)
|
|
__forceinline uint TextPosition() const { return m_posicion; }
|
|
void TextPosition(uint new_value);
|
|
inline void TextPositionSetValue(uint new_value) { m_posicion = new_value; }
|
|
__forceinline void TextPositionSetFast(uint new_value);
|
|
|
|
|
|
|
|
//- Init
|
|
__forceinline bool IsInit() const { return m_init; }
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Constructor |
|
|
//+------------------------------------------------------------------+
|
|
CTextCanvas::CTextCanvas(void)
|
|
: m_canvas(NULL), m_init(false)/*, m_clr(0xFFFFFFFF), m_text(""),
|
|
m_font("Arial"), m_font_size(10), m_alingement(0), m_posicion(0),
|
|
m_flags_text(0), m_x(0), m_y(0), m_clr_clean(0xFFFFFFFF)*/
|
|
{
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
// Notas:
|
|
// Si al menos uno de los 4 parametros pro defecto es valido, entoces se setera el font
|
|
// Al momenot de setear los valores "Font" los valores si el valor corespondinete es valido, entonces se usara dicho valor, de lo contrario el valor ultimo de canvas
|
|
// Por esto mismo se recoeminda al usuario usar el .FontSet de canvas... de lo contraio se guradan valores invalidos
|
|
// Ls valores invalidos que vinene por defecto dan la opcion al usuario a usar el ultimo font conocido de canvas
|
|
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::Create(CCanvasCustom *c, int x, int y, const string& txt
|
|
, uint clr, uint align, int fontsize = 0, string font = NULL, uint flagtext = UINT_MAX, uint textpos = UINT_MAX)
|
|
{
|
|
if(m_init)
|
|
return;
|
|
|
|
//---
|
|
const bool valid_font = font != NULL;
|
|
const bool valid_font_size = fontsize > 0;
|
|
const bool valid_flags_text = flagtext < UINT_MAX;
|
|
const bool valid_text_pos = textpos < UINT_MAX;
|
|
const bool set_font = (valid_flags_text || valid_font || valid_font_size || valid_text_pos);
|
|
|
|
//---
|
|
m_canvas = c;
|
|
m_x = x;
|
|
m_y = y;
|
|
m_text = txt;
|
|
m_alingement = align;
|
|
m_clr = clr;
|
|
m_init = true;
|
|
|
|
//---
|
|
m_font_size = valid_font_size ? fontsize : c.FontSizeGet();
|
|
m_font = valid_font ? font : c.FontNameGet();
|
|
m_posicion = valid_text_pos ? textpos : c.FontAngleGet();
|
|
m_flags_text = valid_flags_text ? flagtext : c.FontFlagsGet();
|
|
|
|
//--- Dibujar texto inicial
|
|
if(set_font)
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::UpdateTextPx(void)
|
|
{
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::CleanText()
|
|
{
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::SetFont(void)
|
|
{
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::SetFontInCanvas(void)
|
|
{
|
|
m_canvas.FontSet(m_font, m_font_size, m_flags_text, m_posicion);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::X(int new_value)
|
|
{
|
|
//--- Limpiar texto en posición anterior
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
|
|
//--- Actualizar y redibujar
|
|
m_x = new_value;
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CTextCanvas::XSetFast(int new_value)
|
|
{
|
|
// Limpiamos el texto anteior, asumirmo que el fontse se puso al valor adecuado
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
m_canvas.TextOuTF((m_x = new_value), m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::Y(int new_value)
|
|
{
|
|
//--- Limpiar texto en posición anterior
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
|
|
//--- Actualizar y redibujar
|
|
m_y = new_value;
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CTextCanvas::YSetFast(int new_value)
|
|
{
|
|
// Limpiamos el texto anteior, asumirmo que el fontse se puso al valor adecuado
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
m_canvas.TextOuTF(m_x, (m_y = new_value), m_text, m_clr, m_alingement); // Nuevo valor
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::ChangeYAndX(int x, int y)
|
|
{
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
m_y = y;
|
|
m_x = x;
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CTextCanvas::ChangeYAndXFast(int x, int y)
|
|
{
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
m_canvas.TextOuTF((m_x = x), (m_y = y), m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::Font(const string &new_value)
|
|
{
|
|
//--- Limpiar con font anterior
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
|
|
//--- Actualizar y redibujar con nuevo font
|
|
m_font = new_value;
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::FontSetFast(const string &new_value)
|
|
{
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
m_font = new_value;
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::FontSize(int new_value)
|
|
{
|
|
//--- Limpiar con tamaño anterior
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
|
|
//--- Actualizar y redibujar con nuevo tamaño
|
|
m_font_size = new_value;
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CTextCanvas::FontSizeSetFast(int new_value)
|
|
{
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
::TextSetFont(m_font, (m_font_size = new_value), m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::TextAlingement(uint new_value)
|
|
{
|
|
//--- Limpiar con alineamiento anterior
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
|
|
//--- Actualizar y redibujar con nuevo alineamiento
|
|
m_alingement = new_value;
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CTextCanvas::TextAlingementSetFast(uint new_value)
|
|
{
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, (m_alingement = new_value));
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::TextFlags(uint new_value)
|
|
{
|
|
//--- Limpiar con flags anteriores
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
|
|
//--- Actualizar y redibujar con nuevas flags
|
|
m_flags_text = new_value;
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CTextCanvas::TextFlagsSetFast(uint new_value)
|
|
{
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
::TextSetFont(m_font, m_font_size, (m_flags_text = new_value), m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::Color(uint new_value)
|
|
{
|
|
//--- Establecer el fontset correcto
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_clr = new_value;
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CTextCanvas::ColorSetFast(uint new_value)
|
|
{
|
|
// Asumo que el TextSetFont es el correcto
|
|
// Ademas solo se cambia el color (no posiocn ni tanñao, asi que no es necesito limpiar)
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, (m_clr = new_value), m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::Text(const string &new_value)
|
|
{
|
|
//--- Limpiar texto anterior
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
|
|
//--- Actualizar y redibujar con nuevo texto
|
|
m_text = new_value;
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::TextSetFast(const string &new_value)
|
|
{
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
m_text = new_value; // como es string mejor inline
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CTextCanvas::TextPosition(uint new_value)
|
|
{
|
|
//--- Limpiar con ángulo anterior
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
|
|
//--- Actualizar y redibujar con nuevo ángulo
|
|
m_posicion = new_value;
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, m_posicion);
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CTextCanvas::TextPositionSetFast(uint new_value)
|
|
{
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr_clean, m_alingement);
|
|
::TextSetFont(m_font, m_font_size, m_flags_text, (m_posicion = new_value));
|
|
m_canvas.TextOuTF(m_x, m_y, m_text, m_clr, m_alingement);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
#endif
|
|
//+------------------------------------------------------------------+
|