Bibliotecas: Easy Canvas - página 8

 
Nikolai Semko:

Renomear não é difícil. Há o Ctrl+H

Mas eu concordo com o Andrei. Procure por #define T ou #include <Canvas\iCanvas.mqh> e coloque-o primeiro no projeto.

A pesquisa de arquivos é automática. Não há #define T em nenhum arquivo na pasta MQL5.

Consegui descobrir que há um conflito com algo no TypeToBytes.mqh da TradeTransactions https://www.mql5.com/pt/code/22166.

Essa biblioteca não é alterada há muito tempo, portanto, é provável que alguma inovação ou bug tenha aparecido em uma das novas compilações.)

 
Oleksii Chepurnyi:

Consegui descobrir que o conflito é com algo em TypeToBytes.mqh de TradeTransactions https://www.mql5.com/pt/code/22166

Essa biblioteca não é alterada há muito tempo, portanto, é provável que algum novo recurso ou bug tenha aparecido em uma das novas compilações)

Esse é um bug do compilador.

#include <TypeToBytes.mqh> // https://www.mql5.com/pt/code/16282

class CLASS
{
  void Method()
  {
    datetime T[1];
    
    T[0] = 0; // '[' - nome esperado
  };
};

void OnStart()
{
  datetime T[1];
  
  T[0] = 0; // OK
}
 
Entendi. Obrigado. Vou corrigi-lo, é claro.
 

Que bom, nós a encontramos! )


@fxsaber, você rastreia as ramificações para "suas" palavras-chave com algo automático ou apenas percorre todas as ramificações regularmente? Você é muito rápido para responder a perguntas "direcionadas".

 
Andrey Khatimlianskii:

@fxsaber, você rastreia as ramificações para "suas" palavras-chave com algo automático ou simplesmente percorre todas as ramificações regularmente? Você responde a perguntas "direcionadas" muito rapidamente.

Isso acontece por acaso.

 

Gostaria de esclarecer aos programadores interessados um ponto importante da operação do Kanvas no modo testador.
Um programador conhecido desta comunidade me fez esta pergunta:

- Por que, no modo testador, o painel criado em objetos é redesenhado em uma ordem de magnitude mais rápida do que o painel criado no kanvas, enquanto no modo normal tudo está bem com a velocidade do kanvas?

Depois de analisá-lo, entendi o motivo e a solução desse problema.

O problema é que, quando os objetos são redesenhados juntamente com o redesenho da tela inteira, a tela no testador é redesenhada não mais do que 30 quadros por segundo.

Os objetos são, em última análise, a mesma tela (interna), mas quando você altera as propriedades de um objeto, a tela do objeto não é formada (não é recalculada), mas é formada somente no momento da atualização da tela (ChartRedraw), o que acontece no testador (e no modo normal também) não mais frequentemente do que nosso olho pode distinguir as alterações, ou seja, não mais frequentemente do que ~ 32 quadros por segundo.

Vamos supor que o painel mude a cada tique. Então, no testador padrão, a tela será recalculada a cada tique, mas o redesenho no testador ainda não é mais frequente do que cerca de 30 milissegundos (cerca de 30 quadros por segundo).

Em outras palavras, o Kanvas será recalculado com muito mais frequência do que será realmente exibido na tela, portanto, há um consumo excessivo e desproporcional de recursos.

A solução para esse problema é controlar o recálculo e o redesenho do kanvas não mais do que uma vez a cada 15 a 30 milissegundos de tempo do computador, para que não haja ciclos desnecessários de recálculos vazios.

Por exemplo, assim:

void OnTick()
  {
  static uint lastCalc=0;
  uint cur=GetTickCount();
  if (cur-lastCalc>15) {
    ReDrawMyCanvas();
    lastCalc=cur;
   }
  }
 

Boa tarde.

   if(width==0) {width=W.Width;   FullWinCanvW=true; Xpos=0;} else FullWinCanvW=false;
   if(height==0){height=W.height[SubWin]; FullWinCanvH=true; Ypos=0;} else FullWinCanvH=false;
   Name+=IntegerToString(rand())+IntegerToString(rand());
   Handle=ChartGetInteger(chart_id,CHART_WINDOW_HANDLE,SubWin);
   if(!CreateBitmapLabel(chart_id,SubWin,Name,Xpos,Ypos,width,height,formatCF))
      Print("Error creating canvas: ",GetLastError());

Por que essa linha no construtor?

O CCanvas também adiciona muito ao nome, incluindo rand. Às vezes, o nome é tão longo que excede o comprimento permitido)

 
Oleksii Chepurnyi:

Boa tarde.

Por que essa linha no construtor?

O CCanvas também adiciona muito ao nome, incluindo rand. Às vezes, o nome é tão longo que excede o comprimento permitido)

Sim, concordo.
Em minha versão do iCanvas, já corrigi isso, mas aqui parece que esqueci.

 
Versão 1.40
Correção de alguns erros.
Em particular, foi corrigido um erro: o objeto iCanvas não era redimensionado automaticamente na vertical se houvesse mais de um objeto.
 
Última versão 1.40
Arquivos anexados:
iCanvas.mqh  48 kb