Ist es möglich, in einem OBJ_TEXT-Objekt Text auf mehreren Zeilen auszugeben? - Seite 3

 
Alexey Viktorov:
Nikolay, ist es möglich, den Text an der oberen rechten Ecke auszurichten. Ich kämpfe schon seit einem halben Tag... Ich habe sie an der rechten Ecke ausgerichtet, aber der Text ist nur an der linken Seite ausgerichtet. Können Sie mir einen Tipp geben?
Ich kenne mindestens zwei Möglichkeiten.
Alexej, ich zeige es dir, sobald ich an den Computer komme, falls du es bis dahin nicht schaffst.
Möchten Sie es auf einer Leinwand oder auf Gegenständen?
 
Nikolai Semko:
Ich kenne mindestens zwei Möglichkeiten.

den Ankerparameter in TextOut (und wahrscheinlich auch das Objekt selbst) setzen

die Textgröße zu berechnen und zu berücksichtigen)

 
Andrei Trukhanovich:

den Ankerparameter in TextOut setzen (und wahrscheinlich auch das Objekt selbst)

Textgröße berechnen und berücksichtigen )

rechts
 
Alexey Viktorov:
Nikolai, ist es möglich, den Text an der oberen rechten Ecke auszurichten. Ich kämpfe schon seit einem halben Tag... Die rechte Ecke ist ausgerichtet, aber der Text ist nur an der linken Seite ausgerichtet. Können Sie mir einen Tipp geben?
#property indicator_chart_window
#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164

int OnInit()
  {
   RightTopText("Текст в правом верхнем углу","Tahoma",25);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id==CHARTEVENT_CHART_CHANGE) RightTopText("Текст в правом верхнем углу","Tahoma",25);
  }
//+------------------------------------------------------------------+
void RightTopText(string str,string name,int size)
  {
   Canvas.Erase();
   Canvas.FontSet(name,size);
   Canvas.TextPosition(W.Width-Canvas.TextWidth(str)-5,0);
   Canvas.Comm(str);
   Canvas.Update();
  }
//+------------------------------------------------------------------+
 
Nikolai Semko:
Ich kenne mindestens zwei Möglichkeiten.
Alexej, ich zeige es dir, sobald ich an den Computer komme, falls du es bis dahin nicht schaffst.
Möchten Sie es auf Leinwand oder auf Gegenständen?
Auf Leinwand, natürlich. Da die Frage an Sie gerichtet ist.
 
Andrei Trukhanovich:

den Ankerparameter in TextOut (und wahrscheinlich auch das Objekt selbst) setzen

Textgröße berechnen und berücksichtigen )

Ich habe es versucht. Gestern hatte ich einen halben Tag lang damit zu kämpfen. Sobald ich etwas ändere, verschwindet der Text vollständig. Und ich kann sie nicht finden.
 
Nikolai Semko:

Das ist nicht das, was ich meinte. Die rechte Ecke ist in Ordnung. Sind jedoch zwei oder mehr Zeilen unterschiedlich lang, werden sie nach dem ersten Zeichen der Zeile ausgerichtet. Und ich möchte, dass Zeichenketten am letzten Zeichen der Zeichenkette ausgerichtet werden.

Dies ist die erste Zeile.

Dies ist die zweite Zeile.

Und dies ist die dritte Zeile.

Im Beispiel auf der ersten Seite werden im zweiten und dritten Teil des Codes Pixelverschiebung oder Prozentverschiebung verwendet. Die Zeilen können jedoch nur durch Einrücken vom linken Rand aus ausgerichtet werden. Dies ist jedoch nicht immer praktisch, insbesondere wenn die Länge der Schnur variieren kann. Zum Beispiel "Summe = 10" oder "Summe = 1000".
 

Es ist seltsam, dass das Thema auf Canvas übergegangen ist. Ich mache das schon seit Urzeiten:

string obj_pref="A_EA_";
void Text(int i,string text="",color CLR=clrBlue)
{
   string name=obj_pref+IntegerToString(i);
   if(ObjectCreate(0,name,OBJ_LABEL,0,0,0))
    {
     ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
     ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
     ObjectSetInteger(0,name,OBJPROP_XDISTANCE,5);
     ObjectSetInteger(0,name,OBJPROP_YDISTANCE,int(i*FS*1.4));
     ObjectSetInteger(0,name,OBJPROP_FONTSIZE,FS);
     ObjectSetString (0,name,OBJPROP_FONT,"Arial");
    }
    ObjectSetString (0,name,OBJPROP_TEXT,text);
    ObjectSetInteger(0,name,OBJPROP_COLOR,CLR);
}

FS - Schrifthöhe.

PS Beispiel für oben rechts :)

 
Igor Zakharov:

Es ist seltsam, dass das Thema auf Canvas übergegangen ist. Ich mache das schon seit Urzeiten:

FS - Schrifthöhe.

PS Beispiel für oben rechts :)

So habe ich es auch jahrelang machen können.

 

Das war's, ich hab's.

Wir richten dasObjekt OBJ_BITMAP_LABEL am rechten Rand aus, wir können es horizontal und vertikal einrücken, wir weisen OBJPROP_ANCHOR ANCHOR_RIGHT_UPPER zu. Dann wird die Breite des Bildes bei der Erstellung der Ressource festgelegt. Und dieser Wert sollte in TextOut als zweiter Parameter gesetzt werden und dann Text wird auf der rechten Seite der Leinwand ausgerichtet werden.