OBJ_TEXTオブジェクトでテキストを複数行に出力することは可能ですか?

 

皆さん、こんにちは。

OBJ_TEXTオブジェクト でテキストを複数行で出力することは可能ですか?もしそうでないなら、なぜこの機能を実装しないのか、開発者に質問します。

 
Farkhat Guzairov:

皆さん、こんにちは。

OBJ_TEXTオブジェクト でテキストを複数行で出力することは可能ですか?もしそうでないなら、なぜこの機能を実装しないのか、開発者に質問します。

私の記憶では、ループを通してのみ、できません。

 
Evgeny Belyaev:

私の記憶では、サイクルを通じてのみ、できません。

ループの件ですが、それこそ避けたいですね。なぜこれが最初からできなかったのかというと、例えば「Comment it works.

 
Farkhat Guzairov:

皆さん、こんにちは。

OBJ_TEXTオブジェクト でテキストを複数行で出力することは可能ですか?もしそうでないなら、なぜこの機能を実装しないのか、開発者に質問です。

私のiCanvas クラスでKanvasを使用する方が簡単です。

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


オブジェクトを使ってそのようなものを表示するには、コードがもっと大きくなってしまいます。

 
Nikolai Semko:

私のiCanvas クラスでKanvasを使う方が簡単です。



このようなことをオブジェクトを使って表示するには、コードがもっと大きくなってしまいます。

背面にフィラーを追加することは可能ですか?チャートが邪魔にならないように?
 
Leon:
そこに背面でフィラーを取り付けられるのでしょうか?グラフィックが邪魔にならないように?

最初のうちは、背景を適切な色と透明度で塗りつぶすだけでいいのです。

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

最初のうちは、背景を適切な色と透明度で塗りつぶすだけでよいのです。

解答ありがとうございました。しかし、スケーリングについてはどうでしょうか?例えば、価格ごとにチャートを広げたり狭めたりするようにした場合、テキストは互いに重なり合うのでしょうか?

それとも、このテキストはラベルのようになるのでしょうか?

 
テキストオブジェクトに \サポートがあれば、グラフを拡大縮小 する際のテキストの問題は深刻にならずに済んだと思います。
 
Farkhat Guzairov:

解答ありがとうございました。しかし、スケーリングについてはどうでしょうか?例えば、価格別にチャートを広げたり狭めたりした場合、テキストは互いに重なり合うのでしょうか?

それとも、このテキストはラベルのようになるのでしょうか?

そのためには、文字開始の座標をピクセル単位ではなく、価格と時間で保存する必要があります。そして、CHARTEVENT_CHART_CHANGEイベントのたびに、iCanvasクラスの関数を使用して再描画する必要があります。

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

最初のうちは、背景を適切な色と透明度で塗りつぶすだけでよいのです。

本当にありがとうございました。そのうち試してみるよ。

 
Nikolai Semko:

そのためには、テキストの始まりの座標をピクセル単位ではなく、価格と時間で保存する必要があります。そして、その都度、CHARTEVENT_CHART_CHANGEイベントで、iCanvasクラスの関数を用いて再描画します。

まあそれは、通常のテキストオブジェクトと同じでしょう。とにかく、あなたのソリューションを他の目的で使用します。

理由: