//--- descrição
#property description "Script cria objeto gráfico \"Etiqueta\"."
//--- janela de exibição dos parâmetros de entrada durante inicialização do script
#property script_show_inputs
//--- entrada de parâmetros do script
input string InpName="Label"; // Nome etiqueta
input int InpX=150; // distância do eixo X
input int InpY=150; // distância do eixo Y
input string InpFont="Arial"; // Fonte
input int InpFontSize=14; // Tamanho da fonte
input color InpColor=clrRed; // Cor
input double InpAngle=0.0; // Ângulo de inclinação em graus
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER; // Tipo de ancoragem
input bool InpBack=false; // Objeto de fundo
input bool InpSelection=true; // Destaque para mover
input bool InpHidden=true; // Ocultar na lista de objetos
input long InpZOrder=0; // Prioridade para clique do mouse
//+------------------------------------------------------------------+
//| Criar um a etiqueta de texto |
//+------------------------------------------------------------------+
bool LabelCreate(const long chart_ID=0, // ID do gráfico
const string name="Label", // nome da etiqueta
const int sub_window=0, // índice da sub-janela
const int x=0, // coordenada X
const int y=0, // coordenada Y
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // canto do gráfico para ancoragem
const string text="Label", // texto
const string font="Arial", // fonte
const int font_size=10, // tamanho da fonte
const color clr=clrRed, // cor
const double angle=0.0, // inclinação do texto
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // tipo de ancoragem
const bool back=false, // no fundo
const bool selection=false, // destaque para mover
const bool hidden=true, // ocultar na lista de objetos
const long z_order=0) // prioridade para clicar no mouse
{
//--- redefine o valor de erro
ResetLastError();
//--- criar um a etiqueta de texto
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": falha ao criar uma etiqueta de texto! Código de erro = ",GetLastError());
return(false);
}
//--- definir coordenadas da etiqueta
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- determinar o canto do gráfico onde as coordenadas do ponto são definidas
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- definir o texto
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- definir o texto fonte
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- definir tamanho da fonte
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- definir o ângulo de inclinação do texto
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- tipo de definição de ancoragem
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- definir cor
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- exibir em primeiro plano (false) ou fundo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- Habilitar (true) ou desabilitar (false) o modo de movimento da etiqueta pelo mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- ocultar (true) ou exibir (false) o nome do objeto gráfico na lista de objeto
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- definir a prioridade para receber o evento com um clique do mouse no gráfico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- sucesso na execução
return(true);
}
//+------------------------------------------------------------------+
//| Mover a etiqueta de texto |
//+------------------------------------------------------------------+
bool LabelMove(const long chart_ID=0, // ID do gráfico
const string name="Label", // nome da etiqueta
const int x=0, // coordenada X
const int y=0) // coordenada Y
{
//--- redefine o valor de erro
ResetLastError();
//--- mover a etiqueta de texto
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": falha para mover coordenada X do objeto! Código de erro = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": falha para mover coordenada X do objeto! Código de erro = ",GetLastError());
return(false);
}
//--- sucesso na execução
return(true);
}
//+------------------------------------------------------------------+
//| Alterar canto do gráfico para vinculação da etiqueta |
//+------------------------------------------------------------------+
bool LabelChangeCorner(const long chart_ID=0, // ID do gráfico
const string name="Label", // nome da etiqueta
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER) // canto do gráfico para ancoragem
{
//--- redefine o valor de erro
ResetLastError();
//--- alterar canto de ancoragem
if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
{
Print(__FUNCTION__,
": falha ao alterar canto de ancoragem! Código de erro = ",GetLastError());
return(false);
}
//--- sucesso na execução
return(true);
}
//+------------------------------------------------------------------+
//| Alterar o texto do objeto |
//+------------------------------------------------------------------+
bool LabelTextChange(const long chart_ID=0, // ID do gráfico
const string name="Label", // nome do objeto
const string text="Text") // texto
{
//--- redefine o valor de erro
ResetLastError();
//--- alterar texto do objeto
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": falha ao alterar texto! Código de erro = ",GetLastError());
return(false);
}
//--- sucesso na execução
return(true);
}
//+------------------------------------------------------------------+
//| Apagar uma etiqueta de texto |
//+------------------------------------------------------------------+
bool LabelDelete(const long chart_ID=0, // ID do gráfico
const string name="Label") // nome da etiqueta
{
//--- redefine o valor de erro
ResetLastError();
//--- excluir a etiqueta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": falha ao excluir a etiqueta de texto! Código de erro = ",GetLastError());
return(false);
}
//--- sucesso na execução
return(true);
}
//+------------------------------------------------------------------+
//| Programa Script da função start (iniciar) |
//+------------------------------------------------------------------+
void OnStart()
{
//--- armazenar as coordenadas das etiquetas nas variáveis locais
int x=InpX;
int y=InpY;
//--- tamanho da janela do gráfico
long x_distance;
long y_distance;
//--- definir tamanho da janela
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Falha ao obter a largura do gráfico! Código de erro = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Falha ao obter a altura do gráfico! Código de erro = ",GetLastError());
return;
}
//--- verificar a exatidão dos parâmetros de entrada
if(InpX<0 || InpX>x_distance-1 || InpY<0 || InpY>y_distance-1)
{
Print("Erro! Valores incorretos dos parâmetros de entrada!");
return;
}
//--- preparar texto inicial para a etiqueta
string text;
StringConcatenate(text,"Canto inferior direito: ",x,",",y);
//--- criar uma etiqueta de texto no gráfico
if(!LabelCreate(0,InpName,0,InpX,InpY,CORNER_LEFT_UPPER,text,InpFont,InpFontSize,
InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redesenhar o gráfico e esperar por um segundo
ChartRedraw();
Sleep(500);
//--- mover a etiqueta e alterar o seu texto simultaneamente
//--- número de iterações por eixos
int h_steps=(int)(x_distance/2-InpX);
int v_steps=(int)(y_distance/2-InpY);
//--- mover a etiqueta para baixo
for(int i=0;i<v_steps;i++)
{
//--- alterar a coordenada
y+=2;
//--- mover a etiqueta e alterar o seu texto
MoveAndTextChange(x,y,"Canto superior esquerdo: ");
}
//--- meio segundo de atraso
Sleep(500);
//--- mover a etiqueta para a direita
for(int i=0;i<h_steps;i++)
{
//--- alterar a coordenada
x+=2;
//--- mover a etiqueta e alterar o seu texto
MoveAndTextChange(x,y,"Canto superior esquerdo: ");
}
//--- meio segundo de atraso
Sleep(500);
//--- mover a etiqueta para cima
for(int i=0;i<v_steps;i++)
{
//--- alterar a coordenada
y-=2;
//--- mover a etiqueta e alterar o seu texto
MoveAndTextChange(x,y,"Canto superior esquerdo: ");
}
//--- meio segundo de atraso
Sleep(500);
//--- mover a etiqueta para a esquerda
for(int i=0;i<h_steps;i++)
{
//--- alterar a coordenada
x-=2;
//--- mover a etiqueta e alterar o seu texto
MoveAndTextChange(x,y,"Canto superior esquerdo: ");
}
//--- meio segundo de atraso
Sleep(500);
//--- agora, mover o ponto para mudar o canto de ancoragem
//--- mover para o canto inferior esquerdo
if(!LabelChangeCorner(0,InpName,CORNER_LEFT_LOWER))
return;
//--- alterar texto da etiqueta
StringConcatenate(text,"Canto inferior direito: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redesenhar o gráfico e esperar por dois segundos
ChartRedraw();
Sleep(2000);
//--- mover para o canto inferior direito
if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_LOWER))
return;
//--- alterar texto da etiqueta
StringConcatenate(text,"Canto direito inferior: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redesenhar o gráfico e esperar por dois segundos
ChartRedraw();
Sleep(2000);
//--- mover para o canto superior direito
if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_UPPER))
return;
//--- alterar texto da etiqueta
StringConcatenate(text,"Canto inferior direito: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redesenhar o gráfico e esperar por dois segundos
ChartRedraw();
Sleep(2000);
//--- mover para o canto superior esquerdo
if(!LabelChangeCorner(0,InpName,CORNER_LEFT_UPPER))
return;
//--- alterar texto da etiqueta
StringConcatenate(text,"Canto inferior direito: ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redesenhar o gráfico e esperar por dois segundos
ChartRedraw();
Sleep(2000);
//--- excluir a etiqueta
LabelDelete(0,InpName);
//--- redesenhar o gráfico e esperar por um segundo
ChartRedraw();
Sleep(500);
//---
}
//+------------------------------------------------------------------+
//| A função movimenta o objeto e altera o seu texto |
//+------------------------------------------------------------------+
bool MoveAndTextChange(const int x,const int y,string text)
{
//--- mover a etiqueta
if(!LabelMove(0,InpName,x,y))
return(false);
//--- alterar texto da etiqueta
StringConcatenate(text,text,x,",",y);
if(!LabelTextChange(0,InpName,text))
return(false);
//--- verificar se o funcionamento do script foi desativado a força
if(IsStopped())
return(false);
//--- redesenhar o gráfico
ChartRedraw();
// 0.01 segundos de atraso
Sleep(10);
//--- sair da função
return(true);
}
|