Создайте OBJ_LABEL с текстом, закрепленным справа от изображения. - страница 2

 
Alexey Viktorov:

Para isso, OBJ_EDIT é mais adequado

O campo de entrada tem as seguintes propriedades necessárias: cor de texto, cor de fundo, cor de borda e, mais importante, a capacidade de editar, que transforma o campo de entrada em um rótulo regular com características mais avançadas. No seu caso, ele substituirá dois objetos...

Para coordenadas, você precisa inserir o preço de break-even e o tempo na função acima. Obtenha coordenadas em pixels e especifique-as quando você criar um OBJ_EDIT ou OBJ_RECTANGLE_LABEL

Я сделал это так, и объект продолжал работать без привязки к цене.

***


Изображение было привязано к координатам X и Y


 
Rafael Magalhães:


Пожалуйста вставляйте код правильно: при редактировании сообщения нажмите кнопку     Code и во всплывающее окно вставьте свой код
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 
Извините, я не заметил, что сообщение было неполным.

Я сделал это так:

***


void ObjetoEdit(const long             chart_ID=0,               // ID do gráfico
                const string           name="Edit",              // nome do objeto
                const int              sub_window=0,             // índice da sub-janela
                const int              x=0,                      // coordenada X
                const int              y=0,                      // coordenada Y
                const int              width=50,                 // largura
                const int              height=18,                // altura
                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // tipo de alinhamento
                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // canto do gráfico para ancoragem
                const color            back_clr=clrWhite,        // cor do fundo
                const color            border_clr=clrNONE,       // cor da borda
                const bool             back=true,                // no fundo
                const bool             hidden=true,              // ocultar na lista de objeto
                const long             z_order=0)                // prioridade para clicar no mouse
   {
      
      int      xx     =(int)20;
      int      yy     =(int)100;
      datetime dt     =0;
      double   price =120000;
      int      window=0;
      
      //--- Converter as coordenadas X e Y em termos de data/hora
      ChartXYToTimePrice(0,x,y,window,dt,price);
      
      ObjectCreate(0,name,OBJ_EDIT,sub_window,x,y);
      //--- definir coordenadas do objeto
      ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); // Distancia esquerda
      ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); // Distancia baixo
      //--- definir tamanho do objeto
      ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
      ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
      //--- definir o tipo de alinhamento do texto no objeto
      ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
      //--- definir o canto do gráfico onde as coordenadas do objeto são definidas
      ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
      //--- definir a cor de fundo
      ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
      //--- definir a cor da borda
      ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
      //--- exibir em primeiro plano (false) ou fundo (true)
      ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
      //--- ocultar (true) ou exibir (false) o nome do objeto gráfico na lista de objeto 
      ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
      //--- definir a prioridade para receber o evento com um clique do mouse no gráfico
      ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
      
      ChartRedraw();
      
   }


Но даже если бы я сделал это таким образом, OBJ_EDIT не был привязан к цене. Он был привязан только к координатам X и Y.


Моя цель была такой:

Objeto

 
Большое вам спасибо за помощь. Мне удалось это решить.

Здесь я выражаю всем вам свою искреннюю благодарность за внимание. Я бразилец, и сообщество в моей стране могло бы быть таким же, как вы.

Я надеюсь, что смогу что-то сделать для вас в будущем.

Вот код, который решил мою проблему:

             long ChartNm = ChartID();
             int SubWin = 0;
             datetime GimmeTime = iTime(Symbol(),PERIOD_M5,0);
             double CurrPrice = PositionGetDouble(POSITION_PRICE_OPEN);//SymbolInfoDouble(Symbol(),SYMBOL_ASK);
             int x,y;
             ChartTimePriceToXY(ChartNm,SubWin,GimmeTime,CurrPrice,x,y);
             
             ObjectCreate(ChartNm,"Rec",OBJ_RECTANGLE_LABEL,SubWin,0,0);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_XDISTANCE,x);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_YDISTANCE,y);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_XSIZE,70);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_YSIZE,20);
             ObjectSetInteger(ChartNm,"Rec",OBJPROP_BGCOLOR,clrRed);
             
             ObjectCreate(ChartNm,"Text",OBJ_LABEL,SubWin,0,0);
             ObjectSetInteger(ChartNm,"Text",OBJPROP_XDISTANCE,x+2);
             ObjectSetInteger(ChartNm,"Text",OBJPROP_YDISTANCE,y+1);
             ObjectSetInteger(ChartNm,"Text",OBJPROP_COLOR,clrWhite);
             ObjectSetInteger(ChartNm,"Text",OBJPROP_FONTSIZE,10);
             ObjectSetString(ChartNm,"Text",OBJPROP_TEXT,"text");
 
Rafael Magalhães:

Но даже если бы я сделал это таким образом, OBJ_EDIT не был привязан к цене. Он был привязан только к координатам X и Y.


Моя цель была такой:

Вот вам скрипт для создания поля ввода которое полностью заменяет прямоугольник и лейбл вместе.

Если этот код поместить в советник или индикатор и будет работать на каждом тике, то объект будет на каждом тике перемещаться вместе с ценой Ask


/********************Script program start function*******************/
void OnStart()
 {
  long ChartNm = ChartID();
  int SubWin = 0;
  datetime GimmeTime = iTime(Symbol(), PERIOD_M5, 0)+PeriodSeconds()*12;
  double CurrPrice = SymbolInfoDouble(Symbol(), SYMBOL_ASK); //PositionGetDouble(POSITION_PRICE_OPEN);//
  int x, y;
  ChartTimePriceToXY(ChartNm, SubWin, GimmeTime, CurrPrice, x, y);
  if(ObjectFind(ChartNm, "Rec") < 0)
   {
    ObjectCreate(ChartNm, "Rec", OBJ_EDIT, SubWin, 0, 0);
    ObjectSetInteger(ChartNm, "Rec", OBJPROP_XSIZE, 70);
    ObjectSetInteger(ChartNm, "Rec", OBJPROP_YSIZE, 20);
    ObjectSetInteger(ChartNm, "Rec", OBJPROP_READONLY, true);
    ObjectSetInteger(ChartNm, "Rec", OBJPROP_BGCOLOR, clrRed);
    ObjectSetInteger(ChartNm, "Rec", OBJPROP_COLOR, clrWhite);
    ObjectSetInteger(ChartNm, "Rec", OBJPROP_FONTSIZE, 10);
    ObjectSetString(ChartNm,  "Rec", OBJPROP_TEXT, "text");
    ObjectSetInteger(ChartNm, "Rec", OBJPROP_ALIGN, ALIGN_CENTER);
   }
  ObjectSetInteger(ChartNm, "Rec", OBJPROP_XDISTANCE, x);
  ObjectSetInteger(ChartNm, "Rec", OBJPROP_YDISTANCE, y);
  ChartRedraw();
 }/******************************************************************/
 
Alexey Viktorov:

Вот вам скрипт для создания поля ввода которое полностью заменяет прямоугольник и лейбл вместе.

Если этот код поместить в советник или индикатор и будет работать на каждом тике, то объект будет на каждом тике перемещаться вместе с ценой Ask


Спасибо за информацию. Я реализовал это так, как вы мне дали, и это намного лучше. Я очень благодарен, что все помогли мне с этой проблемой.

 

Мой последний код оказался таким. Спасибо вам всем!


void ObjetoEdit2()
   {
      
         long ChartNm = ChartID(); //Encontrando o Chart Id
         int SubWin = 0;
         datetime GimmeTime = TimeCurrent();
         int rec_largura=70; //Largura do retangulo
         int rec_altura=20; //Altura do retangulo
         double CurrPrice = SymbolInfoDouble(Symbol(),SYMBOL_LAST);
         int width=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0); //Encontra o tamanho da largura da janela em pixel
         int x,y;
         
         ChartTimePriceToXY(ChartNm,SubWin,GimmeTime,CurrPrice,x,y); //Transforma valores de Tempo e Preço para Pixel
             
      if(ObjectFind(ChartNm, "Rec") < 0)
         {
          ObjectCreate(ChartNm, "Rec", OBJ_EDIT, SubWin, 0, 0);
          ObjectSetInteger(ChartNm, "Rec", OBJPROP_XSIZE, 70);
          ObjectSetInteger(ChartNm, "Rec", OBJPROP_YSIZE, 20);
          ObjectSetInteger(ChartNm, "Rec", OBJPROP_READONLY, true);
          ObjectSetInteger(ChartNm, "Rec", OBJPROP_BGCOLOR, clrRed);
          ObjectSetInteger(ChartNm, "Rec", OBJPROP_COLOR, clrWhite);
          ObjectSetInteger(ChartNm, "Rec", OBJPROP_FONTSIZE, 10);
          ObjectSetString(ChartNm,  "Rec", OBJPROP_TEXT, "text");
          ObjectSetInteger(ChartNm, "Rec", OBJPROP_ALIGN, ALIGN_CENTER);
         }
        ObjectSetInteger(ChartNm,"Rec",OBJPROP_XDISTANCE,(width-rec_largura));
        ObjectSetInteger(ChartNm,"Rec",OBJPROP_YDISTANCE,y-(rec_altura/2));
        
        ChartRedraw();
 }
Причина обращения: