//--- descripción #property description "El script crea el objeto \"Etiqueta gráfica\"." //--- mostramos la ventana de los parámetros de entrada durante el arranque del script #property script_show_inputs //--- los parámetros de entrada del script input string InpName="BmpLabel"; // Nombre de la etiqueta input string InpFileOn="\\Images\\dollar.bmp"; // Nombre del archivo para el modo On input string InpFileOff="\\Images\\euro.bmp"; // Nombre del archivo para el modo Off input bool InpState=false; // Etiqueta pulsada/no pulsada input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Esquina del gráfico para el enlace input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER; // Modo del enlace input color InpColor=clrRed; // Color del borde durante la selección input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Estilo de la línea durante la selección input int InpPointWidth=1; // Tamaño del punto para los movimientos input bool InpBack=false; // Objeto al fondo input bool InpSelection=false; // Seleccionar para mover input bool InpHidden=true; // Ocultar en la lista de objetos input long InpZOrder=0; // Prioridad para el clic del ratón //+------------------------------------------------------------------+ //| Crea el objeto "Etiqueta gráfica" | //+------------------------------------------------------------------+ bool BitmapLabelCreate(const long chart_ID=0, // ID del gráfico const string name="BmpLabel", // nombre de la etiqueta const int sub_window=0, // número de subventana const int x=0, // coordenada por el eje X const int y=0, // coordenada por el eje Y const string file_on="", // imagen en el modo On const string file_off="", // imagen en el modo Off const int width=0, // coordenada X de la zona de visibilidad const int height=0, // coordenada Y de la zona de visibilidad const int x_offset=10, // desplazamiento de la zona de visibilidad por X const int y_offset=10, // desplazamiento de la zona de visibilidad por Y const bool state=false, // pulsada/no pulsada const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // esquina del gráfico para el enlace const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // modo de enlace const color clr=clrRed, // color del borde durante la selección const ENUM_LINE_STYLE style=STYLE_SOLID, // estilo de la línea durante la selección const int point_width=1, // tamaño del punto de desplazamiento const bool back=false, // al fondo const bool selection=false, // seleccionar para mover const bool hidden=true, // ocultar en la lista de objetos const long z_order=0) //prioridad para el clic del ratón { //--- anulamos el valor del error ResetLastError(); //--- creamos la etiqueta gráfica if(!ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0)) { Print(__FUNCTION__, ": ¡Fallo al crear el objeto \"Etiqueta gráfica\"! Código del error = ",GetLastError()); return(false); } //--- ponemos las imágenes para los modos On y Off if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on)) { Print(__FUNCTION__, ": ¡Fallo al cargar la imagen para el modo On! Código del error = ",GetLastError()); return(false); } if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off)) { Print(__FUNCTION__, ": ¡Fallo al cargar la imagen para el modo Off! Código del error = ",GetLastError()); return(false); } //--- establecemos las coordenadas de la etiqueta ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); //--- establecemos la zona de visibilidad de la imagen; si los valores del ancho o del alto //--- superan los valores del ancho o del alto (respectivamente) de la imagen original, //--- no se dibuja; si los valores del ancho o del alto son inferiores a las dimensiones de la imagen, //--- se dibuja la parte que corresponde a estas dimensiones ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); //--- establecemos la parte de la imagen que debe mostrarse en la zona de visibilidad //--- por defecto se trata de la zona superior izquierda de la imagen; los valores permiten //--- hacer el desplazamiento de esta esquina y mostrar otra parte de la imagen ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset); ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset); //--- definimos en qué estado se encuentra la etiqueta (pulsada o no pulsada) ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); //--- establecemos la esquina del gráfico respecto a la cual van a determinarse las coordenadas del punto ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); //--- establecemos el modo de anclaje ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); //--- establecemos el color del contorno durante el modo de selección del objeto activado ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- establecemos el estilo del contorno durante el modo de selección del objeto activado ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- establecemos el tamaño del punto de enlace con el que se puede mover el objeto ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width); //--- mostramos en el primer plano (false) o al fondo (true) ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- activar (true) o desactivar (false) el modo de desplazamiento de la etiqueta con ratón ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- ocultamos (true) o mostramos (false) el nombre del objeto gráfico en la lista de objetos ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- establecemos la prioridad para obtener el evento de cliquear sobre el gráfico ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- ejecución con éxito return(true); } //+------------------------------------------------------------------+ //| Pone nueva imagen para el objeto "Etiqueta gráfica" | //+------------------------------------------------------------------+ bool BitmapLabelSetImage(const long chart_ID=0, // ID del gráfico const string name="BmpLabel", // nombre de la etiqueta const int on_off=0, // modificador (On u Off) const string file="") // ruta hacia el archivo { //--- anulamos el valor del error ResetLastError(); //--- establecemos la ruta hacia el archivo con la imagen if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,on_off,file)) { Print(__FUNCTION__, ": ¡Fallo al cargar la imagen! Código del error = ",GetLastError()); return(false); } //--- ejecución con éxito return(true); } //+------------------------------------------------------------------+ //| Mueve el objeto "Etiqueta gráfica" | //+------------------------------------------------------------------+ bool BitmapLabelMove(const long chart_ID=0, // ID del gráfico const string name="BmpLabel", // nombre de la etiqueta const int x=0, // coordenada por el eje X const int y=0) // coordenada por el eje Y { //--- anulamos el valor del error ResetLastError(); //--- movemos el objeto if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x)) { Print(__FUNCTION__, ": ¡Fallo al mover la coordenada X del objeto! Código del error = ",GetLastError()); return(false); } if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y)) { Print(__FUNCTION__, ": ¡Fallo al mover la coordenada X del objeto! Código del error = ",GetLastError()); return(false); } //--- ejecución con éxito return(true); } //+------------------------------------------------------------------+ //| Cambia el tamaño de la zona de visibilidad (tamaño del objeto) | //+------------------------------------------------------------------+ bool BitmapLabelChangeSize(const long chart_ID=0, // ID del gráfico const string name="BmpLabel", // nombre de la etiqueta const int width=0, // ancho de la etiqueta const int height=0) // alto de la etiqueta { //--- anulamos el valor del error ResetLastError(); //--- cambiamos las dimensiones del objeto if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width)) { Print(__FUNCTION__, ": ¡Fallo al cambiar el ancho del objeto! Código del error = ",GetLastError()); return(false); } if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height)) { Print(__FUNCTION__, ": ¡Fallo al cambiar el alto del objeto! Código del error = ",GetLastError()); return(false); } //--- ejecución con éxito return(true); } //+------------------------------------------------------------------+ //| Cambia la coordenada de la esquina superior izquierda de la zona de visibilidad | //+------------------------------------------------------------------+ bool BitmapLabelMoveVisibleArea(const long chart_ID=0, // ID del gráfico const string name="BmpLabel", // nombre de la etiqueta const int x_offset=0, // coordenada X de la zona de visibilidad const int y_offset=0) // coordenada Y de la zona de visibilidad { //--- anulamos el valor del error ResetLastError(); //--- cambiamos las coordenadas de la zona de visibilidad del objeto if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset)) { Print(__FUNCTION__, ": ¡Fallo al cambiar la coordenada X de la zona de visibilidad! Código del error = ",GetLastError()); return(false); } if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset)) { Print(__FUNCTION__, ": ¡Fallo al cambiar la coordenada Y de la zona de visibilidad! Código del error = ",GetLastError()); return(false); } //--- ejecución con éxito return(true); } //+------------------------------------------------------------------+ //| Elimina el objeto "Etiqueta gráfica" | //+------------------------------------------------------------------+ bool BitmapLabelDelete(const long chart_ID=0, // ID del gráfico const string name="BmpLabel") // nombre de la etiqueta { //--- anulamos el valor del error ResetLastError(); //--- eliminamos la etiqueta if(!ObjectDelete(chart_ID,name)) { Print(__FUNCTION__, ": ¡Fallo al eliminar el objeto \"Etiqueta gráfica\"! Código del error = ",GetLastError()); return(false); } //--- ejecución con éxito return(true); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- tamaño de la ventana del gráfico long x_distance; long y_distance; //--- definimos las dimensiones de la ventana if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance)) { Print("¡Fallo al obtener el ancho del gráfico! Código del error = ",GetLastError()); return; } if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance)) { Print("¡Fallo al obtener el alto del gráfico! Código del error = ",GetLastError()); return; } //--- definimos las coordenadas de la etiqueta gráfica int x=(int)x_distance/2; int y=(int)y_distance/2; //--- establecemos las dimensiones de la etiqueta y las coordenadas de la zona de visibilidad int width=32; int height=32; int x_offset=0; int y_offset=0; //--- colocamos la etiqueta gráfica en el centro de la ventana if(!BitmapLabelCreate(0,InpName,0,x,y,InpFileOn,InpFileOff,width,height,x_offset,y_offset,InpState, InpCorner,InpAnchor,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder)) { return; } //--- redibujamos el gráfico y esperamos 1 segundo ChartRedraw(); Sleep(1000); //--- cambiamos el tamaño de la zona de visibilidad de la etiqueta en el ciclo for(int i=0;i<6;i++) { //--- cambiamos el tamaño de la zona de visibilidad width--; height--; if(!BitmapLabelChangeSize(0,InpName,width,height)) return; //--- comprobamos si el trabajo del script ha sido finalizado forzosamente if(IsStopped()) return; //--- redibujamos el gráfico ChartRedraw(); // retardo de 0,3 segundo Sleep(300); } //--- retardo de 1 segundo Sleep(1000); //--- cambiamos las coordenadas de la zona de visibilidad de la etiqueta en el ciclo for(int i=0;i<2;i++) { //--- cambiamos las coordenadas de la zona de visibilidad x_offset++; y_offset++; if(!BitmapLabelMoveVisibleArea(0,InpName,x_offset,y_offset)) return; //--- comprobamos si el trabajo del script ha sido finalizado forzosamente if(IsStopped()) return; //--- redibujamos el gráfico ChartRedraw(); // retardo de 0,3 segundo Sleep(300); } //--- retardo de 1 segundo Sleep(1000); //--- eliminamos la etiqueta BitmapLabelDelete(0,InpName); ChartRedraw(); //--- retardo de 1 segundo Sleep(1000); //--- } |