É possível emitir texto em várias linhas em um objeto OBJ_TEXT?

 

Olá a todos!

É possível emitir texto em várias linhas em um objeto OBJ_TEXT? Se não, por que não implementar este recurso, pergunta aos desenvolvedores?

 
Farkhat Guzairov:

Olá a todos!

É possível emitir texto em várias linhas em um objeto OBJ_TEXT? Se não, por que não implementar este recurso, pergunta aos desenvolvedores?

Até onde me lembro, não se pode, apenas através de um loop.

 
Evgeny Belyaev:

Até onde me lembro, não se pode, apenas através de um ciclo.

Sobre o loop, isso é exatamente o que eu gostaria de evitar. Por que isto não pôde ser feito desde o início, por exemplo, em Comentário, funciona.

 
Farkhat Guzairov:

Olá a todos!

É possível emitir texto em várias linhas em um objeto OBJ_TEXT? Se não, por que não implementar este recurso, pergunta para os desenvolvedores?

É mais fácil usar Kanvas com minha 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);  
  }


Para exibir tal coisa usando objetos, o código seria muito maior.

 
Nikolai Semko:

é mais fácil usar Kanvas com minha classe iCanvas:



Para exibir este tipo de coisa usando objetos, o código seria muito maior.

É possível prender um enchimento na parte de trás? Para que a tabela não atrapalhe?
 
Leon:
Pode ser afixado um enchimento na parte de trás? Para que o gráfico não atrapalhe?

No início, basta preencher o fundo com a cor certa e transparência:

Canvas.Erase(ColorToARGB(clrGreen,150)); // где 150- прозрачность, меняющаяся от 0 до 255.  0 - абсолютная прозрачность. 255-абсолютная непрозрачность
 
Nikolai Semko:

No início você só precisa preencher o fundo com a cor certa e transparência:

Obrigado pela solução. Mas e a escalada? Por exemplo, se eu começar a ampliar ou estreitar o gráfico por preço, o texto se sobreporá um ao outro?

Ou este texto será como um rótulo?

 
Teria sido ideal ter um objeto de texto com suporte, então o problema do texto ao escalar o gráfico não teria sido tão grave.
 
Farkhat Guzairov:

Obrigado pela solução. Mas e a escalada? Por exemplo, se eu ampliar ou estreitar o gráfico por preço, o texto se sobreporá um ao outro?

Ou este texto será como um rótulo?

Para este fim, é necessário salvar as coordenadas do início do texto não em pixels, mas em preço e tempo. E toda vez que o evento CHARTEVENT_CHART_CHANGE deve ser redesenhado usando funções da classe iCanvas:

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

No início você só precisa preencher o fundo com a cor certa e transparência:

Muito obrigado! Vou tentar um destes dias.

 
Nikolai Semko:

Para fazer isso, é preciso salvar as coordenadas do texto, começando não em pixels, mas em preço e tempo. E sempre, redesenhá-las no evento CHARTEVENT_CHART_CHANGE, usando funções da classe iCanvas:

Bem, isso seria o mesmo que com um objeto de texto normal. De qualquer forma, vou usar sua solução para outros fins, obrigado!