//--- descrizione
#property description "Lo script crea l'oggetto grafico \"Etichetta Rettangolo \"."
//--- mostra la finestra dei parametri di input durante il lancio dello script
#property script_show_inputs
//--- parametri di input dello script
input string InpName="Label"; // Nome Etichetta
input color InpBackColor=clrSkyBlue; // Colore di sottofondo
input ENUM_BORDER_TYPE InpBorder=BORDER_FLAT; // Tipo di bordo
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Angolo del chart per l'ancoraggio
input color InpColor=clrDarkBlue; // Colore del bordo piatto (Flat)
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Stile del bordo piatto (Flat)
input int InpLineWidth=3; // Spessore del bordo piatto (Flat)
input bool InpBack=false; // Oggetto sottofondo
input bool InpSelection=true; // Evidanzia movimento
input bool InpHidden=true; // Nascosto nella lista oggetti
input long InpZOrder=0; // Priorità per il click del mouse
//+--------------------------------------------------------------------------------+
//| Create rectangle label |
//+--------------------------------------------------------------------------------+
bool RectLabelCreate(const long chart_ID=0, // ID del chart
const string name="RectLabel", // nome dell'etichetta
const int sub_window=0, // indice sottofinestra
const int x=0, // coordinate X
const int y=0, // coordinate Y
const int width=50, // spessore
const int height=18, // altezza
const color back_clr=C'236,233,216', // colore di background
const ENUM_BORDER_TYPE border=BORDER_SUNKEN, // tipo di bordo
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // angolo del chart per l'ancoraggio
const color clr=clrRed, // colore del bordo flat (Flat)
const ENUM_LINE_STYLE style=STYLE_SOLID, // stile del bordo flat
const int line_width=1, // spessore del bordo flat
const bool back=false, // in sottofondo
const bool selection=false, // evidenzia movimento
const bool hidden=true, // nascosto nella lista oggetti
const long z_order=0) // priorità per il click del mouse
{
//--- resetta il valore dell' errore
ResetLastError();
//--- crea un' etichetta rettangolo
if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": fallimento nel creare l'etichetta rettangolo! Error code = ",GetLastError());
return(false);
}
//--- imposta le coordinate dell'etichetta
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- imposta la grandezza dell'etichetta
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- imposta colore di background
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- imposta il tipo di bordo
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- imposta l'angolo del chart, relativo a quali punti coordinate vengono definiti
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- imposta il colore del bordo piatto (in modalità Flat)
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- imposta lo stile della linea del bordo piatto
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- imposta lo spessore del bordo piatto
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
//--- mostra in primo piano (false) o sottofondo (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- abilita (true) o disabilita (false) il modo di spostamento dell'etichetta con il mouse
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- nascondi (true) o mostra (falso) il nome di oggetto grafico nella lista degli oggetti
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- imposta la priorità per ricevere l'evento di un clic del mouse nel grafico
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Sposta l'etichetta rettangolo |
//+--------------------------------------------------------------------------------+
bool RectLabelMove(const long chart_ID=0, // ID del chart
const string name="RectLabel", // nome dell'etichetta
const int x=0, // coordinate X
const int y=0) // coordinate Y
{
//--- resetta il valore dell' errore
ResetLastError();
//--- sposta l'etichetta rettangolo
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": fallimento nello spostamento delle coordinate X dell'etichetta! Error code = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": fallimento nello spostamento della coordinata Y dell'etichetta! Error code = ",GetLastError());
return(false);
}
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Cambia lo spessore dell'etichetta rettangolo |
//+--------------------------------------------------------------------------------+
bool RectLabelChangeSize(const long chart_ID=0, // ID del chart
const string name="RectLabel", // nome dell'etichetta
const int width=50, // spessore della linea
const int height=18) // altezza dell'etichetta
{
//--- resetta il valore dell' errore
ResetLastError();
//--- cambia la grandezza dell'etichetta
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": fallimento nel cambiare lo spessore dell'etichetta! Error code = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": fallimento nel cambiare l'altezza dell'etichetta! Error code = ",GetLastError());
return(false);
}
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Cambia il tipo di bordo dell'etichetta rettangolo |
//+--------------------------------------------------------------------------------+
bool RectLabelChangeBorderType(const long chart_ID=0, // ID del chart
const string name="RectLabel", // nome dell'etichetta
const ENUM_BORDER_TYPE border=BORDER_SUNKEN) // tipo di bordo
{
//--- resetta il valore dell' errore
ResetLastError();
//--- cambia il tipo di bordo
if(!ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border))
{
Print(__FUNCTION__,
": fallimento nel cambiare il tipo di bordo! Error code = ",GetLastError());
return(false);
}
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Elimina l'etichetta del rettangolo |
//+--------------------------------------------------------------------------------+
bool RectLabelDelete(const long chart_ID=0, // ID del chart
const string name="RectLabel") // nome etichetta
{
//--- resetta il valore dell' errore
ResetLastError();
//--- elimina l'etichetta
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": fallimento nell'eliminare l'etichetta del rettangolo! Error code = ",GetLastError());
return(false);
}
//--- esecuzione avvenuta
return(true);
}
//+--------------------------------------------------------------------------------+
//| Funzione di avvio del programma Script |
//+--------------------------------------------------------------------------------+
voidOnStart()
{
//--- grandezza della finestra chart
long x_distance;
long y_distance;
//--- imposta la grandezza della finestra
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Fallimento nell'ottenere la grandezza del chart! Error code = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Fallimento nell'ottenere l'altezza del chart! Error code = ",GetLastError());
return;
}
//--- definisce le coordinate dell'etichetta rettangolo
int x=(int)x_distance/4;
int y=(int)y_distance/4;
//--- imposta la grandezza dell'etichetta
int width=(int)x_distance/4;
int height=(int)y_distance/4;
//--- crea un' etichetta rettangolo
if(!RectLabelCreate(0,InpName,0,x,y,width,height,InpBackColor,InpBorder,InpCorner,
InpColor,InpStyle,InpLineWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- ridisegna il chart e ne attende un secondo
ChartRedraw();
Sleep(1000);
//--- cambia la grandezza dell'etichetta rettangolo
int steps=(int)MathMin(x_distance/4,y_distance/4);
for(int i=0;i<steps;i++)
{
//--- resize
width+=1;
height+=1;
if(!RectLabelChangeSize(0,InpName,width,height))
return;
//--- controlla se l'operazione dello script è stata disabilitata per forza
if(IsStopped())
return;
//--- ridisegna il chart ed attende 0.01 secondi
ChartRedraw();
Sleep(10);
}
//--- 1 secondo di ritardo
Sleep(1000);
//--- cambia il tipo di bordo
if(!RectLabelChangeBorderType(0,InpName,BORDER_RAISED))
return;
//--- redisegna il chart ed attende per 1 secondo
ChartRedraw();
Sleep(1000);
//--- cambia il tipo di bordo
if(!RectLabelChangeBorderType(0,InpName,BORDER_SUNKEN))
return;
//--- redisegna il chart ed attende per 1 secondo
ChartRedraw();
Sleep(1000);
//--- elimina l'etichetta
RectLabelDelete(0,InpName);
ChartRedraw();
//--- aspetta per 1 secondo
Sleep(1000);
//---
}
|