Ist es möglich, in einem OBJ_TEXT-Objekt Text auf mehreren Zeilen auszugeben? - Seite 7

 
Реter Konow:
Ja, natürlich.

Ich möchte Sie auch mit etwas verwirren, das mich verwirrt hat.))) Ist es möglich, mehrere einzelne Zeilen in einer Ressource zu übergeben, so dass man beim Lesen der Ressource nur die ausgewählte Zeile daraus lesen kann.

Für ein Bild können mit TextOut() ein paar Zeilen erstellt werden, aber der Versuch, eine solche Ressource zu lesen, ist erfolglos. Nur die erste Zeile kann gelesen werden.

 
Alexey Viktorov:

Ich möchte Sie auch mit etwas verwirren, das mich verwirrt hat.))) Gibt es eine Möglichkeit, einige separate Zeilen in einer Ressource zu übergeben, so dass es möglich ist, nur ausgewählte Zeilen daraus zu lesen.

Für ein Bild können einige Zeilen durch TextOut() erstellt werden, aber Versuche, diese Ressource zu lesen, sind fehlgeschlagen. Nur die erste Zeile kann gelesen werden.

Es ist sinnlos, zu versuchen, Text von einem Bild zu speichern oder zu lesen. Verwenden Sie die Ressource, um Zeichenfolgen zu schreiben, wie ich oben beschrieben, dann extrahieren zurück mit CharArrayToString. Als Nächstes wird die Zeichenkette durch ein Begrenzungszeichen geteilt und das richtige unter ihnen gefunden. (Daher muss die Zeichenfolge vor dem Speichern durch ein Symbol in Teilzeichenfolgen unterteilt werden).
 
Реter Konow:
Es ist sinnlos, zu versuchen, Text von einem Bild zu speichern oder zu lesen. Verwenden Sie die Ressource, um Zeichenfolgen zu schreiben, wie ich oben beschrieben und dann extrahieren zurück mit CharArrayToString. Als Nächstes wird die Zeichenkette durch ein Trennzeichen geteilt und das richtige unter den Trennzeichen gefunden. (Daher muss die Zeichenfolge vor dem Speichern durch ein Symbol in Teilzeichenfolgen unterteilt werden).

Ich hatte keine Lust, von einem Bild zu lesen. Ich habe das Bild nur als Beispiel für ein paar Zeilen Schrift erwähnt.

Das Herausziehen einer Teilzeichenkette ist zu einfach. Wir sind nicht auf der Suche nach einfachen Wegen :))) Vielen Dank für die Hilfe.

 
Alexey Viktorov:

Ich hatte keine Lust, von einem Bild zu lesen. Ich habe das Bild nur als Beispiel für ein paar Zeilen Schrift erwähnt.

Es ist zu einfach, eine Teilzeichenkette herauszunehmen. Wir suchen nicht nach einfachen Wegen.) Vielen Dank für die Hilfe.

Es ist nicht allzu schwer, eine Teilzeichenkette zu ziehen, wenn Sie bereits wissen, wie man Daten in einer Ressource speichert und sie extrahiert. Dies ist an sich eine einfache Aufgabe. Versuchen Sie, die Zeichenfolge zunächst in einer Ressource zu speichern und sie dann von dort zu extrahieren. Fügen Sie dann eine Funktion hinzu, die die Zeichenfolge in Teilzeichenfolgen zerlegt und nach der richtigen sucht.
 
Реter Konow:
Es ist nicht allzu schwer, eine Teilzeichenkette herauszuziehen, wenn man bereits weiß, wie man Daten in einer Ressource speichert und sie abruft. Das ist an sich eine einfache Aufgabe. Versuchen Sie, die Zeichenfolge zunächst in einer Ressource zu speichern und sie dann von dort zu extrahieren. Fügen Sie dann eine Funktion hinzu, die die Zeichenfolge in Teilzeichenfolgen zerlegt und nach der richtigen sucht.

Peter, danke für deine Hilfe. Ich habe vor Jahren gelernt, wie man mit Saiten arbeitet. Und wie man eine Ressource speichert und liest, das habe ich gestern mit Ihrer Hilfe herausgefunden. Ich habe gerade eine hektische Textnachricht im Kopf, wie ich es versuchen sollte... und wie man es macht, die Textnachricht ging unterwegs verloren, ging in meinen Gedanken verloren.

Ich versuche, den Unterschied zwischen zweidimensionalen und eindimensionalen Arrays für die Erstellung von Ressourcen herauszufinden. Haben Sie irgendwelche Entwicklungen, Gedanken zu diesem Thema?

 
Alexey Viktorov:

Peter, danke für deine Hilfe. Ich habe vor Jahren gelernt, wie man mit Saiten arbeitet. Und wie man eine Ressource speichert und liest, das habe ich gestern mit Ihrer Hilfe herausgefunden. Ich habe gerade eine hektische Textnachricht im Kopf, als ob ich es versuchen sollte... aber wie man es macht, die Textnachricht ist mir in den Weg gekommen, hat sich in meinen Gedanken verloren.

Jetzt versuche ich also, den Unterschied zwischen zweidimensionalen und eindimensionalen Arrays für die Erstellung von Ressourcen herauszufinden. Haben Sie irgendwelche Erkenntnisse, Gedanken dazu?

Um ehrlich zu sein, habe ich noch nie ein zweidimensionales Array in einer Ressource gespeichert. Ich habe immer mit einem eindimensionalen Modell gearbeitet, weil es so zwanglos ist. Eindimensional ist besser für die Datenspeicherung, muss es aber nicht sein. Es kommt darauf an, um welche Art von Daten es sich handelt und in welchem Format. Verwenden Sie nur ein eindimensionales Array zum Speichern von Zeichenketten, da das zweidimensionale Array nicht an die Funktionen CharArrayToString und StringToCharArray gesendet werden kann. Ich würde Ihnen also raten, einen Mechanismus zu entwickeln, mit dem Sie Ihre Daten in einem eindimensionalen Array speichern können, um flexibel zu sein. Sie können jedoch versuchen, zweidimensionale Daten desselben Typs, die keine Zeichenketten sind, zu verwenden. Es wird interessant sein, zu sehen, was Sie dabei herausholen.
 

Ich habe einige frühere Seiten gelesen und festgestellt, dass die Aufgabe darin bestand, nur einen kleinen String aus der Ressource zu lesen. Ist diese Zeichenkette kürzer als 64 Zeichen, macht es keinen Sinn, mit Unions zu hantieren und Daten in der Ressource zu speichern. Schreiben Sie einfach die gewünschte Zeichenfolge in die Eigenschaft description von OBJPROP_TEXT:

ObjectSetString(chartID,label_name,OBJPROP_TEXT, "Ihre Zeichenfolge");

Und so bekommen Sie es zurück:

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


Und das war's.))

 
Alexey Viktorov:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Bibliotheken: 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:

Ich habe einige frühere Seiten gelesen und festgestellt, dass die Aufgabe darin bestand, nur einen kleinen String aus der Ressource zu lesen. Ist diese Zeichenkette kürzer als 64 Zeichen, macht es keinen Sinn, mit Unions zu hantieren und Daten in der Ressource zu speichern. Schreiben Sie einfach die gewünschte Zeichenfolge in die Eigenschaft description von OBJPROP_TEXT:

ObjectSetString(chartID,label_name,OBJPROP_TEXT, "Ihre Zeichenfolge");

Und erhalten es so zurück:

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


Und das war's.))

Nicht ganz. Die Aufgabe bestand darin, ein paar Zeilen mit Informationen auszugeben. Meiner Meinung nach... Das ist genau die Art und Weise, wie ich es angezeigt haben wollte. In einer der Zeilen steht ein Datum. Dieses Datum dient nicht nur der Übersichtlichkeit, sondern soll vom Programm auch nach dem Neustart verwendet werden. Es stellt sich heraus, dass es irgendwie gespeichert werden muss. Hier habe ich angefangen, herumzuprobieren, wir suchen nicht nach einfachen Auswegen. Da eine Möglichkeit, das Datum zu speichern, die Verwendung eines grafischen Objekts ist, warum nicht die gleiche Ressource verwenden. Nach dem Neustart der MT-Ressource ist lesbar, aber nach dem Neustart des Computers noch nicht überprüft. Die Hauptsache ist, dass ich Ressourcen und Einheiten herausgefunden habe. Das nächste, was ich wusste, war, dass ich verzweifelte Textnachrichten in meinem Kopf bekam. Sobald ich alles gelöscht habe, werde ich die nützliche Arbeit fortsetzen.

 
Alexey Viktorov:

Nicht wirklich. Die Aufgabe bestand darin, ein paar Zeilen mit Informationen auszugeben. Meiner Meinung nach ... Das ist genau die Art und Weise, wie ich es haben wollte, um es mit einer Leinwand zu zeigen. In einer der Zeilen steht ein Datum. Dieses Datum dient nicht nur der Übersichtlichkeit, sondern soll vom Programm auch nach dem Neustart verwendet werden. Es stellt sich heraus, dass es irgendwie gerettet werden muss. Hier habe ich angefangen, herumzuprobieren, wir suchen nicht nach einfachen Auswegen. Da eine Möglichkeit, das Datum zu speichern, die Verwendung eines grafischen Objekts ist, warum nicht die gleiche Ressource verwenden. Nach dem Neustart der MT-Ressource ist lesbar, aber nach dem Neustart des Computers noch nicht überprüft. Die Hauptsache ist, dass ich Ressourcen und Einheiten herausgefunden habe. Das nächste, was ich wusste, war, dass ich verzweifelte Textnachrichten in meinem Kopf bekam. Sobald ich alles gelöscht habe, werde ich die nützliche Arbeit fortsetzen.

Gut. Dann beherrschen Sie weiterhin die Ressourcen und die Gewerkschaften. Sie bieten eine vielseitige Möglichkeit, beliebige Daten nicht nur schnell zu schreiben und zu speichern, sondern diese Daten auch in Echtzeit und ohne Belastung der Festplatte zwischen verschiedenen Programmen auszutauschen.