//+------------------------------------------------------------------+//| Creación de un lienzo para dibujar un elemento |//+------------------------------------------------------------------+bool CElement::CreateCanvas(conststring name,constint x,constint y,
constint x_size,constint y_size,ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_ARGB_NORMALIZE)
{
//--- Ajuste de tamañoint xsize =(x_size<1)? 50 : x_size;
int ysize =(y_size<1)? 20 : y_size;
//--- Restablecer último error
::ResetLastError();
//--- Creación de un objetoif(!m_canvas.CreateBitmapLabel(m_chart_id,m_subwin,name,x,y,xsize,ysize,clr_format))
{
::Print(__FUNCTION__,"No se ha podido crear un lienzo para dibujar el elemento ("")+m_class_name+"): ",::GetLastError());
return(false);
}
//--- Restablecer último error
::ResetLastError();
//--- Obtener un puntero a la clase baseif(!m_canvas.Attach(m_chart_id,name,clr_format))
{
::Print(__FUNCTION__,"Error al adjuntar un lienzo de dibujo al gráfico: ",::GetLastError());
return(false);
}
//--- Propiedades
::ObjectSetString(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_TOOLTIP,"\n");
::ObjectSetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_CORNER,m_corner);
::ObjectSetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_SELECTABLE,false);
//--- Todos los elementos excepto el formulario tienen mayor prioridad que el elemento principal
Z_Order((dynamic_cast<CWindow*>(&this)!=NULL)? 0 : m_main.Z_Order()+1);
//--- Coordenadas
m_canvas.X(x);
m_canvas.Y(y);
//--- Dimensiones
m_canvas.XSize(x_size);
m_canvas.YSize(y_size);
//--- Indents from the end point
m_canvas.XGap(CalculateXGap(x));
m_canvas.YGap(CalculateYGap(y));
return(true);
}
class CMouse
{
...............
//--- (1) Devuelve el número de ventana donde se encuentra el cursor, (2) el tiempo correspondiente a la coordenada X, // (3) nivel (precio) correspondiente a la coordenada Yint SubWindowNumber(void) const { return(m_subwin); }
datetimeTime(void) const { return(m_time); }
double Level(void) const { return(m_level); }
¿Se utiliza Tiempo y Nivel en algún sitio? No lo he encontrado...
¿Para qué sirve SubWindowNumber?
Lo que quiero decir es que ChartXYToTimePrice es una operación bastante costosa de realizar en cada movimiento del ratón...
Sí, y encima de CreateBitmapLabel. Los he estado mirando. Y por lo que he entendido, CreateBitmapLabel crea un recurso vacío, y Attach lee el recurso (cualquiera) y lo escribe en m_pixels. Y como escribí arriba, creamos un recurso (CreateBitmapLabel) con el nombre name, luego leemos el mismo recurso (Attach) y de nuevo escribimos lo leído en el mismo m_pixels
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Hola.
CreateBitmapLabel - crear un recurso gráfico
Attach - leer el mismo recurso y volver a escribir en el mismo recurso.
¿O he entendido algo mal?
Hola de nuevo :)
¿Se utiliza Tiempo y Nivel en algún sitio? No lo he encontrado...
¿Para qué sirve SubWindowNumber?
Lo que quiero decir es que ChartXYToTimePrice es una operación bastante costosa de realizar en cada movimiento del ratón...
Está todo en los comentarios. No hay nada que añadir.
Está todo en los comentarios. No hay nada que añadir.
Si te refieres a los comentarios en el código, todo está claro allí, pero eso no es lo que las preguntas son :)
...
Mi punto es que ChartXYToTimePrice es una operación bastante costosa de realizar en cada movimiento del ratón...
Para obtener la coordenada relativa si el GUI no está en la ventana principal.
Para obtener la coordenada relativa cuando GUI no está en la ventana principal.
Estoy más interesado en ¿por qué Attach? Por lo que entiendo, repite las acciones de CreateBitmapLabel
Así que tal vez sólo calcular cuando la interfaz gráfica de usuario no está en la ventana principal? :)
También hay variantes cuando la ventana principal GUI está en la subventana del gráfico, y los diálogos están en la ventana principal.
Me interesa más saber por qué Attach? Por lo que entiendo, repite las acciones de CreateBitmapLabel
Hay un código del método CCanvas::Attach():
Aquí está el código del método CCanvas::Attach():
Sí, y encima de CreateBitmapLabel. Los he estado mirando. Y por lo que he entendido, CreateBitmapLabel crea un recurso vacío, y Attach lee el recurso (cualquiera) y lo escribe en m_pixels. Y como escribí arriba, creamos un recurso (CreateBitmapLabel) con el nombre name, luego leemos el mismo recurso (Attach) y de nuevo escribimos lo leído en el mismo m_pixels
¿O he entendido algo mal?
PS Experimentalmente sin Attach todo funciona :)
...
PS Experimentalmente sin Attach todo funciona :)
¿En serio? Así que ha habido algunos cambios de nuevo. Algo no funcionaba antes con seguridad.
¿Y después de borrar GUI del gráfico se borran los objetos?
¿De verdad? Así que ha habido otro cambio. Algo definitivamente no estaba funcionando antes.
Y después de quitar la GUI del gráfico, ¿se borran los objetos?
Todo parece estar limpio :)