Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 217

 
alex_xss:

Mmm, tal vez.

Eres el primero que no lo ha tenido todavía))

Pero no importa, puede surgir en cualquier persona - por lo que tiene que arreglarlo, por desgracia.

Tengo muchas, depende de la versión de MT4 (tengo una de Alpari).

Tengo un montón de ellos de diferentes versiones, estoy programando para ellos :-) pero el software sigue siendo el mismo, sólo se diferencian en pequeñas marcas y pequeños chips en los indicadores / asesores.

Los trucos de PS/color pueden ser causados por un ajuste incorrecto de DPI del monitor, la presencia de "utilidades de corrección de la temperatura del color", "extensiones de juegos de la tarjeta de vídeo". Y así sucesivamente.

PPS/por cierto ningún DC ha superado (más probablemente debido a la codicia, el dinero) propios indicadores / asesores / guiones / paquete de herramientas. A lo sumo, un salpicadero cursi con colores corporativos. Lo cual es una especie de insinuación de

 

Hola!
¿Puedes decirme por qué OBJPROP_XSIZE da 0?

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   ObjectsDeleteAll();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string mnth=(string)TimeMonth(TimeCurrent())+".";
   string dy=(string)TimeDay(TimeCurrent())+" ";
   string hr=(string)TimeHour(TimeCurrent())+":00 ";

   string TimeSig1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
   string Label1=" TEST "+Symbol()+"   "+TimeSig1+" Test:  "+mnth+dy+hr+" 1 2 3 4 5 6 7 8 9 10 11";
//string Label1="123456789"+"1"+"123456789"+"2"+"123456789"+"3"+"123456789"+"4"+"123456789"+" 5 "+"123456789";
   obj_create("Sym",Label1,50,clrWhite,15);

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void obj_create(string name,string object,int Y_distance,color Color,int size)
  {
   if(ObjectFind(name)==-1)
     {
      ObjectCreate(0,name,OBJ_LABEL,0,0,0);
      ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
      ObjectSetInteger(0,name,OBJPROP_FONTSIZE,size);
      ObjectSetString(0,name,OBJPROP_FONT,"Rockwell");
      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
      ObjectSetInteger(0,name,OBJPROP_HIDDEN,true);
      ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT);
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,10);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,Y_distance);
      ObjectSetInteger(0,name,OBJPROP_COLOR,Color);
     }
   ObjectSetString(0,name,OBJPROP_TEXT,object);

//text size
   int text_sizeX=int(ObjectGetInteger(0,name,OBJPROP_XSIZE));
   
Print(" _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ obj_create  text_sizeX: ",text_sizeX);   
  }
//+------------------------------------------------------------------+
 
Nauris Zukas:

Hola!
¿Puedes decirme por qué OBJPROP_XSIZE da 0?

OBJ_LABEL es un objeto muy específico - después de la colocación y antes de la primera actualización del gráfico, el ancho (X_SIZE) no está definido.

Depende del tipo de letra y de los ppp de la pantalla. Hasta que el renderizado no funcione del todo, no podemos decir nada sobre la anchura real.

 
Maxim Kuznetsov:

OBJ_LABEL es un objeto muy específico - después de la colocación y antes de la primera actualización del gráfico, el ancho (X_SIZE) es indefinido.

Depende del tipo de letra, de los dpi de la pantalla en general. Hasta que el renderizado no funcione del todo, no podemos decir nada sobre la anchura real.

Intenta volver a dibujarlo y luego comprueba

   ObjectSetString(0,name,OBJPROP_TEXT,object);
   ChartRedraw();
//text size
   int text_sizeX=int(ObjectGetInteger(0,name,OBJPROP_XSIZE));
 
Vitaly Muzichenko:

Prueba a redibujar y a comprobar después

Gracias, lo probaré.

No ha funcionado.
 
Maxim Kuznetsov:

OBJ_LABEL es un objeto muy específico - después de la colocación y antes de la primera actualización del gráfico, el ancho (X_SIZE) es indefinido.

Depende del tipo de letra, de los dpi de la pantalla en general. Hasta que las funciones de renderizado no funcionen completamente, no puedo decir nada sobre la anchura real.


Gracias, la idea está clara, experimentaré con algo.

 
Nauris Zukas:


Gracias, entiendo la idea, experimentaré con ella.

ChartRedraw no redibuja directamente, sólo pone un tick en algún lugar de las profundidades del terminal "el gráfico debe ser redibujado tan pronto como sea posible".

Para saber qué ancho debe tener la marca de texto, puede probar TextSetFont, TextGetSize - la diferencia significativa sólo puede aparecer en HiDPI. O quizás no :-) No lo he probado

o bien obtener la anchura del OBJ_LABEL real ya en el siguiente tick/evento del gráfico, es decir, exactamente después de repintar

 
Maxim Kuznetsov:

ChartRedraw no redibuja directamente, sólo pone un tick en algún lugar de las profundidades del terminal "el gráfico debe ser redibujado tan pronto como sea posible".

Para saber qué ancho debe tener una marca de texto, puede probar TextSetFont, TextGetSize - la diferencia significativa sólo puede aparecer en HiDPI. O quizás no :-) No lo he probado

o bien obtener la anchura del OBJ_LABEL real ya en el siguiente tick/evento del gráfico, es decir, exactamente después de la recarga

Ya lo tengo funcionando, ¡gracias! Se ha añadido OnDeinit(), se ha puesto un retardo, y luego OBJPROP_XSIZE.
P.D. No se me ocurrió nada mejor que hacer con el retraso del guión:

for(int i=100000000; i>0; i--) {} 
 
Nauris Zukas:

¡Gracias, todo salió bien! He añadido OnDeinit(), he puesto un retardo, y luego OBJPROP_XSIZE.
P.D. No se me ocurrió nada mejor que hacer con el retraso del guión:

// задержка 500 милисекунд, годная для тестера

ulong timestamp=GetTickCount64();

do {

   Sleep(500/4);  // в тестере не сработает, зато спасёт GetTickCount

} while(GetTickCount64()-timestamp<500);

 
Maxim Kuznetsov:

// задержка 500 милисекунд, годная для тестера

ulong timestamp=GetTickCount64();

do {

   Sleep(500/4);  // в тестере не сработает, зато спасёт GetTickCount

} while(GetTickCount64()-timestamp<500);

Gracias, ha funcionado.

   do{}
   while(GetTickCount()-Time11<1000);
Razón de la queja: