Leinwand ist cool! - Seite 83

 

Vielen Dank an alle, die eine Lösung vorschlagen. Ich brauche etwas Zeit, um alles zu testen und es auf meine Produkte anzuwenden. Was bei einfachen Produkten funktionieren kann, muss ich bei komplexeren Produkten testen. Die Idee mit dem Timer ist wirklich top. Sie löst nicht alle Probleme, aber sie löst andere Probleme, auf die ich gestoßen bin.

Ich will niemanden ignorieren. Ich werde nächste Woche darauf antworten können, was funktioniert hat und was nicht.

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

Ja, es gibt nur eine kleine undokumentierte Nuance.
Wenn Sie den Alphakanal verwenden (COLOR_FORMAT_ARGB_NORMALIZE), müssen Sie ihn nicht mit Nullen füllen, bevor Sie Ihre Bitmap erstellen.

Andernfalls werden die Kanten der Zeichen "gezackt" sein.

Dankeschön.


Und vielen Dank für all Ihre selbstlose Arbeit an Canvas.

Ich habe viel gelernt und impementing Leinwand zu meinem nicht regulären Charts in mt4, (Renko zum Beispiel), die Tausende von Chart-Objekte ersetzt hat.

 
Jon_G #:

Danke.


Und vielen Dank für all Ihre selbstlose Arbeit auf Canvas.

Ich habe viel gelernt und impementing Leinwand zu meinem nicht regulären Charts in mt4, (Renko zum Beispiel), die Tausende von Chart-Objekte ersetzt hat.

Danke für die freundlichen Worte.

Ja, Tausende von Objekten verlangsamen das Interface ungemein.
Dies ist ein schwerwiegendes Versäumnis von MetaQuotes.
Ein gut gebauter Canvas verursacht auch bei 10.000 virtuellen Objekten keine Lags.

 

Code Basis

PNG

Nikolai Semko, 2023.07.15 07:24

Vergessen Sie BMP-Dateien wie einen schlechten Traum. Mit dieser Bibliothek können Sie jetzt das fortschrittlichere und kompaktere PNG-Bildformat für Ihre Programme verwenden.

Ich habe endlich c PNG implementiert.
Ich habe die Implementierung von @Zorro(https://www.mql5.com/ru/forum/92113#comment_2672596)
Probiert es bitte aus. Bisher hatte ich noch keine Probleme.



 
Nikolai Semko #:
Endlich wurde c PNG implementiert.
.

Cool und nützlich. Nur aus Interesse, kann es in MT4 verwendet werden?

 
Vitaliy Kuznetsov #:

Cool und nützlich. Nur aus Interesse, kann dies in MT4 verwendet werden?

Sicher
Ich werde es ausprobieren. Ich denke, der Code wird fast der gleiche bleiben.
 

Nikolai, haben Sie irgendwo bereit Code auf Kanvas, die das Fenster zu scrollen ermöglicht gefunden?


 
Vitaliy Kuznetsov #:

Nikolai, haben Sie irgendwo bereit Code auf Kanvas, die das Fenster zu scrollen ermöglicht gefunden?


Anatoly und Pyotr hatten Implementierungen

Aber ich habe sie nicht benutzt. Deshalb kann ich das nicht beurteilen.

 
Ich möchte eine Benutzeroberfläche mit der Canvas-Klasse zu erstellen. Mein einziges Problem ist, dass ich nicht weiß, wie ich das Dashboard im Diagramm beweglich machen kann.
Ich habe viel gesucht, aber kein Beispiel gefunden. Ich wäre Ihnen dankbar, wenn Sie einen Tipp geben könnten.


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

}

//+------------------------------------------------------------------+
Dateien:
screenshot.png  18 kb