È possibile emettere testo su più righe in un oggetto OBJ_TEXT? - pagina 5

 
Nikolai Semko:

C'è un altro problema qui.
Se non avete accesso al codice che ha generato il kanvas, allora non avete nemmeno accesso alla risorsa di quel kanvas. Puoi vedere la lista degli oggetti bitmap, ma non la lista delle risorse. Se non conoscete il nome della risorsa, potete scoprirlo solo per corrispondenza o forza bruta, il che è al di là dell'uso pratico.
Come si ottiene una serie di punti per il riconoscimento? Se non altro attraverso uno screenshot, che è anche una sciocchezza.
O mi sbaglio?

Il codice è ovviamente mio, il che significa che è open source. Ho solo pensato che se c'è una data sullo schermo, perché salvarla da qualche parte se si può ottenere ... Sempre che tu riesca a ottenerlo. Ha-ha-ha, "splendidamente" detto.

Beh, un po' come si può ottenere una stringa da un campo di testo e tirare parte della stringa da lì. Ma, ahimè, no così no.

 
Andrey Barinov:

La proprietà bitmap ha un percorso alla risorsa. Non so se si può ottenere programmaticamente.


Esattamente. Dopo tutto, la domanda non era di ottenerlo da un'immagine, ma da una risorsa. E poi io stesso ho perso quello che stavo cercando. Sperimenterò e vedrò quali proprietà posso ottenere.


Non funziona per me...

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

E come ottenere un array che non riesco a trovare. E' possibile?

 
Alexey Viktorov:

Esattamente. Dopo tutto, la domanda non era di ottenere da un'immagine, ma da una risorsa. E poi ho perso quello che stavo cercando io stesso. Ho intenzione di sperimentare e vedere quali proprietà posso ottenere.


Non funziona per me...

E non riesco a trovare come ottenere un array. E' possibile?

Penso che ResourceReadImage() o qualcosa del genere dovrebbe aiutare

 
Alexey Viktorov:

Il codice è ovviamente mio, quindi è aperto. Ho solo pensato che se c'è una data sullo schermo, perché salvarla da qualche parte quando si può ottenere ... Sempre che tu riesca a ottenerlo. Ha-ha-ha, bella questa.

Beh, un po' come si può ottenere una stringa da una casella di testo e tirarne fuori una parte. Ma, ahimè, niente del genere.

Sei davvero qualcosa :))
Una valigia di batterie per un orologio scientifico non è davvero la soluzione migliore, anche se creativa.
 
Andrey Barinov:
Penso che ResourceReadImage() o qualcosa del genere dovrebbe aiutare

L'ho trovato, ma niente ha funzionato per me. Ho provato a convertire un array in una stringa, ma i tipi di array non corrispondono. Non importa come l'ho rigirata, non ha funzionato. Forse sto facendo qualcosa di sbagliato, ma ancora nessuna nuova idea.

 
Alexey Viktorov:

L'ho trovato, ma niente ha funzionato per me. Ho provato a convertire un array in una stringa, ma i tipi di array non corrispondono. Non importa come l'ho girato, semplicemente non funziona. Forse sto facendo qualcosa di sbagliato, ma ancora nessuna nuova idea.

Come faccio a tradurre i dati dei colori dei pixel in una stringa? E soprattutto, perché?
Si ottiene un'immagine bitmap e poi si può provare a riconoscerla, ma questa è una scienza a parte :)
 
Nikolai Semko:
Sei davvero qualcosa :)))
Una valigia piena di batterie per un orologio scientifico non è proprio la soluzione migliore, anche se è creativa.

Nikolai, ma non è una soluzione necessariamente applicabile. Dopo tutto, i vostri cartoni sono della stessa serie, belli, ma senza la possibilità di applicazione nel trading.

 
Andrey Barinov:
Come si traducono i dati dei colori dei pixel in una stringa? E soprattutto, perché?
Si ottiene un'immagine bitmap e poi si può provare a riconoscerla, ma questa è una scienza a parte :)

Ah, beh, questo è... Non lo so.))

In generale, probabilmente rinuncio all'idea. Forse non è davvero quel tipo di cosa.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Caratteristiche del linguaggio mql5, sottigliezze e trucchi

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


Applicazione

// Сохраняет в 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 Il convertitore di file BMP->GIF/PNG è anche implementato.

 
Alexey Viktorov:

Nuova domanda: posso leggere il testo di una risorsa in una tela?

Per esempio queste righe, o qualcuna di esse.

Scopo: Con il kanvas c'è una linea che contiene una data. Questa è la data che volete leggere.

O usare uno dei vecchi metodi provati e testati, GV, file, grafica o qualcos'altro.

Potete leggere i dati da una risorsa usando ResourceReadImage, ma per farlo dovete scriverci usando ResourceCreate. La funzione ResourceCreate accetta solo un array di dati uint e se vogliamo scrivere un array di un altro tipo di dati, dobbiamo usare union. Dichiarare diversi array di diversi tipi in esso. Dopo di che, possiamo memorizzare qualsiasi dato nella risorsa, incluse le stringhe. Per convertire la stringa nel tipo char usate StringToCharArray e viceversa usate CharArrayToString. Quindi, non si tratta affatto del kanvas, ma della risorsa in cui si può scrivere qualsiasi tipo di dati con l'aiuto delle unioni.