//--- description
#property description "Le script crée un objet \"Zone d'Edition\" object."
//--- 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="Edit"; // nom de l'objet
input string InpText="Text"; // Texte de l'objet
input string InpFont="Arial"; // Police de caractères
input int InpFontSize=14; // Taille de la police de caractères
input ENUM_ALIGN_MODE InpAlign=ALIGN_CENTER; // Type d'alignement du texte
input bool InpReadOnly=false; // Autorisation d'édition
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Coin du graphique pour l'ancrage
input color InpColor=clrBlack; // Couleur du texte
input color InpBackColor=clrWhite; // Couleur d'arrière plan
input color InpBorderColor=clrBlack; // Couleur de la bordure
input bool InpBack=false; // Objet en arrière-plan
input bool InpSelection=false; // 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 l'objet Zone d'Edition |
//+----------------------------------------------------------------------------------------------------+
bool EditCreate(const long chart_ID=0, // identifiant du graphique
const string name="Edit", // nom de l'objet
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 string text="Text", // texte
const string font="Arial", // police de caractères
const int font_size=10, // taille de la police de caractères
const ENUM_ALIGN_MODE align=ALIGN_CENTER, // type d'alignement
const bool read_only=false, // autoristation d'édition
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // coin du graphique pour l'ancrage
const color clr=clrBlack, // couleur du texte
const color back_clr=clrWhite, // Couleur d'arrière plan
const color border_clr=clrNONE, // Couleur de la bordure
const bool back=false, // en arrière plan
const bool selection=false, // mise en surbrillance pour le déplacement
const bool hidden=true, // caché dans la liste des objets
const long z_order=0) // priorité pour le clic de souris
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- crée le champ d'édition
if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
{
Print(__FUNCTION__,
" : échec de création de l'objet \"Zone d'Edition\" object! Code d'erreur = ",GetLastError());
return(false);
}
//--- définit les coordonnées de l'objet
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- définit la taille de l'objet
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- 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 le type d'alignement du texte dans l'objet
ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
//--- active (true) ou annule (false) le mode lecture-seule
ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
//--- définit le coin du graphique à partir duquel les coordonnées de l'objet sont définies relativement
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- définit la couleur du texte
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- définit la couleur d'arrière-plan
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- définit la couleur de la bordure
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_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'objet Zone d'Edition |
//+----------------------------------------------------------------------------------------------------+
bool EditMove(const long chart_ID=0, // identifiant du graphique
const string name="Edit", // nom de l'objet
const int x=0, // Coordonnée X
const int y=0) // Coordonnée Y
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- déplace l'objet
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
" : impossible de déplacer la coordonnée X de l'objet ! 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'objet ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Redimmensionne l'objet Zone d'Edition |
//+----------------------------------------------------------------------------------------------------+
bool EditChangeSize(const long chart_ID=0, // identifiant du graphique
const string name="Edit", // nom de l'objet
const int width=0, // largeur
const int height=0) // hauteur
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- modifie la taille de l'objet
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
" : impossible de modifier la largeur de l'objet ! Code d'erreur = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
" : impossible de modifier la heuteur de l'objet ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Change le texte de l'objet Zone d'Edition |
//+----------------------------------------------------------------------------------------------------+
bool EditTextChange(const long chart_ID=0, // identifiant du graphique
const string name="Edit", // 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);
}
//+----------------------------------------------------------------------------------------------------+
//| Retourne le texte de l'objet Zone d'Edition |
//+----------------------------------------------------------------------------------------------------+
bool EditTextGet(string &text, // texte
const long chart_ID=0, // identifiant du graphique
const string name="Edit") // nom de l'objet
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- récupère le texte de l'objet
if(!ObjectGetString(chart_ID,name,OBJPROP_TEXT,0,text))
{
Print(__FUNCTION__,
" : échec de récupération du texte ! Code d'erreur = ",GetLastError());
return(false);
}
//--- exécution réussie
return(true);
}
//+----------------------------------------------------------------------------------------------------+
//| Supprime l'objet Zone d'Edition |
//+----------------------------------------------------------------------------------------------------+
bool EditDelete(const long chart_ID=0, // identifiant du graphique
const string name="Edit") // nom de l'objet
{
//--- réinitialise la valeur d'erreur
ResetLastError();
//--- supprime l'étiquette
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
" : échec de la suppression de l'objet \"Zone d'Edition\" ! 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 le pas de changement du champ d'édition
int x_step=(int)x_distance/64;
//--- définit les coordonnées et la taille du champ d'édition
int x=(int)x_distance/8;
int y=(int)y_distance/2;
int x_size=(int)x_distance/8;
int y_size=InpFontSize*2;
//--- stocke le texte dans la variable locale
string text=InpText;
//--- crée le champ d'édition
if(!EditCreate(0,InpName,0,x,y,x_size,y_size,InpText,InpFont,InpFontSize,InpAlign,InpReadOnly,
InpCorner,InpColor,InpBackColor,InpBorderColor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- redéssine le graphique et attend 1 seconde
ChartRedraw();
Sleep(1000);
//--- étend le champ d'édition
while(x_size-x<x_distance*5/8)
{
//--- augmente la largeur du champ d'édition
x_size+=x_step;
if(!EditChangeSize(0,InpName,x_size,y_size))
return;
//--- vérifie si l'exécution du script a été stoppée
if(IsStopped())
return;
//--- redessine le graphique et attend 0.05 seconde
ChartRedraw();
Sleep(50);
}
//--- délai d'une demie seconde
Sleep(500);
//--- change le texte
for(int i=0;i<20;i++)
{
//--- ajoute "+" au début et à la fin
text="+"+text+"+";
if(!EditTextChange(0,InpName,text))
return;
//--- vérifie si l'exécution du script a été stoppée
if(IsStopped())
return;
//--- redessine le graphique et attend 0.1 seconde
ChartRedraw();
Sleep(100);
}
//--- délai d'une demie seconde
Sleep(500);
//--- supprime le champ d'édition
EditDelete(0,InpName);
ChartRedraw();
//--- attente d'1 seconde
Sleep(1000);
//---
}
|