- Tipos de objetos y características de la especificación de sus coordenadas
- Objetos vinculados a tiempo y precio
- Objetos vinculados a coordenadas de pantalla
- Crear objetos
- Borrar objetos
- Encontrar objetos
- Visión general de las funciones de acceso a las propiedades de los objetos
- Propiedades principales de los objetos
- Coordenadas de tiempo y precio
- Anclar la esquina de la ventana y las coordenadas de la pantalla
- Definir el punto de anclaje en el objeto
- Gestión del estado de los objetos
- Prioridad de los objetos (orden Z)
- Ajustes de visualización de objetos: color, estilo y marco
- Ajustes de fuente
- Rotar un texto en un ángulo arbitrario
- Determinar ancho y alto del objeto
- Visibilidad de los objetos en el contexto de marcos temporales
- Asignar un código de carácter a una etiqueta
- Propiedades de los rayos para objetos con líneas rectas
- Gestionar el estado pulsado de los objetos
- Ajustar imágenes en objetos bitmap
- Recortar (dar salida a parte) de una imagen
- Propiedades de los campos de entrada: alineación y sólo lectura
- Anchura del canal de desviación estándar
- Establecer niveles en objetos de nivel
- Propiedades adicionales de los objetos de Gann, Fibonacci y Elliot
- Objeto gráfico
- Mover objetos
- Obtener hora o precio en puntos de línea especificados
Definir el punto de anclaje en un objeto
Algunos tipos de objetos permiten seleccionar un punto de anclaje. Los tipos que entran en esta categoría incluyen la etiqueta de texto (OBJ_TEXT) y la imagen de mapa de bits (OBJ_BITMAP) vinculadas a cotizaciones, así como la leyenda (OBJ_LABEL) y el panel con imagen (OBJ_BITMAP_LABEL), posicionados en coordenadas de pantalla.
Para leer y establecer el punto de anclaje, utilice las funciones ObjectGetInteger y ObjectSetInteger con la propiedad OBJPROP_ANCHOR.
Todas las opciones de selección de puntos se recogen en la enumeración ENUM_ANCHOR_POINT.
Identificador |
Localización del punto de anclaje |
---|---|
ANCHOR_LEFT_UPPER |
En la esquina superior izquierda |
ANCHOR_LEFT |
Centro izquierda |
ANCHOR_LEFT_LOWER |
En la esquina inferior izquierda |
ANCHOR_LOWER |
Centro inferior |
ANCHOR_RIGHT_LOWER |
En la esquina inferior derecha |
ANCHOR_RIGHT |
Centro derecha |
ANCHOR_RIGHT_UPPER |
En la esquina superior derecha |
ANCHOR_UPPER |
Centro superior |
ANCHOR_CENTER |
Estrictamente en el centro del objeto |
Los puntos se muestran claramente en la imagen siguiente, donde se aplican varios objetos de etiqueta al gráfico.
Objetos de texto OBJ_LABEL con diferentes puntos de anclaje
El grupo superior de cuatro etiquetas tiene el mismo par de coordenadas (X,Y); sin embargo, debido al anclaje en diferentes esquinas del objeto, están situadas en diferentes lados del punto. Una situación similar se da en el segundo grupo de cuatro etiquetas de texto; sin embargo, allí el anclaje se realiza en los puntos medios de diferentes lados de los objetos. Por último, la leyenda se muestra por separado en la parte inferior, anclada en su centro, de modo que el punto quede dentro del objeto.
El botón (OBJ_BUTTON), el panel rectangular (OBJ_RECTANGLE_LABEL), el campo de entrada (OBJ_EDIT) y el objeto gráfico (OBJ_CHART) tienen un punto de anclaje fijo en la esquina superior izquierda (ANCHOR_LEFT_UPPER).
Algunos objetos gráficos del grupo de marcas de precio simples (OBJ_ARROW, OBJ_ARROW_THUMB_UP, OBJ_ARROW_THUMB_DOWN, OBJ_ARROW_UP, OBJ_ARROW_DOWN, OBJ_ARROW_STOP, OBJ_ARROW_CHECK) tienen dos formas de anclar sus coordenadas, especificadas por identificadores de otra enumeración ENUM_ARROW_ANCH OR.
Identificador |
Localización del punto de anclaje |
---|---|
ANCHOR_TOP |
Centro superior |
ANCHOR_BOTTOM |
Centro inferior |
El resto de los objetos de este grupo tienen puntos de anclaje predefinidos: las flechas de compra (OBJ_ARROW_BUY) y venta (OBJ_ARROW_SELL) están en el centro de los lados superior e inferior, respectivamente, y las etiquetas de precio (OBJ_ARROW_PRICE_RIGHT, OBJ_ARROW_LEFT_PRICE) están a izquierda y derecha.
De forma similar al script ObjectCornerLabel.mq5 de la sección anterior, vamos a crear el script ObjectAnchorLabel.mq5. En la nueva versión, además de mover la inscripción, cambiaremos aleatoriamente el punto de anclaje de la misma.
La esquina de la ventana para el anclaje será seleccionada, como antes, por el usuario al lanzar el script.
input ENUM_BASE_CORNER Corner = CORNER_LEFT_UPPER; |
Mostraremos el nombre del ángulo en el gráfico como comentario.
void OnStart()
|
En un bucle infinito se genera uno de los 9 posibles valores del punto de anclaje en los momentos seleccionados.
ENUM_ANCHOR_POINT anchor = 0;
|
El nombre del punto de anclaje se convierte en el contenido del texto de la etiqueta, junto con las coordenadas actuales.
ObjectSetString(0, name, OBJPROP_TEXT, EnumToString(anchor)
|
El resto de los fragmentos de código se ha mantenido prácticamente sin cambios.
Tras compilar y ejecutar el script, observe cómo la inscripción cambia su posición respecto a las coordenadas actuales (x, y) en función del punto de anclaje seleccionado.
Por ahora, controlamos e impedimos que el propio punto de anclaje salga de la ventana. No obstante, el objeto tiene algunas dimensiones, por lo que puede resultar que la mayor parte de la inscripción esté cortada. En el futuro, tras estudiar las propiedades pertinentes, nos ocuparemos de este problema (véase el ejemplo ObjectSizeLabel.mq5 en la sección sobre Determinar ancho y alto del objeto).