Bibliotheken: Easy Canvas - Seite 13

 
Mighty7:

Es würde zu lange dauern, den gesamten Hintergrund zu löschen und alles neu zu bauen und zu streichen.

Nicht so sehr. Der Aufbau kann sehr viel Zeit in Anspruch nehmen.

Wir behalten den Zustand im Speicher (Position der Elemente, ihre Farbe usw.). Wenn wir z. B. ein Element verschieben müssen, ändern wir seine Koordinaten, löschen die Leinwand und zeichnen einen neuen Zustand. Optisch sieht das blitzschnell aus, selbst bei einer großen Anzahl von Elementen)

 
Mighty7:

Das funktioniert nicht, weil mein Canvas ist die Fullscreen. Es ist wie ein Tick-Diagramm, aber es kostet zu viel Zeit, um den gesamten Hintergrund zu löschen und construcht und malen alles neu, so dass ich den Inhalt nach links (zB 8 Pixel) zu verschieben und zeichnen nur die neuen 8 Pixel (8 px in x-Richtung und voller Höhe) mit neuen Daten benötigen. Ich habe versucht, den Canvas mit MoveCanvas um 8 px nach links zu verschieben und das funktioniert auch, aber ich kann die Größe nicht so ändern, dass von links 8 px Breite entfernt werden und rechts 8 px hinzugefügt werden. Ich hoffe, Sie verstehen das...

Mighty7:

Das funktioniert nicht, weil mein Canvas der Vollbildmodus ist. Es ist wie ein Tick-Diagramm, aber es kostet zu viel Zeit, um den gesamten Hintergrund zu löschen und construcht und malen alles neu, so dass ich brauche, um den Inhalt nach links (zB 8 Pixel) zu verschieben und zeichnen nur die neuen 8 Pixel (8 px in x-Richtung und voller Höhe) mit neuen Daten. Ich habe versucht, den Canvas mit MoveCanvas um 8 px nach links zu verschieben und das funktioniert auch, aber ich kann die Größe nicht so ändern, dass von links 8 px Breite entfernt werden und rechts 8 px hinzugefügt werden. Ich hoffe, Sie verstehen das...

Ok, fertig. Laden Sie Version 1.42 herunter.
Aber Sie müssen die vertikale Größenänderung kontrollieren.

Ok, fertig. Laden Sie sich die Version 1.42 herunter.
Aber Sie müssen die Änderung der vertikalen Skalierung kontrollieren.

#include <Canvas\iCanvas.mqh> //https://www.mql5.com/de/code/22164

input int shift = -1;
//+------------------------------------------------------------------+
int OnInit() {
   EventSetMillisecondTimer(100);
   Canvas.Erase(0x00FFFFFF);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTimer() {
   Canvas.FillCircle(rand()%_Width,rand()%_Height, 10+rand()%100,Canvas.Grad(rand()/32767.0)&0x80FFFFFF);
   Canvas.ShiftCanvas(shift);
   Canvas.Update();
   
}
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[]) {
   return(rates_total);
}
void              ShiftCanvas(const int _shift=-1, uint bckgr = 0x00FFFFFF) { // Verschiebt die gesamte Leinwand nach links (x ist ein negativer Wert) oder nach
                     // nach rechts (x ist ein positiver Wert). Die Leinwand selbst bleibt an ihrem Platz, aber alle Pixel werden verschoben. Das bckgr ist 
                     // die Farbe, mit der der neu erstellte Streifen je nach Richtung der Verschiebung nach links oder rechts gefüllt wird.
                        if (_shift==0) return;
                        int _Shift = Fabs(_shift);
                        if (_Shift>=m_width) { ArrayInitialize(m_pixels,bckgr); return;}
                        int start = (_shift>0)?0:-_shift;
                        int count = m_width-_Shift;
                        int offset= (_shift>0)?0:count;
                        for (; start<m_height*m_width; start+=m_width, offset+=m_width) {                        
                           ArrayCopy(m_pixels,m_pixels,start+_shift,start,count); 
                           ArrayFill(m_pixels,offset,_Shift,bckgr);
                        }                        
                     }



Dateien:
 
Sehr gut. Ich danke Ihnen vielmals.
 
Mighty7:
Sehr gut. Ich danke Ihnen vielmals.
Kein Problem 😊
 
Nikolai Semko:
Kein Problem 😊.

Es funktioniert wie ein Charme, aber um es vollständig zu haben, ist es möglich, eine Verschiebung auch
an der y-Achse (Nord/Süd) zu implementieren? Ich brauche diese zu blättern/schieben in diese Richtungen zu.

 
Mighty7:

Es funktioniert wie ein Charme, aber um es vollständig zu haben, ist es möglich, eine Verschiebung auch
an der y-Achse (Nord/Süd) zu implementieren? Ich brauche diese zu blättern/schieben in diese Richtungen zu.

OK. Ich werde es tun.

 
Mighty7:

Es funktioniert wie ein Charme, aber um es vollständig zu haben, ist es möglich, eine Verschiebung auch
an der y-Achse (Nord/Süd) zu implementieren? Ich brauche diese zu blättern/schieben in diese Richtungen zu.

fertig

Version 1.43

Dateien:
 
Nikolai Semko :

getan

siehe 1.43

Absolut genial. Vielen Dank an dieser Stelle.

Edit: x=-1,y=0 ist nicht verschiebbar, daher funktioniert es nicht richtig.

 
Mighty7:

Absolut brillant. Ich danke Ihnen vielmals.

Edit: x=-1,y=0 ist nicht verschiebbar, also funktioniert es nicht richtig.

Dankeschön. Habe es behoben.

Dateien:
iCanvas.mqh  52 kb
 
Nikolai Semko:

Ich danke Ihnen. Korrigiert.

Ich muss mich bedanken. Jetzt ist es perfekt. Gute Arbeit.