Legal, com certeza!
E pode até ser usado para coisas úteis ;)
Legal, com certeza!
E pode até ser usado para coisas úteis ;)
Para que as pessoas comecem a usar Kanvas para coisas úteis, você precisa começar mostrando coisas inúteis. :))
Você precisa mover o array m_pixels[] de protegidos: para público no arquivo Canvas.mqh antes da compilação:
Você não precisa mudar nada na SB.
class CCanvas2 : public CCanvas { private: int Pos; public: CCanvas2* operator []( const int iPos ) { this.Pos = iPos; return(&this); } void operator =( const uint Color ) { this.m_pixels[this.Pos] = Color; } };
CCanvas2 C; //.. // C.m_pixels[pos]=XRGB(h[int(d*11520)],h[int(d*17920)],h[int(d*6400)]); C[pos]=XRGB(h[int(d*11520)],h[int(d*17920)],h[int(d*6400)]);
Você não precisa mudar nada na SB.
Legal! :))
Mas infelizmente, não é grátis.
Verifiquei. A desaceleração geral na MT5 foi de ~11%.
No seu caso, 1% é utilizado a partir do CCanvas. Experimente sem CCanvas. O código não será um pouco mais complicado e a velocidade será ainda mais rápida.
É claro que você também pode prescindir da classe CCanvas. Mas o código vai aumentar, enquanto a velocidade de processamento não vai melhorar, uma vez que tudo que eu realmente uso da classe CCanvas é m_pixels[] array de pixels de recursos gráficos (e funções Update() e Destroy(), mas eles não serão de qualquer utilidade, e mal vamos economizar dinheiro neles).
Mas uma matriz ainda é uma matriz. Como você pode fazer isso mais rápido? Você não pode. Apenas a classe CCanvas cuida de alguma rotina, quando você cria um recurso, atualiza-o (ou melhor, recria-o) e o apaga.
Ou você está dizendo que a C.m_pixels[] não se compila como acesso direto ao array? Eu acho que é direto. Sem nenhum gesto intermediário. Ou eu estou errado?
Seria ainda mais lógico para os desenvolvedores desta classe empurrar o CreateBitmapLabel para dentro do próprio construtor da classe para evitar que ele se aproxime. Se você criar uma nova instância da classe sem parâmetros, então você cria uma tela com o tamanho na janela (como no meu caso), e se você quiser, você pode especificar parâmetros ao criar uma instância da classe. Eu mesmo o fiz dessa maneira.
Claro, eu poderia prescindir da aula de CCanvas. Mas o código vai aumentar, mas não haverá ganho de velocidade, porque tudo que eu uso da classe CCanvas é a matriz de recursos gráficos m_pixels[] (e funções Update() e Destroy(), mas você pode negligenciá-los, porque não economizarão dinheiro).
Mas uma matriz ainda é uma matriz. Como você pode fazer isso mais rápido? Você não pode. Apenas a classe CCanvas cuida de alguma rotina, quando você cria um recurso, atualiza-o (ou melhor, recria-o) e o apaga.
Ou você está dizendo que a C.m_pixels[] não se compila como acesso direto ao array? Eu acho que é direto. Sem nenhum gesto intermediário. Ou eu estou enganado?
CCanvas é um invólucro para ResourceCreate. Assim, por exemplo, você tem 20 imagens prontas sob a forma de matrizes. Se você quiser mudá-los via tela, você terá que fazer o caro ArrayCopy+Update.
E se você fizer isso sem CCanvas, você precisará apenas de ResourceCreate+ChartRerdraw. Coloquei vários trabalhos de desenho dinâmico na kodobase. Era óbvio ali que o CCanvas não é bom.
Você precisa mover o array m_pixels[] de protegidos: para público no arquivo Canvas.mqh antes de compilar:
Você tem certeza de que a PixelSet não vai ajudar?
É claro que isso ajudará, mas será terrivelmente lento. Primeiro, uma chamada de função não é livre, porque os parâmetros são passados e salvos (no PixelSet, não é nem por referência), todos os registros devem ser empurrados para a pilha e depois puxados novamente para fora. Em segundo lugar, a própria função verifica se X e Y se enquadram na faixa especificada, e em terceiro lugar, calcula o índice da matriz. E eu não preciso de tudo isso porque já tenho um índice e em meu algoritmo não posso sair do alcance.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Eu me propus uma tarefa: demonstrar as capacidades dos gráficos personalizados através da classe CCanvas em um código curto.
Eis o que resultou disso.
Este script funciona tanto na MQL5 quanto na MQL4. Mas é muito mais rápido no MT5.
Cada quadro é único e não se repete, ou seja, o roteiro não é cíclico.
Antes de compilar, mover o array m_pixels[] de protegidos: para o público em Canvas.mqh: