A lona é legal! - página 83

 

Obrigado a todos que estão sugerindo uma solução. Preciso de algum tempo para testar tudo e aplicá-lo aos meus produtos. O que pode funcionar em produtos simples, preciso testar em produtos mais complexos. A ideia do cronômetro é realmente excelente. Não resolve todos os problemas, mas resolve outros problemas que encontrei.

Não estou ignorando ninguém. Poderei responder na próxima semana com o que funcionou e o que não funcionou.

 
Canvas based indicators: Filling channels with transparency
Canvas based indicators: Filling channels with transparency
  • www.mql5.com
In this article I'll introduce a method for creating custom indicators whose drawings are made using the class CCanvas from standard library and see charts properties for coordinates conversion. I'll approach specially indicators which need to fill the area between two lines using transparency.
 
Nikolai Semko #:

Sim, há apenas uma pequena nuance não documentada.
Se você usar o canal alfa (COLOR_FORMAT_ARGB_NORMALIZE), deverá preenchê-lo não com zeros antes de criar o bitmap.

Caso contrário, as bordas dos caracteres ficarão "irregulares".

Obrigado.


E obrigado por todo o seu trabalho altruísta no Canvas.

Aprendi muito e implementei o Canvas em meus gráficos não regulares no MT4 (Renko, por exemplo), o que substituiu milhares de objetos gráficos.

 
Jon_G #:

Obrigado.


E obrigado por todo o seu trabalho altruísta no Canvas.

Aprendi muito e implementei o Canvas em meus gráficos não regulares no MT4 (Renko, por exemplo), o que substituiu milhares de objetos gráficos.

Obrigado por suas palavras gentis.

Sim, milhares de objetos começam a deixar a interface incrivelmente mais lenta.
Esse é um sério descuido da MetaQuotes.
Uma tela bem construída não causa atrasos, mesmo com 10.000 objetos virtuais.

 

Base de código

PNG

Nikolai Semko, 2023.07.15 07:24

Esqueça os arquivos BMP como um sonho ruim. Com essa biblioteca, agora você poderá usar o formato de imagem PNG, mais avançado e compacto, em seus programas.

Finalmente implementei o c PNG.
Recebi a implementação de @Zorro(https://www.mql5.com/ru/forum/92113#comment_2672596)
Dê uma olhada. Não tive nenhum problema até agora.



 
Nikolai Semko #:
Finalmente implementado o c PNG.
.

Legal e útil. Só por curiosidade, ele pode ser usado no MT4?

 
Vitaliy Kuznetsov #:

Legal e útil. Só por curiosidade, isso pode ser usado no MT4?

Com certeza
Vou tentar. Acho que o código permanecerá praticamente o mesmo.
 

Nikolai, você encontrou algum código pronto no kanvas que permita rolar a janela?


 
Vitaliy Kuznetsov #:

Nikolai, você encontrou algum código pronto no kanvas que permita rolar a janela?


Anatoly e Pyotr tinham implementações

Mas eu não as usei. Por isso não posso julgar.

 
Quero criar uma interface de usuário com a classe Canvas. Meu único problema é que não sei como tornar o painel móvel no gráfico.
Pesquisei muito, mas não encontrei nenhum exemplo. Agradeceria se você pudesse dar uma dica.


//+------------------------------------------------------------------+
//|                                                 Canvas Panel.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

#include <Canvas\Canvas.mqh>
CCanvas  canvas;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create canvas
   if(!canvas.CreateBitmapLabel(0, 0, "Dashboard", 40, 40, 400, 200, COLOR_FORMAT_ARGB_NORMALIZE))
   {
      Print("Error creating canvas: ", GetLastError());
      return(INIT_FAILED);
   }
   
   canvas.Erase(ColorToARGB(clrGray, 200));
   canvas.Update(true);

   ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true);

//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy application dialog
   canvas.Destroy();
   ChartRedraw();
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
//---

//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{

}

//+------------------------------------------------------------------+
Arquivos anexados:
screenshot.png  18 kb