//--- description
#property description "Le script dessine un objet graphique \"Etiquette\"."
//--- 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="Label"; // Nom de l'étiquette
input int InpX=150; // distance de l'axe X
input int InpY=150; // distance de l'axe Y
input string InpFont="Arial"; // Police de caractères
input int InpFontSize=14; // Taille de la police de caractères
input color InpColor=clrRed; // Couleur
input double InpAngle=0.0; // Angle de la pente en degrés
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER; // type d'ancrage
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ée une étiquette |
//+----------------------------------------------------------------------------------------------------+
bool LabelCreate(const long chart_ID=0, // identifiant du graphique
const string name="Label", // 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 ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // coin d'ancrage du graphique
const string text="Label", // texte
const string font="Arial", // police de caractères
const int font_size=10, // taille de la police de caractères
const color clr=clrRed, // couleur
const double angle=0.0, // pente du texte
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // type d'ancrage
const bool back=false, // en arrière-plan
const bool selection=false, // mise en surbrillance pour déplacerhighlight to move
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 une étiquette
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": impossible de créer l'étiquette ! 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 le coin du graphique, relativement auquel les coordonnées du point sont définies
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- définit le texte
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- définit la police de caractères du texte
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- définit la taille de la police de caractères
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- définit l'angle de pente du texte
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- définit le type d'ancrage
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- définit la couleur
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- 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 |
//+----------------------------------------------------------------------------------------------------+
bool LabelMove(const long chart_ID=0, // identifiant du graphique
const string name="Label", // 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
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);
}
//+----------------------------------------------------------------------------------------------------+
//| Change le coin du graphique pour lier l'étiquette |
//+----------------------------------------------------------------------------------------------------+
bool LabelChangeCorner(const long chart_ID=0, // identifiant du graphique
const string name="Label", // nom de l'étiquette
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER) // coin d'ancrage du graphique
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- modifie le coin d'ancrage
if(!ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner))
{
Print(__FUNCTION__,
": impossible de modifier le coin d'ancrage ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Modifie le texte de l'étiquette texte |
//+----------------------------------------------------------------------------------------------------+
bool LabelTextChange(const long chart_ID=0, // identifiant du graphique
const string name="Label", // nom de l'objet
const string text="Text") // texte
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- modifie le texte de l'objet
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
" : impossible de modifier le texte ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Supprime l'étiquette |
//+----------------------------------------------------------------------------------------------------+
bool LabelDelete(const long chart_ID=0, // identifiant du graphique
const string name="Label") // 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 ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Fonction de démarrage du script |
//+----------------------------------------------------------------------------------------------------+
void OnStart()
{
//--- stocke les coordonnées de l'étiquette dans les variables locales
int x=InpX;
int y=InpY;
//--- 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;
}
//--- vérifie l'exactitude des paramètres d'entrée
if(InpX<0 || InpX>x_distance-1 || InpY<0 || InpY>y_distance-1)
{
Print("Erreur ! Valeurs incorrectes des paramètres d'entrée !");
return;
}
//--- prépare le texte initial de l'étiquette
string text;
StringConcatenate(text,"Coin supérieur gauche : ",x,",",y);
//--- crée l'étiquette texte sur le graphique
if(!LabelCreate(0,InpName,0,InpX,InpY,CORNER_LEFT_UPPER,text,InpFont,InpFontSize,
InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redessine le graphique et attend 1 demie seconde
ChartRedraw();
Sleep(500);
//--- déplace l'étiquette et change son texte simultanément
//--- nombre d'itérations par axes
int h_steps=(int)(x_distance/2-InpX);
int v_steps=(int)(y_distance/2-InpY);
//--- déplace l'étiquette vers le bas
for(int i=0;i<v_steps;i++)
{
//--- modifie la coordonnée
y+=2;
//--- déplace l'étiquette et modifie son texte
MoveAndTextChange(x,y,"Coin supérieur gauche : ");
}
//--- délai d'une demie seconde
Sleep(500);
//--- déplace l'étiquette à droite
for(int i=0;i<h_steps;i++)
{
//--- modifie la coordonnée
x+=2;
//--- déplace l'étiquette et modifie son texte
MoveAndTextChange(x,y,"Coin supérieur gauche : ");
}
//--- délai d'une demie seconde
Sleep(500);
//--- déplace l'étiquette vers le haut
for(int i=0;i<v_steps;i++)
{
//--- modifie la coordonnée
y-=2;
//--- déplace l'étiquette et modifie son texte
MoveAndTextChange(x,y,"Coin supérieur gauche : ");
}
//--- délai d'une demie seconde
Sleep(500);
//--- déplace l'étiquette vers la gauche
for(int i=0;i<h_steps;i++)
{
//--- modifie la coordonnée
x-=2;
//--- déplace l'étiquette et modifie son texte
MoveAndTextChange(x,y,"Coin supérieur gauche : ");
}
//--- délai d'une demie seconde
Sleep(500);
//--- déplace maintenant le point en changeant le coin d'ancrage
//--- le déplace vers le coin inférieur gauche
if(!LabelChangeCorner(0,InpName,CORNER_LEFT_LOWER))
return;
//--- modifie l'étiquette texte
StringConcatenate(text,"Coin inférieur gauche : ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redessine le graphique et attend 2 secondes
ChartRedraw();
Sleep(2000);
//--- déplace vers le coin inférieur gauche
if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_LOWER))
return;
//--- modifie l'étiquette texte
StringConcatenate(text,"Coin inférieur gauche : ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redessine le graphique et attend 2 secondes
ChartRedraw();
Sleep(2000);
//--- déplace vers le coin supérieur droit
if(!LabelChangeCorner(0,InpName,CORNER_RIGHT_UPPER))
return;
//--- modifie l'étiquette texte
StringConcatenate(text,"Coin supérieur droit : ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redessine le graphique et attend 2 secondes
ChartRedraw();
Sleep(2000);
//--- déplace vers le coin supérieur gauche
if(!LabelChangeCorner(0,InpName,CORNER_LEFT_UPPER))
return;
//--- modifie l'étiquette texte
StringConcatenate(text,"Coin supérieur gauche : ",x,",",y);
if(!LabelTextChange(0,InpName,text))
return;
//--- redessine le graphique et attend 2 secondes
ChartRedraw();
Sleep(2000);
//--- supprime l'étiquette
LabelDelete(0,InpName);
//--- redessine le graphique et attend 1 demie seconde
ChartRedraw();
Sleep(500);
//---
}
//+----------------------------------------------------------------------------------------------------+
//| La fonction déplace l'objet et modifie son texte |
//+----------------------------------------------------------------------------------------------------+
bool MoveAndTextChange(const int x,const int y,string text)
{
//--- déplace l'étiquette
if(!LabelMove(0,InpName,x,y))
return(false);
//--- modifie l'étiquette texte
StringConcatenate(text,text,x,",",y);
if(!LabelTextChange(0,InpName,text))
return(false);
//--- vérifie si l'exécution du script a été stoppée
if(IsStopped())
return(false);
//--- redessine le graphique
ChartRedraw();
// délai de 0.01 seconde
Sleep(10);
//--- sort de la fonction
return(true);
}
|