El lienzo es genial. - página 83

 

Gracias a todos los que me sugieren una solución. Necesito algo de tiempo para probarlo todo y aplicarlo a mis productos. Lo que puede funcionar en productos sencillos, necesito probarlo en otros más complejos. La idea del temporizador es realmente top. No resuelve todos los problemas, pero resuelve otros problemas que he encontrado.

No ignoro a nadie. La semana que viene podré responder con lo que funcionó y lo que no.

 
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 #:

Sí, sólo hay un pequeño matiz no documentado.
Si usas el canal alfa (COLOR_FORMAT_ARGB_NORMALIZE), debes rellenarlo no con ceros antes de crear tu mapa de bits.

De lo contrario, los bordes de los caracteres quedarán "dentados".

Gracias.


Y gracias por todo tu trabajo desinteresado en Canvas.

He aprendido mucho e impementing lienzo a mis gráficos no regulares en mt4, (Renko por ejemplo) que ha sustituido a miles de gráficos-objetos.

 
Jon_G #:

Gracias.


Y gracias por todo tu trabajo desinteresado en Canvas.

He aprendido mucho y impementing lienzo a mis gráficos no regulares en mt4, (Renko por ejemplo) que ha sustituido a miles de gráficos-objetos.

Gracias por las amables palabras.

Sí, miles de objetos empiezan a ralentizar increíblemente la interfaz.
Este es un grave descuido de MetaQuotes.
Un lienzo bien construido no causa lags incluso con 10.000 objetos virtuales.

 

Código base

PNG

Nikolai Semko, 2023.07.15 07:24

Olvídese de los archivos BMP como de un mal sueño. Con esta librería, ahora podrás utilizar el más avanzado y compacto formato de imagen PNG para tus programas.

Por fin he implementado c PNG.
Conseguí la implementación de @Zorro(https://www.mql5.com/ru/forum/92113#comment_2672596)
Compruébalo por favor. No he tenido ningún problema hasta ahora.



 
Nikolai Semko #:
Por fin implementado c PNG.
.

Genial y útil. Sólo por interés, ¿se puede utilizar en MT4?

 
Vitaliy Kuznetsov #:

Genial y útil. Sólo por curiosidad, ¿se puede utilizar en MT4?

Claro
Voy a intentarlo. Creo que el código seguirá siendo casi el mismo.
 

Nikolai, ¿has encontrado en algún sitio código listo en kanvas que permita desplazar la ventana?


 
Vitaliy Kuznetsov #:

Nikolai, ¿has encontrado en algún sitio código listo en kanvas que permita desplazar la ventana?


Anatoly y Pyotr tenían implementaciones

Pero no lo he usado. Por eso no puedo juzgar.

 
Quiero crear una interfaz de usuario con la clase Canvas. Mi único problema es que no se como hacer que el dashboard sea movible sobre el gráfico.
He buscado mucho pero no he encontrado ningún ejemplo. Te agradecería si me pudieras dar una pista.


//+------------------------------------------------------------------+
//|                                                 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)
{

}

//+------------------------------------------------------------------+
Archivos adjuntos:
screenshot.png  18 kb
Razón de la queja: