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

 
Nikolai Semko:

Hier gibt es noch ein weiteres Problem.
Wenn Sie keinen Zugriff auf den Code haben, mit dem die Leinwand erzeugt wurde, haben Sie auch keinen Zugriff auf die Ressourcen dieser Leinwand. Sie können die Liste der Bitmap-Objekte sehen, aber nicht die Liste der Ressourcen. Wenn Sie den Ressourcennamen nicht kennen, können Sie ihn nur durch Abgleich oder Brute-Force herausfinden, was nicht praktikabel ist.
Wie erhalten Sie eine Reihe von Punkten für die Anerkennung? Wenn auch nur durch einen Screenshot, der ebenfalls Unsinn ist.
Oder liege ich da falsch?

Der Code ist natürlich von mir, das heißt, er ist Open Source. Ich dachte nur, wenn ein Datum auf dem Bildschirm ist, warum sollte man es sonst irgendwo speichern, wenn man es bekommen kann ... Vorausgesetzt, Sie können es besorgen. Ha-ha-ha, "schön" gesagt.

Nun, so wie man eine Zeichenkette aus einem Textfeld abrufen und einen Teil der Zeichenkette von dort ziehen kann. Aber nein, nein, nein.

 
Andrey Barinov:

Die Bitmap-Eigenschaft enthält einen Pfad zu der Ressource. Ich weiß nicht, ob man sie programmatisch abrufen kann.


Ganz genau. Die Frage war ja nicht, ob sie von einem Bild, sondern von einer Ressource stammt. Und dann habe ich selbst verloren, wonach ich suchte. Ich werde experimentieren und sehen, welche Eigenschaften ich erzielen kann.


Bei mir funktioniert es nicht...

  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));       // это значение тоже есть
   }

Und wie man ein Array erhält, kann ich nicht finden. Ist das überhaupt möglich?

 
Alexey Viktorov:

Ganz genau. Schließlich war die Frage nicht nach einem Bild, sondern nach einer Quelle zu stellen. Und dann habe ich verloren, wonach ich selbst gesucht habe. Ich werde experimentieren und sehen, welche Eigenschaften ich erzielen kann.


Bei mir funktioniert es nicht...

Und ich kann nicht herausfinden, wie man ein Array erhält. Ist das überhaupt möglich?

Ich denke, ResourceReadImage() oder etwas Ähnliches sollte helfen

 
Alexey Viktorov:

Der Code gehört natürlich mir, das heißt, er ist offen. Ich dachte nur, wenn ein Datum auf dem Bildschirm steht, warum sollte man es dann irgendwo speichern, wenn man es auch ... Vorausgesetzt, Sie können es besorgen. Ha, ha, ha, gut gemacht.

Nun, so wie man eine Zeichenkette aus einem Textfeld holen und einen Teil der Zeichenkette herausziehen kann. Aber leider ist das nicht der Fall.

Du bist wirklich etwas Besonderes :))
Ein Koffer mit Batterien für eine wissenschaftliche Uhr ist wirklich nicht die beste Lösung, wenn auch kreativ.
 
Andrey Barinov:
Ich denke, ResourceReadImage() oder etwas Ähnliches sollte helfen

Ich habe es gefunden, aber bei mir hat nichts funktioniert. Ich habe versucht, ein Array in eine Zeichenfolge zu konvertieren, aber die Array-Typen stimmen nicht überein. Egal wie ich es drehe und wende, es funktioniert nicht. Vielleicht mache ich etwas falsch, aber ich habe noch keine neuen Ideen.

 
Alexey Viktorov:

Ich habe es gefunden, aber bei mir hat nichts funktioniert. Ich habe versucht, ein Array in eine Zeichenfolge zu konvertieren, aber die Array-Typen stimmen nicht überein. Egal, wie ich es drehe und wende, es funktioniert einfach nicht. Vielleicht mache ich etwas falsch, aber ich habe noch keine neuen Ideen.

Wie übersetze ich Pixelfarbdaten in eine Zeichenkette? Und vor allem: Warum?
Sie erhalten ein Bitmap-Bild und können dann versuchen, es zu erkennen, aber das ist eine andere Wissenschaft :)
 
Nikolai Semko:
Du bist wirklich etwas Besonderes :)))
Ein Koffer voller Batterien für eine wissenschaftliche Uhr ist wirklich nicht die beste Lösung, auch wenn sie kreativ ist.

Nikolai, aber das ist nicht unbedingt eine Lösung, die anwendbar ist. Schließlich sind Ihre Karikaturen aus der gleichen Serie, schön, aber ohne die Möglichkeit der Anwendung im Handel.

 
Andrey Barinov:
Wie übersetzt man Pixelfarbdaten in eine Zeichenkette? Und vor allem: Warum?
Sie erhalten ein Bitmap-Bild und können dann versuchen, es zu erkennen, aber das ist eine andere Wissenschaft :)

Ah, nun, das ist... Ich weiß es nicht.))

Im Allgemeinen gebe ich die Idee wahrscheinlich auf. Vielleicht ist das wirklich nicht der Fall.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

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);
}


Anmeldung

// Сохраняет в 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 Der BMP->GIF/PNG-Dateikonverter ist ebenfalls implementiert.

 
Alexey Viktorov:

Neue Frage: Kann ich Text aus einer Ressource in einer Leinwand lesen?

Zum Beispiel diese Zeilen, oder irgendeine von ihnen.

Zweck: Auf der Leinwand gibt es eine Zeile, die ein Datum enthält. Dies ist das Datum, das Sie lesen möchten.

Oder verwenden Sie eine der altbewährten Methoden, GV, Datei, Grafik oder etwas anderes.

Mit ResourceReadImage können Sie Daten aus einer Ressource lesen, aber dazu müssen Sie sie mit ResourceCreate dorthin schreiben. Die Funktion ResourceCreate akzeptiert nur ein Array mit uint-Daten und wenn wir ein Array mit einem anderen Datentyp schreiben wollen, müssen wir union verwenden. Deklarieren Sie darin mehrere Arrays unterschiedlichen Typs. Danach können wir beliebige Daten in der Ressource speichern, einschließlich Zeichenketten. Für die Umwandlung von String in Char-Typ verwenden Sie StringToCharArray und umgekehrt CharArrayToString. Es geht also gar nicht um die Leinwand, sondern um die Ressource, in die man mit Hilfe von Unions jede Art von Daten schreiben kann.