Est-il possible d'éditer du texte sur plusieurs lignes dans un objet OBJ_TEXT ?

 

Bonjour à tous !

Est-il possible d'éditer du texte sur plusieurs lignes dans un objet OBJ_TEXT? Si non, pourquoi ne pas implémenter cette fonctionnalité, question aux développeurs ?

 
Farkhat Guzairov:

Bonjour à tous !

Est-il possible d'éditer du texte sur plusieurs lignes dans un objet OBJ_TEXT? Si non, pourquoi ne pas implémenter cette fonctionnalité, question aux développeurs ?

Autant que je me souvienne, vous ne pouvez pas, seulement à travers une boucle.

 
Evgeny Belyaev:

Autant que je me souvienne, vous ne pouvez pas, seulement à travers un cycle.

À propos de la boucle, c'est exactement ce que je voudrais éviter. Pourquoi cela ne pourrait-il pas être fait dès le début, par exemple dans Comment ça marche.

 
Farkhat Guzairov:

Bonjour à tous !

Est-il possible d'éditer du texte sur plusieurs lignes dans un objet OBJ_TEXT? Si non, pourquoi ne pas implémenter cette fonctionnalité, question pour les développeurs ?

il est plus facile d'utiliser Kanvas avec ma 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);  
  }


Pour afficher une telle chose en utilisant des objets, le code serait beaucoup plus gros.

 
Nikolai Semko:

il est plus facile d'utiliser Kanvas avec ma classe iCanvas:



Pour afficher ce genre de choses à l'aide d'objets, le code serait beaucoup plus volumineux.

Pouvez-vous ajouter une pièce de remplissage à l'arrière ? Pour que le tableau ne soit pas un obstacle ?
 
Leon:
Est-il possible d'y fixer une pièce de remplissage à l'arrière ? Pour que le graphique ne soit pas un obstacle ?

Au début, il suffit de remplir l'arrière-plan avec la bonne couleur et la bonne transparence :

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

Au début, il suffit de remplir l'arrière-plan avec la bonne couleur et la bonne transparence :

Merci pour la solution. Mais qu'en est-il de la mise à l'échelle ? Par exemple, si je commence à élargir ou à rétrécir le graphique par prix, le texte va-t-il se chevaucher ?

Ou ce texte sera-t-il comme une étiquette ?

 
Il aurait été idéal d'avoir un objet texte avec un support \n, alors le problème du texte lors de la mise à l'échelle du graphique n'aurait pas été aussi grave.
 
Farkhat Guzairov:

Merci pour la solution. Mais qu'en est-il de la mise à l'échelle ? Par exemple, si j'élargis ou rétrécis le graphique par prix, les textes se chevaucheront-ils ?

Ou ce texte sera-t-il comme une étiquette ?

Pour ce faire, vous devez enregistrer les coordonnées du début du texte non pas en pixels, mais en prix et en temps. Et chaque fois que l'événement CHARTEVENT_CHART_CHANGE doit être redessiné à l'aide des fonctions de la classe iCanvas :

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

Au début, il suffit de remplir l'arrière-plan avec la bonne couleur et la bonne transparence :

Merci beaucoup ! Je vais essayer un de ces jours.

 
Nikolai Semko:

Pour ce faire, vous devez enregistrer les coordonnées du début du texte non pas en pixels, mais en prix et en temps. Et à chaque fois, redessinez-les lors de l'événement CHARTEVENT_CHART_CHANGE, en utilisant les fonctions de la classe iCanvas :

Ce serait la même chose qu'avec un objet texte normal. Quoi qu'il en soit, je vais utiliser votre solution à d'autres fins, merci !