La tela è forte! - pagina 83

 

Grazie a tutti coloro che suggeriscono una soluzione. Ho bisogno di tempo per testare tutto e applicarlo ai miei prodotti. Quello che può funzionare su prodotti semplici, devo testarlo su prodotti più complessi. L'idea del timer è davvero eccellente. Non risolve tutti i problemi, ma risolve altri problemi che ho incontrato.

Non sto ignorando nessuno. Sarò in grado di rispondere la prossima settimana con ciò che ha funzionato e ciò che non ha funzionato.

 
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ì, c'è solo una piccola sfumatura non documentata.
Se si utilizza il canale alfa (COLOR_FORMAT_ARGB_NORMALIZE), è necessario riempirlo non di zeri prima di creare la bitmap.

altrimenti i bordi dei caratteri saranno "frastagliati".

Grazie.


E grazie per tutto il tuo lavoro disinteressato su Canvas.

Ho imparato molto e implemento canvas ai miei grafici non regolari in mt4, (Renko per esempio) che ha sostituito migliaia di oggetti grafici.

 
Jon_G #:

Grazie.


E grazie per tutto il tuo lavoro disinteressato su Canvas.

Ho imparato molto e implemento canvas ai miei grafici non regolari in mt4, (Renko per esempio) che ha sostituito migliaia di oggetti grafici.

Grazie per le gentili parole.

Sì, migliaia di oggetti iniziano a rallentare incredibilmente l'interfaccia.
Questa è una grave svista di MetaQuotes.
Un canvas ben costruito non causa lag anche con 10.000 oggetti virtuali.

 

Codice Base

PNG

Nikolai Semko, 2023.07.15 07:24

Dimenticate i file BMP come un brutto sogno. Con questa libreria, sarete in grado di utilizzare il formato di immagine PNG, più avanzato e compatto, per i vostri programmi.

Ho finalmente implementato c PNG.
Ho ricevuto l'implementazione da @Zorro(https://www.mql5.com/ru/forum/92113#comment_2672596)
Date un'occhiata. Finora non ho avuto alcun problema.



 
Nikolai Semko #:
Finalmente implementato c PNG.
.

Bello e utile. Solo per interesse, può essere utilizzato in MT4?

 
Vitaliy Kuznetsov #:

Bello e utile. Solo per curiosità, è possibile utilizzarlo in MT4?

Certo
Farò una prova. Penso che il codice rimarrà quasi lo stesso.
 

Nikolai, hai trovato da qualche parte del codice pronto su kanvas che permette di scorrere la finestra?


 
Vitaliy Kuznetsov #:

Nikolai, hai trovato da qualche parte del codice pronto su kanvas che permette di scorrere la finestra?


Anatoly e Pyotr hanno realizzato delle implementazioni.

Ma non le ho usate. Per questo non posso giudicare.

 
Voglio creare un'interfaccia utente con la classe Canvas. Il mio unico problema è che non so come rendere mobile la dashboard sul grafico.
Ho cercato molto ma non ho trovato nessun esempio. Vi sarei grato se poteste darmi un suggerimento.


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

}

//+------------------------------------------------------------------+
File:
screenshot.png  18 kb
Motivazione: