OBJ_TEXT 개체에서 여러 줄에 텍스트를 표시할 수 있습니까? - 페이지 3

 
Alexey Viktorov :
Nikolay, 텍스트를 오른쪽 상단 모서리에 정렬하는 것이 가능합니다. 반나절 화이팅 ... 오른쪽 모서리로 가져 왔는데 텍스트가 왼쪽에만 정렬됩니다. 제안할 수 있습니까?
적어도 두 가지 방법을 알고 있습니다.
Alexey, 내가 컴퓨터에 도착하면 더 일찍 할 수 없는지 보여드리겠습니다.
캔버스에 또는 개체에?
 
Nikolai Semko :
적어도 두 가지 방법을 알고 있습니다.

TextOut에서 앵커 매개변수를 설정합니다(그리고 개체 자체도 필요로 할 수 있음)

텍스트 크기를 계산하고 고려)

 
Andrei Trukhanovich :

TextOut에서 앵커 매개변수를 설정합니다(그리고 개체 자체도 필요로 할 수 있음)

텍스트 크기를 계산하고 고려)

오른쪽
 
Alexey Viktorov :
Nikolay, 텍스트를 오른쪽 상단 모서리에 정렬하는 것이 가능합니다. 반나절 화이팅 ... 오른쪽 모서리로 가져 왔는데 텍스트가 왼쪽에만 정렬됩니다. 제안할 수 있습니까?
 #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 :
적어도 두 가지 방법을 알고 있습니다.
Alexey, 내가 컴퓨터에 도착하면 더 일찍 할 수 없는지 보여드리겠습니다.
캔버스에 또는 개체에?
물론 캔버스에. 질문은 당신을 위한 것이기 때문입니다.
 
Andrei Trukhanovich :

TextOut에서 앵커 매개변수를 설정합니다(그리고 개체 자체도 필요로 할 수 있음)

텍스트 크기를 계산하고 고려)

이것은 내가 시도했다. 그것으로 어제 반나절도 고생했습니다. 내가 무언가를 변경하자마자 텍스트가 완전히 사라집니다. 그리고 나는 그것을 찾을 수 없습니다.
 
Nikolai Semko :

나는 그것을 의미하지 않았다. 오른쪽 구석에 배치할 수 있었습니다. 그러나 둘 이상의 문자열의 길이가 다른 경우 문자열의 첫 번째 문자에 맞춰 정렬됩니다. 그리고 라인을 라인의 마지막 문자에 맞춰 정렬하고 싶습니다.

이것이 첫 번째 줄입니다.

두 번째 줄.

그리고 이것은 세 번째 줄입니다.

여기 첫 번째 페이지의 예에서 코드의 두 번째 및 세 번째 부분은 픽셀 단위 또는 백분율로 이동을 사용합니다. 그러나 선은 왼쪽 가장자리에서 들여쓰기를 통해서만 자를 수 있습니다. 그러나 이것이 항상 편리한 것은 아닙니다. 특히 문자열의 길이가 변경될 수 있는 경우에는 더욱 그렇습니다. 예를 들어 "합계 = 10" 또는 "합계 = 1000"입니다.
 

Canvas의 주제가 사라진 것이 이상합니다. 이것은 내가 태곳적부터 해온 일입니다.

 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 - 글꼴 높이.

오른쪽 상단에 대한 PS 예 :)

 
Igor Zakharov :

Canvas의 주제가 사라진 것이 이상합니다. 이것은 내가 태곳적부터 해온 일입니다.

FS - 글꼴 높이.

오른쪽 상단에 대한 PS 예 :)

저도 몇 년 동안 그렇게 해왔습니다.

 

모두 알아냈습니다.

OBJ_BITMAP_LABEL 개체 는 오른쪽으로 정렬되어 있으며 가로 및 세로로 약간의 들여쓰기가 가능하며 OBJPROP_ANCHOR는 ANCHOR_RIGHT_UPPER에 할당됩니다. 그러면 리소스가 생성될 때 이미지의 너비가 설정됩니다. 그리고 이 값은 TextOut에 두 번째 매개변수로 넣어야 하며 텍스트는 "캔버스"의 오른쪽 가장자리에 맞춰 정렬됩니다.