OBJ_TEXT nesnesinde metni birden çok satırda görüntülemek mümkün mü? - sayfa 3

 
Alexey Viktorov :
Nikolay, metni sağ üst köşeye hizalamak mümkündür. Yarım gün kavga ediyorum ... Sağ köşeye getirdim, ancak metin sadece sol tarafa hizalanmış. önerebilir misin?
En az iki yol biliyorum.
Alexey, bilgisayarın başına geçtiğimde, daha önce yapamazsan sana göstereceğim.
Tuvalde mi yoksa nesnelerde mi?
 
Nikolai Semko :
En az iki yol biliyorum.

bağlantı parametresini TextOut'ta ayarlayın (ve muhtemelen nesnenin kendisinin de yapması gerekir)

metin boyutunu hesaplayın ve dikkate alın)

 
Andrei Trukhanovich :

bağlantı parametresini TextOut'ta ayarlayın (ve muhtemelen nesnenin kendisinin de yapması gerekir)

metin boyutunu hesaplayın ve dikkate alın)

Sağ
 
Alexey Viktorov :
Nikolay, metni sağ üst köşeye hizalamak mümkündür. Yarım gün kavga ediyorum ... Sağ köşeye getirdim, ancak metin sadece sol tarafa hizalanmış. önerebilir misin?
 #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 :
En az iki yol biliyorum.
Alexey, bilgisayarın başına geçtiğimde, daha önce yapamazsan sana göstereceğim.
Tuvalde mi yoksa nesnelerde mi?
Tabii ki tuval üzerine. Çünkü soru sana.
 
Andrei Trukhanovich :

bağlantı parametresini TextOut'ta ayarlayın (ve muhtemelen nesnenin kendisinin de yapması gerekir)

metin boyutunu hesaplayın ve dikkate alın)

Bu denedim. Onunla da dün yarım gün uğraştı. Bir şeyi değiştirir değiştirmez, metin tamamen kayboluyor. Ve bulamıyorum.
 
Nikolai Semko :

Onu kastetmedim. Sağ köşeye yerleştirmek mümkündü. Ancak iki veya daha fazla dize farklı uzunluktaysa, dizenin ilk karakterine hizalanırlar. Ve satırların satırın son karakterine hizalanmasını istiyorum.

Bu ilk satır.

İkinci çizgi.

Ve bu üçüncü satır.

Burada ilk sayfadaki örnekte, kodun ikinci ve üçüncü kısmı piksel veya yüzde olarak bir kayma kullanır. Ancak çizgiler yalnızca sol kenardan girinti yapılarak kesilebilir. Ancak bu, özellikle dizenin uzunluğu değişebiliyorsa, her zaman uygun değildir. Örneğin "toplam = 10" veya "toplam = 1000".
 

Canvases'taki konunun gitmiş olması garip. Çok eski zamanlardan beri yaptığım şey bu:

 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 - yazı tipi yüksekliği.

Sağ üst için PS örneği :)

 
Igor Zakharov :

Canvases'taki konunun gitmiş olması garip. Bu benim çok eski zamanlardan beri yaptığım şey:

FS - yazı tipi yüksekliği.

Sağ üst için PS örneği :)

Benim de yıllardır yaptığım şey bu.

 

Hepsi anlaşıldı.

OBJ_BITMAP_LABEL nesnesi sağa hizalıdır, yatay ve dikey olarak bazı girintilerle mümkündür, OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER öğesine atanır. Kaynak oluşturulduğunda görüntünün genişliği ayarlanır. Ve bu değer ikinci parametre olarak TextOut'a yerleştirilmelidir ve ardından metin "tuval" in sağ kenarına hizalanacaktır.