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

Farkhat Guzairov  

Ciao a tutti!

È possibile emettere del testo in più righe in un oggetto OBJ_TEXT? Se no, perché non implementare questa funzione, domanda agli sviluppatori?

Evgeny Belyaev  
Farkhat Guzairov:

Ciao a tutti!

È possibile emettere testo in più righe in un oggetto OBJ_TEXT? Se no, perché non implementare questa funzione, domanda agli sviluppatori?

Per quanto mi ricordo, non si può, solo attraverso un ciclo.

Farkhat Guzairov  
Evgeny Belyaev:

Per quanto mi ricordo, non si può, solo attraverso un ciclo.

Per quanto riguarda il loop, è esattamente quello che vorrei evitare. Perché questo non potrebbe essere fatto dall'inizio, per esempio in Comment funziona.

Nikolai Semko  
Farkhat Guzairov:

Ciao a tutti!

È possibile emettere del testo in più righe in un oggetto OBJ_TEXT? Se no, perché non implementare questa funzione, domanda per gli sviluppatori?

È più facile usare Kanvas con la mia classe iCanvas:

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164

void OnStart()
  {
    // Значения по умолчанию:
    // "Courier New"                   - начальный шрифт с размером 18 
    // Canvas.TextPosX=20;             - начальная координата X
    // Canvas.TextPosY=100;            - начальная координата Y
    // Canvas.TextColor=clrDarkOrchid; - цвет текста с прозрачностью 1.0 (полностью непрозрачный)
    // Canvas.StepTextLine = 20;       - шаг между строками
    
    Canvas.Comm("В синем небе звезды блещут,");
    Canvas.Comm("В синем море волны хлещут;");
    Canvas.Comm("Туча по небу идет,");
    Canvas.Comm("Бочка по морю плывет.");
    
    Canvas.TextPosition(100,500);                       // Позиция X и Y. Если целое число то значение в пикселях. Если double, то в процентах от ширины и высоты
    Canvas.CurentFont("Arial",25,30,clrRed,0.7);        // 25 - размер, 30 - расстояние между строками, 0.7 - прозрачность
    Canvas.Comm("Словно горькая вдовица,");
    Canvas.Comm("Плачет, бьется в ней царица;");
    Canvas.Comm("И растет ребенок там");
    Canvas.Comm("Не по дням, а по часам.");
    
    Canvas.TextPosition(50.0,20.0);                     // Позиция X и Y в процентах от ширины и высоты (тип dounle)
    Canvas.CurentFont("Times New Roman",40,30,clrBlue); // 40 - размер, 30 - расстояние между строками, прозрачность - 1.0 (по умолчанию
    Canvas.Comm("День прошел, царица вопит...");
    Canvas.Comm("А дитя волну торопит:");
    Canvas.Comm("«Ты, волна моя, волна!");
    Canvas.Comm("Ты гульлива и вольна;");
    Canvas.TextPosY+=20;                                // увеличиваем Y координату на 20 пикселей
    Canvas.Comm("Плещешь ты, куда захочешь,");
    Canvas.TextPosX+=20;                                // увеличиваем X координату на 20 пикселей
    Canvas.Comm("Ты морские камни точишь,");
    Canvas.TextPosX+=20;                                // увеличиваем X координату на 20 пикселей
    Canvas.Comm("Топишь берег ты земли,");
    Canvas.TextPosX+=20;                                // увеличиваем X координату на 20 пикселей
    Canvas.Comm("Подымаешь корабли —");
    Canvas.StepTextLine+=30;                            // увеличиваем шаг между строками на 30 пикселей
    Canvas.Comm("Не губи ты нашу душу:");
    Canvas.Comm("Выплесни ты нас на сушу!»");
    Canvas.Update();
    Sleep(20000);  
  }


Per visualizzare una cosa del genere usando oggetti, il codice sarebbe molto più grande.

Leon  
Nikolai Semko:

è più facile usare Kanvas con la mia classe iCanvas:



Per visualizzare questo tipo di cose usando oggetti, il codice sarebbe molto più grande.

Si può aggiungere un riempimento sul retro? In modo che il grafico non sia d'intralcio?
Nikolai Semko  
Leon:
Si può attaccare un riempitivo sul retro? In modo che la grafica non sia d'intralcio?

All'inizio, devi solo riempire lo sfondo con il colore e la trasparenza giusti:

Canvas.Erase(ColorToARGB(clrGreen,150)); // где 150- прозрачность, меняющаяся от 0 до 255.  0 - абсолютная прозрачность. 255-абсолютная непрозрачность
Farkhat Guzairov  
Sarebbe stato ideale avere un oggetto testo con supporto \n, allora il problema del testo quando si scala il grafico non sarebbe stato così grave.
Nikolai Semko  
Farkhat Guzairov:

Grazie per la soluzione. Ma che dire del ridimensionamento? Per esempio, se allargo o restringo il grafico per prezzo, il testo si sovrapporrà?

O questo testo sarà come un'etichetta?

A questo scopo, è necessario salvare le coordinate di inizio del testo non in pixel, ma in prezzo e tempo. E ogni volta l'evento CHARTEVENT_CHART_CHANGE dovrebbe essere ridisegnato usando le funzioni della classe iCanvas:

double Y(double Price);
double X(datetime Time);
Leon  
Nikolai Semko:

All'inizio devi solo riempire lo sfondo con il colore e la trasparenza giusti:

Grazie mille! Lo proverò uno di questi giorni.

Farkhat Guzairov  
Nikolai Semko:

Per fare questo, è necessario salvare le coordinate dell'inizio del testo non in pixel, ma in prezzo e tempo. E ogni volta, ridisegnateli all'evento CHARTEVENT_CHART_CHANGE, usando le funzioni della classe iCanvas:

Beh, sarebbe lo stesso che con un normale oggetto di testo. Comunque, userò la tua soluzione per altri scopi, grazie!

Motivazione: