forked from nique_372/GrapichsByLeo
//+------------------------------------------------------------------+
| |
//| 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
| |
//+------------------------------------------------------------------+
|