Despejando o objeto

 

Saudações, caros programadores!

"Para terminal MT4".

Gostaria de receber algumas dicas de vocês. Deparei-me com a seguinte nuance...

1. eu crio um objeto retângulo - ele funciona:

2. eu defino as propriedades:

- estilo - funcionou;

- largura de linha - trabalhada;

- cor - funcionou;

- preencher - não quer ouvir;

Eu brincava e brincava e descobri que o objeto retângulo é criado com "Desenhar objeto como fundo" verificado por padrão. Desde que esta caixa de seleção esteja marcada, o retângulo não escuta os comandos do programa, e se você remover manualmente esta caixa de seleção das propriedades do objeto, então você pode controlar o preenchimento do programa.

A questão é por que o objeto não está configurado para "encher" a propriedade imediatamente? O que eu faço de errado e o que eu não sei?

Por favor, ajude quem puder!

Abaixo está o código utilizado:

#janela_do_cartão_indicador de propriedade

int start()
{
long current_chart_id=ChartID();
//
string obj_name1="Rectangle1";
//
duplo Preço_Nível_1 = 1296; // preço do ouro
duplo Preço_Nível_2 = 1293;
//
datetime Left_Side_1 = Hora[9];
// datetime Right_Side_1 = Time[0] + PeriodSeconds() * 7;
//
const color clr = clrBeige;
const ENUM_LINE_STYLE style = STYLE_DASH;
largura const int = 1;
const bool fill = falso;
//
ObjetoCriar (ID_do_cartão_actual, nome_objecto1, OBJ_RECTANGLE, 0, Lado_Esquerdo_1, Nível_de_preço_1, Lado_direito_1, Nível_de_preço_2);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_COLOR, clr);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_STYLE, estilo);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_WIDTH, width);
ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false); // não definido imediatamente

retorno(0);

 

Tente

//+------------------------------------------------------------------+
void Prn_Rect_Label(string Name, int X, int Y, int width, int height, color CLR, int Corner, bool back)
   {
      ObjectDelete(0,Name);
      ObjectCreate(0,Name,OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(0,Name,OBJPROP_XDISTANCE,X);
      ObjectSetInteger(0,Name,OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,Name,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,Name,OBJPROP_YSIZE,height);
      ObjectSetInteger(0,Name,OBJPROP_BGCOLOR,CLR);
      ObjectSetInteger(0,Name,OBJPROP_CORNER,Corner);
      ObjectSetInteger(0,Name,OBJPROP_BACK,back);
      return;
   }
 
Qual é o truque? Por que o objeto não responde ao preenchimento sem manipulação adicional?
 
Renat Akhtyamov:

Tente

Não é preciso apagá-lo, é preciso verificá-lo para ver se ele existe. Se ela não existe, então crie-a. E, em seguida, definir os parâmetros.
 
Então, por que o enchedor não está ouvindo?
 
Artyom Trishkin:
Não é preciso apagá-lo, é preciso verificá-lo para ver se ele existe. Se ela não existe, então crie-a. E depois estabelecer parâmetros.

Acordado

encontrar primeiro.

Mas se o objeto for apagado e recriado em cada carrapato com o mesmo nome, a busca por um objeto existente conhecido é desnecessária.
 
5211845:
Então, por que o preenchimento não está sendo ouvido?

e se assim for (falso --> verdadeiro):

   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, true); // не задается сразу
 

Não funciona. Eu já tentei a seguinte função

ObjectSet (obj_name1, OBJPROP_FILL, true | false);

 
Este código tem que funcionar de alguma forma? Talvez seja uma falha em meu terminal?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

 
5211845:
Em geral, este código deve funcionar? Talvez seja uma falha em meu terminal?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

É claro.

Compare este código com seu próprio código em detalhes e coloque-o no OnTimer(), pois não há carrapatos de saída, ou execute-o temporariamente no OnInit():

https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
//| Cоздает прямоугольник по заданным координатам                    |               time1=0,                            price1=0,                         time2=0,                            price2=0,                        width=1,            //| Перемещает точку привязки прямоугольника                         |...
 

Eu baseei meu código neste exemplo. Eu simplesmente não consigo entender qual é a diferença. Somente que existe uma janela para os parâmetros de entrada.

E se eu não precisar desta janela? Se eu quiser apenas criar um objeto com os parâmetros que eu quero. Isto é possível?