¿Tienes una solución para este problema en un indicador, sin ticks?
Y ya lo he dicho antes. Es extraño que se pueda obtener el texto en sí sin renderizar pero no el tamaño.
¿Qué tienen que ver las garrapatas? El gráfico se dibuja sin ticks.
El tamaño de la etiqueta de texto se averigua a partir del contexto de visualización utilizando la función GetTextExtent de win api. El contexto de la pantalla ofrece esta información teniendo en cuenta la resolución de la pantalla y el tamaño de la fuente seleccionada.
Cuando se crea un objeto por primera vez, no hay contexto de visualización. En principio, se podría crear, pero se podría llegar fácilmente a una situación en la que el tamaño calculado "artificialmente" será diferente del que se calculó realmente durante el renderizado real. Por lo tanto, hasta que el objeto se renderiza, su tamaño es desconocido.
En general, no se debe dibujar nada en los indicadores antes del primer evento de OnCalculate() - este enfoque garantizará la creación de un gráfico y el correcto trabajo con los objetos.
Aproximadamente así - en la primera garrapata que creamos, pero el siguiente SIZE:
//+------------------------------------------------------------------+//| TestIndicator1.mq4 |//| Copyright 2015, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2015, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property indicator_chart_windowstring name="probe";
bool first_tick=false; // false - ещё не было тиков//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mapping//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---staticint count;
if(count>3)
return(rates_total); // после трёх Алертов выходим. Не за чем слух портить.if(!first_tick)
{
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
ObjectSetString(0,name,OBJPROP_TEXT,name);
first_tick=true;
}
else
{
string text=ObjectGetString(0,name,OBJPROP_TEXT);
int text_sizeX=int(ObjectGetInteger(0,name,OBJPROP_XSIZE));
Alert(text," ",text_sizeX);
}
count++;
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//| Deinit |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
ObjectDelete(name);
EventKillTimer();
}
//+------------------------------------------------------------------+
En general, no se debe dibujar nada en los indicadores antes del primer evento de OnCalculate() - este enfoque garantizará la creación de un gráfico y el correcto trabajo con los objetos.
Aproximadamente así - en el primer tic creamos, y en el siguiente SIZE:
De acuerdo. Simularé un par de garrapatas el fin de semana.
¿Tienes una solución para este problema en un indicador, sin ticks?
Y ya lo he dicho antes. Es extraño que se pueda obtener el texto en sí sin renderizar pero no el tamaño.
¿Qué tienen que ver las garrapatas? El gráfico se dibuja sin ticks.
El tamaño de la etiqueta de texto se averigua a partir del contexto de visualización utilizando la función GetTextExtent de win api. El contexto de la pantalla ofrece esta información teniendo en cuenta la resolución de la pantalla y el tamaño de la fuente seleccionada.
Cuando se crea un objeto por primera vez, no hay contexto de visualización. En principio, se podría crear, pero se podría llegar fácilmente a una situación en la que el tamaño calculado "artificialmente" será diferente del que se calculó realmente durante el renderizado real. Por lo tanto, hasta que el objeto se renderiza, su tamaño es desconocido.
Pruebe a utilizar ChartRedraw() después de la creación, y luego compruebe el tamaño.
No funciona.
En general, no se debe dibujar nada en los indicadores antes del primer evento de OnCalculate() - este enfoque garantizará la creación de un gráfico y el correcto trabajo con los objetos.
Aproximadamente así - en la primera garrapata que creamos, pero el siguiente SIZE:
En general, no se debe dibujar nada en los indicadores antes del primer evento de OnCalculate() - este enfoque garantizará la creación de un gráfico y el correcto trabajo con los objetos.
Aproximadamente así - en el primer tic creamos, y en el siguiente SIZE:
De acuerdo. Simularé unos cuantos ticks el fin de semana.
¿Existe una función que devuelva si el objeto está renderizado?
y WindowRedraw no ayudaría a no esperar un tic?