¿Es posible imprimir texto en varias líneas en un objeto OBJ_TEXT? - página 5

 
Nikolai Semko:

Hay otro problema aquí.
Si no tienes acceso al código que generó el kanvas, entonces tampoco tienes acceso al recurso de ese kanvas. Puede ver la lista de objetos de mapa de bits, pero no la lista de recursos. Si no se conoce el nombre del recurso, sólo se puede averiguar por coincidencia o por fuerza bruta, lo que no tiene ninguna utilidad práctica.
¿Cómo se consigue una serie de puntos de reconocimiento? Aunque sólo sea a través de una captura de pantalla, que también es una tontería.
¿O me equivoco?

El código es, por supuesto, mío, lo que significa que es de código abierto. Sólo pensé que si hay una fecha en la pantalla, por qué guardarla en algún lugar si se puede obtener ... Siempre y cuando lo consigas. Ja, ja, ja, "bellamente" dicho.

Bueno, algo así como que puedes obtener una cadena de un campo de texto y sacar parte de la cadena de ahí. Pero, por desgracia, no, no.

 
Andrey Barinov:

La propiedad bitmap tiene una ruta de acceso al recurso. No sé si se puede conseguir mediante programación.


Exactamente. Al fin y al cabo, la cuestión no era obtenerla de una imagen, sino de un recurso. Y entonces yo mismo perdí lo que buscaba. Experimentaré y veré qué propiedades puedo conseguir.


No me funciona...

  string resource = "\\Scripts\\Test\\Canvas\\00.ex5::aaa";     // получили путь к ресурсу созданному другим скриптом

//  if(ObjectGetString(0, "aaa", OBJPROP_BMPFILE, 0, resource))
  if(ObjectSetString(0, "aaa", OBJPROP_BMPFILE, 0, resource))   // работает любая строка, хоть эта, хоть закомментированная выше
   {
    Print(ObjectGetString(0, "aaa", OBJPROP_NAME));             // имя есть
    Print(ObjectGetString(0, "aaa", OBJPROP_BMPFILE));          // путь к ресурсу есть
    Print(ObjectGetString(0, "aaa", OBJPROP_TEXT));             // текста нету.....
    Print(ObjectGetInteger(0, "aaa", OBJPROP_XDISTANCE));       // это значение тоже есть
   }

Y cómo conseguir un array no lo encuentro. ¿Es posible?

 
Alexey Viktorov:

Exactamente. Al fin y al cabo, la cuestión no era obtener de una imagen, sino de un recurso. Y entonces yo mismo perdí lo que buscaba. Voy a experimentar y ver qué propiedades puedo conseguir.


No me funciona...

Y no encuentro cómo obtener un array. ¿Es posible?

Creo que ResourceReadImage() o algo así debería ayudar

 
Alexey Viktorov:

El código es, por supuesto, mío, así que está abierto. Sólo pensé que si hay una fecha en la pantalla, por qué guardarla en algún lugar cuando puedes obtener ... Siempre que puedas conseguirlo. Ja, ja, ja, muy bonito.

Bueno, algo así como que puedes obtener una cadena de un cuadro de texto y sacar parte de la cadena. Pero, por desgracia, no es así.

Realmente eres algo :))
Una maleta de pilas para un reloj científico no es realmente la mejor solución, aunque sea creativa.
 
Andrey Barinov:
Creo que ResourceReadImage() o algo así debería ayudar

Lo he encontrado, pero no me ha funcionado nada. He intentado convertir un array en una cadena, pero los tipos de array no coinciden. No importa cómo lo retuerza, no funciona. Quizá esté haciendo algo mal, pero todavía no hay ideas nuevas.

 
Alexey Viktorov:

Lo he encontrado, pero no me ha funcionado nada. He intentado convertir un array en una cadena, pero los tipos de array no coinciden. No importa cómo lo gire, simplemente no funcionará. Quizá esté haciendo algo mal, pero todavía no hay ideas nuevas.

¿Cómo traduzco los datos de color de los píxeles a una cadena? Y lo más importante, ¿por qué?
Se obtiene una imagen de mapa de bits y luego se puede intentar reconocerla, pero eso es una ciencia aparte :)
 
Nikolai Semko:
Realmente eres algo :)))
Una maleta llena de pilas para un reloj científico no es realmente la mejor solución, aunque es creativa.

Nikolai, pero no es una solución necesariamente aplicable. Al fin y al cabo, sus dibujos animados son de la misma serie, bonitos, pero sin posibilidad de aplicación en el comercio.

 
Andrey Barinov:
¿Cómo se traducen los datos de color de los píxeles a una cadena? Y lo más importante, ¿por qué?
Se obtiene una imagen de mapa de bits y luego se puede intentar reconocerla, pero eso es una ciencia aparte :)

Ah, bueno, eso es... No lo sé).

En general, probablemente renuncie a la idea. Probablemente se salga de lo normal.

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Características del lenguaje mql5, sutilezas y trucos

fxsaber, 2017.10.31 08:11

// Сохранение Bitmap-объекта в bmp/gif/png-файле (прозрачность не учитывается)
bool BitmapObjectToFile( const long chartID, const string ObjName, const string FileName, const bool FullImage = false )
{  
  const ENUM_OBJECT Type = (ENUM_OBJECT)ObjectGetInteger(chartID, ObjName, OBJPROP_TYPE);  
  bool Res = (Type == OBJ_BITMAP_LABEL) || (Type == OBJ_BITMAP);
             
  if (Res)
  {
    const string Name = __FUNCTION__ + (string)MathRand();

    ObjectCreate(chartID, Name, OBJ_CHART, 0, 0, 0);
    ObjectSetInteger(chartID, Name, OBJPROP_XDISTANCE, -1 e3);
    
    const long chart = ObjectGetInteger(chartID, Name, OBJPROP_CHART_ID);
        
    Res = ChartSetInteger(chart, CHART_SHOW, false) && ObjectCreate(chart, Name, OBJ_BITMAP_LABEL, 0, 0, 0) &&
          ObjectSetString(chart, Name, OBJPROP_BMPFILE, ObjectGetString(chartID, ObjName, OBJPROP_BMPFILE)) &&
          (FullImage || (ObjectSetInteger(chart, Name, OBJPROP_XSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_XSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YSIZE, ObjectGetInteger(chartID, ObjName, OBJPROP_YSIZE)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_XOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_XOFFSET)) &&
                         ObjectSetInteger(chart, Name, OBJPROP_YOFFSET, ObjectGetInteger(chartID, ObjName, OBJPROP_YOFFSET)))) &&
                         ChartScreenShot(chart, FileName, (int)ObjectGetInteger(chart, Name, OBJPROP_XSIZE),
                                                          (int)ObjectGetInteger(chart, Name, OBJPROP_YSIZE));
    ObjectDelete(chartID, Name);
  }                    

  return(Res);
}


Aplicación

// Сохраняет в png-файлах все Bitmap-объекты текущего чарта
void OnStart()
{  
  for (int i = ObjectsTotal(0) - 1; i >= 0; i--)
  {
    const string Name = ObjectName(0, i);
    
    BitmapObjectToFile(0, Name, (string)ChartID() + "\\" + Name + ".png");    
  }      
}


SZY También se ha implementado el convertidor de archivos BMP->GIF/PNG.

 
Alexey Viktorov:

Nueva pregunta: ¿Puedo leer el texto de un recurso en un lienzo?

Por ejemplo estas líneas, o cualquiera de ellas.

Propósito: Con el kanvas hay una línea que contiene una fecha. Esta es la fecha que quieres leer.

O utilice uno de los viejos métodos probados, GV, archivo, gráfico u otra cosa.

Puedes leer datos de un recurso usando ResourceReadImage, pero para hacerlo necesitas escribirlo allí usando ResourceCreate. La función ResourceCreate sólo acepta un array de datos uint y si queremos escribir un array de otro tipo de datos, tenemos que usar union. Declara varias matrices de diferentes tipos en él. Después de eso, podemos almacenar cualquier dato en el recurso, incluyendo cadenas. Para convertir la cadena en tipo char utilice StringToCharArray y viceversa utilice CharArrayToString. Por lo tanto, no se trata del kanvas en absoluto, sino del recurso en el que se puede escribir cualquier tipo de datos con la ayuda de las uniones.