Erros, bugs, perguntas - página 2701

 
Slava:
Quais são as coordenadas aproximadas do primeiro rectângulo e do segundo rectângulo? Serão eles o mesmo?
O primeiro rectângulo é o substrato. É apenas o pano de fundo. Está em todo o ecrã.
O segundo rectângulo é a coluna. Encontra-se no primeiro rectângulo.
Vou tentar mostrar-vos tudo amanhã.
 
Slava:

Não está a tocar.

Não deu quaisquer passos para reproduzir

O que é que fez?

OK. Mais uma vez.

1. Criar um objecto gráfico, por exemplo, um rectângulo. Criá-lo à mão;

2. alterar programmaticamente a sua propriedade OBJPROP_ZORDER para 1;

3. Vejam os disparates que descrevi.

O código para alterar a propriedade pressionando uma tecla parece-se com isto.

if( lparam == KEY_Z )
{
//--- Получаем свойство приоритета клика
int zorder = (int)ObjectGetInteger( 0, _name, OBJPROP_ZORDER );
//--- Меняем свойство приоритета клика
zorder = ( zorder == 0 ) ? 1 : 0;
//--- Устанавливаем новое свойство приоритета
ObjectSetInteger( 0, _name, OBJPROP_ZORDER, zorder );
} 
O nome do objecto _nome é preservado seleccionando (clicando sobre) o objecto no gráfico.
 
Alexey Kozitsyn:

O que é que fez?

OK. Mais uma vez.

1. Criar um objecto gráfico, por exemplo, um rectângulo. Criá-lo à mão;

2. alterar programmaticamente a sua propriedade OBJPROP_ZORDER para 1;

3. Vejam os disparates que descrevi.

O código de alteração da propriedade pressionando a tecla parece-se com isto.

O nome do objecto _nome é preservado seleccionando (clicando sobre) o objecto no gráfico.

Criei um objecto gráfico de linha horizontal à mão.

Mudou a ordem z programática do guião.

Vejo que a ponta do instrumento aparece.


Criei manualmente um rectângulo (um rectângulo ligado aos preços e não OBJ_RECTANGLE_LABEL)

Mudei a ordem z de um guião semelhante.

Vejo que a ponta de ferramenta aparece


Portanto, há algo que não disse

 
Slava:

Criou um objecto gráfico de linha horizontal à mão.

Mudou a ordem-z do guião

Vejo que a ponta do instrumento aparece.


Criei manualmente um objecto gráfico rectângulo (um rectângulo ligado a preços - tempos, não OBJ_RECTANGLE_LABEL)

Mudei a ordem z de um guião semelhante.

Vejo que a ponta do instrumento aparece.


Por isso, há algo que não disse.

Ok, verificar novamente.

No build 2361 verificou-o?

Foi actualizado.

Verificado novamente. O problema mantém-se.

Experimente assim: pegue no meu indicador, crie um rectângulo (que é OBJ_RECTANGLE) na TF M1. Clique sobre ele com o rato, depois prima z várias vezes. Verá no registo que a ordem z se tornou -1, 0, 1. Em seguida, clicar no gráfico para além deste rectângulo. Depois tente ver a sua ponta de ferramenta, realce-a.

É provavelmente uma questão de definir a ordem z de objectos = -1. Antes disso, eu pensava que o problema era o valor de 1. Desculpas.

Arquivos anexados:
 
Alexey Kozitsyn:

Voltar a verificar. O problema mantém-se.

Tente desta forma:

Agora as linhas de montanha são criadas por defeito (sem opção de desmarcar por clique do rato) + sem destaque de pontas de ferramentas em qualquer gráfico... Algo está partido. Não há mais nenhum indicador no gráfico.

 
Alexey Kozitsyn:

OK, vou verificar novamente.

Já verificou a construção 2361?

Actualizado.

Verificado duas vezes. O problema mantém-se.

Tente desta forma: pegue no meu indicador, crie um rectângulo (que é OBJ_RECTANGLE) na TF M1. Clique sobre ele com o rato, depois prima z várias vezes. Verá no registo que a ordem z se tornou -1, 0, 1. Em seguida, clicar no gráfico para além deste rectângulo. Depois tente ver a sua ponta de ferramenta, realce-a.

É provavelmente uma questão de definir a ordem z de objectos = -1. Antes disso, pensava que o problema estava no valor de 1.

Parece ser o problema com ChartRedraw(). É ainda melhor reproduzi-lo quando se prende o rectângulo para trabalhar e se pressiona alternadamente o botão esquerdo e a tecla z sobre ele. Desta forma, este objecto torna-se "morto". Se criar outro rectângulo mais tarde, está bem.

 
Slava:

O que faço quando não consigo desmarcar as linhas gráficas com o LKM? Atrapalha...

 
Alexey Kozitsyn:

Parece ser sobre ChartRedraw(). Toca ainda melhor quando se prende um rectângulo para trabalhar e se pressiona alternadamente o botão esquerdo e a tecla z sobre ele. Desta forma, este objecto torna-se "morto". Se criar outro rectângulo mais tarde, está bem.

Aqui está o meu perito, sobre o qual verifiquei novamente

//+------------------------------------------------------------------+
//|                                                   TestZOrder.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#define  OBJECT_NAME1 "RectangleLabel1"
#define  OBJECT_NAME2 "RectangleLabel2"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ObjectCreate(0,OBJECT_NAME1,OBJ_RECTANGLE_LABEL,0,0,0);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_YDISTANCE,100);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_XSIZE,300);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_YSIZE,200);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_BGCOLOR,clrNONE);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetString(0,OBJECT_NAME1,OBJPROP_TOOLTIP,OBJECT_NAME1);
//---
   ObjectCreate(0,OBJECT_NAME2,OBJ_RECTANGLE_LABEL,0,0,0);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_XDISTANCE,250);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_YDISTANCE,120);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_XSIZE,250);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_YSIZE,150);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_BGCOLOR,clrNONE);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetString(0,OBJECT_NAME2,OBJPROP_TOOLTIP,OBJECT_NAME2);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,OBJECT_NAME1);
   ObjectDelete(0,OBJECT_NAME2);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      long zorder=ObjectGetInteger(0,sparam,OBJPROP_ZORDER);
      PrintFormat("%s object clicked  lparam=%I64d  dparam=%.16g  zorder=%I64d",sparam,lparam,dparam,zorder);
      zorder=1-zorder;
      ObjectSetInteger(0,sparam,OBJPROP_ZORDER,zorder);
      zorder=ObjectGetInteger(0,sparam,OBJPROP_ZORDER);
      PrintFormat("%s zorder set to %I64d",sparam,zorder);
     }
  }
//+------------------------------------------------------------------+

Tudo é normal, as pontas das ferramentas são exibidas de acordo com a ordem z

 
Alexey Kozitsyn:

O que faço quando não consigo desmarcar as linhas gráficas com o LKM? Interfere com...

O que quer dizer com "não pode"?

Dê-me os detalhes!

 
Slava:

O que quer dizer com "não pode"?

Dê-me os detalhes!

Pato... aqui... experimentação com o indicador do posto anterior. E... algo se partiu. É para que agora quando se cria uma linha de montanha, esta seja seleccionada, e esta selecção não possa ser removida com um duplo clique na linha com o rato. Não posso calar-me - a selecção não pode ser removida. Em qualquer gráfico, mesmo um gráfico vazio.