//--- description
#property description "Le script dessine un objet graphique \"Etiquette Rectangle\"."
//--- affichage de la fenêtre des paramètres d'entrée lors du lancement du script
#property script_show_inputs
//--- paramètres d'entrée du script
input string InpName="RectLabel"; // Nom de l'étiquette
input color InpBackColor=clrSkyBlue; // Couleur de l'arrière-plan
input ENUM_BORDER_TYPE InpBorder=BORDER_FLAT; // Type de bordure
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Coin du graphique pour l'ancrage
input color InpColor=clrDarkBlue; // Couleur de la bordure plate (Flat)
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // style de bordure plat (Flat)
input int InpLineWidth=3; // largeur de la bordure plate (Flat)
input bool InpBack=false; // Objet en arrière-plan
input bool InpSelection=true; // Mise en surbrillance pour déplacer
input bool InpHidden=true; // Caché dans la liste des objets
input long InpZOrder=0; // Priorité du clic de souris
//+----------------------------------------------------------------------------------------------------+
//| Créer une étiquette rectangle |
//+----------------------------------------------------------------------------------------------------+
bool RectLabelCreate(const long chart_ID=0, // identifiant du graphique
const string name="RectLabel", // nom de l'étiquette
const int sub_window=0, // indice de sous-fenêtre
const int x=0, // Coordonnée X
const int y=0, // Coordonnée Y
const int width=50, // largeur
const int height=18, // hauteur
const color back_clr=C'236,233,216', // couleur en arrière-plan
const ENUM_BORDER_TYPE border=BORDER_SUNKEN, // type de bordure
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // coin du graphique pour l'ancrage
const color clr=clrRed, // Couleur de la bordure plate (Flat)
const ENUM_LINE_STYLE style=STYLE_SOLID, // style de la bordure plate
const int line_width=1, // largeur de la bordure plate
const bool back=false, // en arrière-plan
const bool selection=false, // mise en surbrillance pour déplacer
const bool hidden=true, // caché dans la liste des objets
const long z_order=0) // priorité du clic de souris
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- crée l'étiquette rectangle
if(!ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
" : impossible de créer l'étiquette rectangle ! Code d'erreur = ",GetLastError());
return(false);
}
//--- définit les coordonnées de l'étiquette
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- définit la taille de l'étiquette
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- définit la couleur d'arrière-plan
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- définit le type de bordure
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- définit le coin du graphique, relativement auquel les coordonnées du point sont définies
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- définit la couleur de la bordure plate (dans le mode Plat)
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- définit le style de ligne de la bordure plate
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- définit la largeur de la bordure plate
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width);
//--- affiche en premier plan (false) ou en arrière-plan (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- active (true) ou désactive (false) le mode de déplacement de l'étiquette par la souris
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- masque (true) ou affiche (false) le nom de l'objet graphique dans la liste des objets
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- définit la priorité pour recevoir l'événement d'un clic de souris dans le graphique
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Déplace l'étiquette rectangle |
//+----------------------------------------------------------------------------------------------------+
bool RectLabelMove(const long chart_ID=0, // identifiant du graphique
const string name="RectLabel", // nom de l'étiquette
const int x=0, // coordonnée X
const int y=0) // coordonnée Y
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- déplace l'étiquette rectangle
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
" : impossible de déplacer la coordonnée X de l'étiquette ! Code d'erreur = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
" : impossible de déplacer la coordonnée Y de l'étiquette ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Modifie la taille de l'étiquette rectangle |
//+----------------------------------------------------------------------------------------------------+
bool RectLabelChangeSize(const long chart_ID=0, // identifiant du graphique
const string name="RectLabel", // nom de l'étiquette
const int width=50, // largeur de l'étiquette
const int height=18) // hauteur de l'étiquette
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- modifie la taille de l'étiquette
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
" : impossible de modifier la largeur de l'étiquette ! Code d'erreur = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
" : impossible de modifier la hauteur de l'étiquette ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Change le type de bordure de l'étiquette rectangle |
//+----------------------------------------------------------------------------------------------------+
bool RectLabelChangeBorderType(const long chart_ID=0, // identifiant du graphique
const string name="RectLabel", // nom de l'étiquette
const ENUM_BORDER_TYPE border=BORDER_SUNKEN) // type de bordure
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- modifie le type de bordure
if(!ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border))
{
Print(__FUNCTION__,
" : impossible de modifier le type de bordure ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Supprime l'étiquette rectangle |
//+----------------------------------------------------------------------------------------------------+
bool RectLabelDelete(const long chart_ID=0, // identifiant du graphique
const string name="RectLabel") // nom de l'étiquette
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- supprime l'étiquette
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
" : impossible de supprimer l'étiquette rectangle ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Fonction de démarrage du script |
//+----------------------------------------------------------------------------------------------------+
void OnStart()
{
//--- taille de la fenêtre du graphique
long x_distance;
long y_distance;
//--- définit la taille de la fenêtre
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Impossible d'obtenir la largeur du graphique ! Code d'erreur = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Impossible d'obtenir la hauteur du graphique ! Code d'erreur = ",GetLastError());
return;
}
//--- définit les coordonnées de l'étiquette rectangle
int x=(int)x_distance/4;
int y=(int)y_distance/4;
//--- définit la taille de l'étiquette
int width=(int)x_distance/4;
int height=(int)y_distance/4;
//--- crée l'étiquette rectangle
if(!RectLabelCreate(0,InpName,0,x,y,width,height,InpBackColor,InpBorder,InpCorner,
InpColor,InpStyle,InpLineWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redéssine le graphique et attend 1 seconde
ChartRedraw();
Sleep(1000);
//--- modifie la taille de l'étiquette rectangle
int steps=(int)MathMin(x_distance/4,y_distance/4);
for(int i=0;i<steps;i++)
{
//--- redimmensionnement
width+=1;
height+=1;
if(!RectLabelChangeSize(0,InpName,width,height))
return;
//--- vérifie si l'exécution du script a été stoppée
if(IsStopped())
return;
//--- redessine le graphique et attend 0.01 seconde
ChartRedraw();
Sleep(10);
}
//--- délai de 1 seconde
Sleep(1000);
//--- modifie le type de bordure
if(!RectLabelChangeBorderType(0,InpName,BORDER_RAISED))
return;
//--- redéssine le graphique et attend 1 seconde
ChartRedraw();
Sleep(1000);
//--- modifie le type de bordure
if(!RectLabelChangeBorderType(0,InpName,BORDER_SUNKEN))
return;
//--- redéssine le graphique et attend 1 seconde
ChartRedraw();
Sleep(1000);
//--- supprime l'étiquette
RectLabelDelete(0,InpName);
ChartRedraw();
//--- attente d'1 seconde
Sleep(1000);
//---
}
|