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

 
Реter Konow:
Por supuesto.

También quiero desconcertarte con algo que me desconcertó a mí)). ¿Es posible pasar varias líneas individuales en un recurso, de modo que se pueda leer sólo la línea seleccionada de él mientras se lee el recurso?

Para una imagen se pueden crear unas líneas a través de TextOut() pero los intentos de leer dicho recurso no tienen éxito. Sólo se puede leer la primera línea.

 
Alexey Viktorov:

También quiero desconcertarte con algo que me desconcertó a mí)). ¿Existe la posibilidad de pasar algunas líneas separadas en un recurso, de modo que sea posible leer sólo la línea seleccionada de él?

Para una imagen se pueden crear unas líneas a través de TextOut(), pero los intentos de leer este recurso han fallado. Sólo se puede leer la primera línea.

No tiene sentido intentar guardar o leer el texto de una imagen. Utiliza el recurso para escribir cadenas como he descrito anteriormente, y luego extrae de nuevo utilizando CharArrayToString. A continuación, divide la cadena por un delimitador y encuentra el correcto entre ellos. (Por lo tanto, antes de guardar la cadena, divídela en subcadenas por algún símbolo).
 
Реter Konow:
No tiene sentido intentar guardar o leer el texto de una imagen. Utilice el recurso para escribir cadenas como he descrito anteriormente y luego extraer de nuevo utilizando CharArrayToString. A continuación, divide la cadena por un delimitador y encuentra el correcto entre ellos. (Por lo tanto, antes de guardar la cadena, divídela en subcadenas por algún símbolo).

No tenía ningún deseo de leer de una imagen. Sólo he mencionado la imagen como ejemplo de unas pocas líneas de escritura.

Sacar una subcadena es muy fácil. No buscamos caminos fáciles :))) Gracias por la ayuda.

 
Alexey Viktorov:

No tenía ningún deseo de leer de una imagen. Sólo he mencionado la imagen como ejemplo de unas pocas líneas de escritura.

Sacar una subcadena, es muy fácil. No buscamos caminos fáciles). Gracias por la ayuda.

No es demasiado difícil extraer una subcadena si ya sabes cómo guardar los datos en un recurso y extraerlos. Esta es una tarea sencilla en sí misma. Intente guardar la cadena en un recurso primero y luego extraerla de allí. A continuación, añada una función para dividir la cadena en subcadenas y buscar la correcta.
 
Реter Konow:
No es demasiado difícil sacar una subcadena si ya sabes cómo guardar los datos en un recurso y recuperarlos. Es una tarea sencilla en sí misma. Intenta guardar la cadena en un recurso primero y luego extraerla de allí. A continuación, añada una función para dividir la cadena en subcadenas y buscar la correcta.

Peter, gracias por tu ayuda. Aprendí a trabajar con cuerdas hace años. Y cómo guardar un recurso y leerlo, con tu ayuda, lo descubrí ayer. Me acaba de llegar un mensaje de texto frenético a la cabeza, como si debiera intentarlo... y como hacerlo el mensaje de texto se perdió en el camino, se perdió en mis pensamientos.

Estoy tratando de averiguar la diferencia entre las matrices bidimensionales y unidimensionales para crear recursos. ¿Tiene alguna novedad, alguna idea al respecto?

 
Alexey Viktorov:

Peter, gracias por tu ayuda. Aprendí a trabajar con cuerdas hace años. Y cómo guardar un recurso y leerlo, con tu ayuda, lo descubrí ayer. Acabo de recibir un mensaje de texto frenético en mi cabeza, como si debiera intentarlo... pero cómo hacerlo el mensaje de texto se perdió en el camino, se perdió en mis pensamientos.

Así que ahora estoy tratando de averiguar la diferencia entre arrays bidimensionales y unidimensionales para crear recursos. ¿Tiene usted alguna idea, algún pensamiento sobre esto?

Para ser sincero, nunca he almacenado una matriz bidimensional en un recurso. Siempre he trabajado con uno unidimensional, porque no tiene restricciones. La unidimensionalidad es mejor para guardar datos, aunque no tiene por qué serlo. Depende de qué tipo de datos y en qué formato. Utilice sólo un array unidimensional para guardar las cadenas, porque el array bidimensional no puede ser enviado a las funciones CharArrayToString y StringToCharArray. Por lo tanto, te aconsejo que desarrolles un mecanismo para almacenar cualquiera de tus datos en un array unidimensional para mayor flexibilidad. Sin embargo, se puede intentar utilizar la bidimensionalidad para los datos que no sean de tipo string. Será interesante ver lo que se consigue con él.
 

Leí algunas páginas anteriores y me di cuenta de que la tarea consistía en leer sólo una pequeña cadena del recurso. Si esta cadena tiene menos de 64 caracteres, no tiene sentido hacer un lío con las uniones y guardar los datos en el recurso. Simplemente escriba la cadena requerida en la propiedad description de OBJPROP_TEXT:

ObjectSetString(chartID,label_name,OBJPROP_TEXT, "Su cadena");

Y recuperarlo así:

string Str = ObjectGetString(chartID,label_name,OBJPROP_TEXT);


Y eso es todo).

 
Alexey Viktorov:

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Bibliotecas: TradeTransactions

fxsaber, 2018.09.20 16:23

// Пример хранения/обмена данными через Ресурсы внутри Терминала
#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166

void OnStart()
{  
  const RESOURCEDATA<int> ResourceINT("::int"); // Ресурс для обмена int-ами. const - как доказательство, что ничего не пишется в объект класса
  
  int ArrayINT[] = {1, 2, 3};
  int Num = 5;
  
  ResourceINT = ArrayINT;  // Ресурс хранит массив.
  ResourceINT += Num;      // Добавили в ресурс еще значение.
  ResourceINT += ArrayINT; // Добавили массив.
  
  int ArrayINT2[];  
  ResourceINT.Get(ArrayINT2); // Считали данные из ресурса.
  ArrayPrint(ArrayINT2);      // Вывели: 1 2 3 5 1 2 3

  ResourceINT.Free();                // Удалили данные из ресурса
  Print(ResourceINT.Get(ArrayINT2)); // Убедились, что данных нет: 0

  const RESOURCEDATA<MqlTick> ResourceTicks("::Ticks"); // Ресурс для обмена тиками. const - как доказательство, что ничего не пишется в объект класса
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    for (int i = 0; i < 3; i++)
      ResourceTicks += Tick; // Добавили в ресурс тики

  MqlTick Ticks[];
  ResourceTicks.Get(Ticks); // Считали данные из ресурса.
  ArrayPrint(Ticks);        // Вывели.
  
  // Это полное имя ресурса для обращения из другой программы
  const string NameOut = StringSubstr(MQLInfoString(MQL_PROGRAM_PATH), StringLen(TerminalInfoString(TERMINAL_PATH)) + 5) + "::Ticks";  
  Print(NameOut); // Вывели полное имя ресурса.
  
  const RESOURCEDATA<MqlTick> Resource(NameOut); // Ресурс для доступа к данным (read-only) из другой программы
  
  MqlTick TicksOut[];
  Resource.Get(TicksOut); // Считали данные из ресурса.
  ArrayPrint(TicksOut);   // Вывели.
  
  Resource.Free();   // Не получится повлиять на данные read-only-ресурса.
  Print(_LastError); // ERR_INVALID_PARAMETER - Ошибочный параметр при вызове системной функции.
}

 
Реter Konow:

Leí algunas páginas anteriores y me di cuenta de que la tarea consistía en leer sólo una pequeña cadena del recurso. Si esta cadena tiene menos de 64 caracteres, no tiene sentido hacer un lío con las uniones y guardar los datos en el recurso. Simplemente escriba la cadena requerida en la propiedad description de OBJPROP_TEXT:

ObjectSetString(chartID,label_name,OBJPROP_TEXT, "Su cadena");

Y recuperarlo así:

string Str = ObjectGetString(chartID,label_name,OBJPROP_TEXT);


Y eso es todo).

No exactamente. La tarea consistía en emitir unas pocas líneas de información. En mi opinión... es la forma en que quería que se mostrara. Una de las líneas tiene una fecha. Esta fecha no es sólo para la claridad, pero debe ser utilizado por el programa, incluso después de la reanudación. Resulta que hay que salvarla de alguna manera. Aquí es donde empecé a enredar, no buscamos salidas fáciles. Ya que una forma de guardar la fecha es utilizar un objeto gráfico, por qué no utilizar el mismo recurso. Después de reiniciar MT recurso es legible, pero después de reiniciar el equipo no ha comprobado todavía. Lo principal es que he descubierto los recursos y las unidades. Lo siguiente que supe fue que estaba recibiendo frenéticos mensajes de texto en mi cabeza. Cuando haya borrado todo, continuaré con el trabajo útil.

 
Alexey Viktorov:

La verdad es que no. La tarea consistía en emitir unas pocas líneas de información. En mi opinión... así es como quería que fuera, para mostrarlo con un lienzo. Una de las líneas tiene una fecha. Esta fecha no es sólo para la claridad, pero debe ser utilizado por el programa, incluso después de la reanudación. Resulta que hay que salvarla de alguna manera. Aquí es donde empecé a enredar, no buscamos salidas fáciles. Ya que una forma de guardar la fecha es utilizar un objeto gráfico, por qué no utilizar el mismo recurso. Después de reiniciar MT recurso es legible, pero después de reiniciar el equipo no ha comprobado todavía. Lo principal es que he descubierto los recursos y las unidades. Lo siguiente que supe fue que estaba recibiendo frenéticos mensajes de texto en mi cabeza. Una vez que haya borrado todo, continuaré con el trabajo útil.

Bien. Entonces, sigue dominando los recursos y los sindicatos. Ofrecen una forma versátil no sólo de escribir y almacenar cualquier dato rápidamente, sino también de compartir esos datos entre diferentes programas en tiempo real y sin carga en el disco.

Razón de la queja: