Librerías: Easy Canvas - página 2

 
Versión MT4 aquí
 
Versión 1.16: corregidos algunos errores y aceleradas algunas funciones.
 
Versión 1.21: corregidos algunos errores
 

Buenas tardes.

¿Lo añado? Porque no se acuerda )

void ChartChanged()
  {
   static int preWinTotal=W.WindowsTotal;
   if(W.Y_max==0 && CheckPointer(Canvas)!=POINTER_INVALID) {delete Canvas; Canvas=new iCanvas;}
   GetWindowProperties(W);
   if (preWinTotal!=W.WindowsTotal) for (int i=ArraySize(iC)-1; i>=0; i--) if(CheckPointer(iC[i])!=POINTER_INVALID) if (iC[i].SubWin>=W.WindowsTotal) iC[i].SubWin--;
   for (int i=ArraySize(iC)-1; i>=0; i--)
     {
      if(CheckPointer(iC[i])!=POINTER_INVALID)
         if(iC[i].FullWinCanvWidth())
           {
            if(iC[i].FullWinCanvHeight()) {if(W.Width!=WidOld || W.height[iC[i].SubWin]!=HeiOld[iC[i].SubWin] ) iC[i].Resize(W.Width,W.height[iC[i].SubWin]);}
            else {if(W.Width!=WidOld) iC[i].Resize(W.Width,iC[i].Height());}
           }
      else { if(iC[i].FullWinCanvHeight()) if(W.height[iC[i].SubWin]!=HeiOld[iC[i].SubWin]) {iC[i].Resize(iC[i].Width(),W.height[iC[i].SubWin]); HeiOld[iC[i].SubWin]=W.height[iC[i].SubWin];}}
      else ArrayRemove(iC,i,1);
     }
   WidOld=W.Width; 
   for(int i=ArraySize(iC)-1; i>=0; i--)        HeiOld[iC[i].SubWin] = W.height[iC[i].SubWin];
   preWinTotal=W.WindowsTotal;
   XYToTimePrice(0,0,W.MouseTime,W.MousePrice,CHARTEVENT_CHART_CHANGE);
  }
 
Oleksii Chepurnyi:

Buenas tardes.

¿Lo añado? Porque no se acuerda )

Gracias!
Arreglado en KB.
Por favor, comprueba tu código. Lo arreglé sin comprobarlo. Quizás no tuve en cuenta algo.

void ChartChanged()
  {
   static int preWinTotal=W.WindowsTotal;
   if(W.Y_max==0 && CheckPointer(Canvas)!=POINTER_INVALID) {delete Canvas; Canvas=new iCanvas;}
   GetWindowProperties(W);
   if(preWinTotal!=W.WindowsTotal) for(int i=ArraySize(iC)-1; i>=0; i--) if(CheckPointer(iC[i])!=POINTER_INVALID) if(iC[i].SubWin>=W.WindowsTotal) iC[i].SubWin--;
   for(int i=ArraySize(iC)-1; i>=0; i--)
     {
      if(CheckPointer(iC[i])!=POINTER_INVALID)
         if(iC[i].FullWinCanvWidth())
           {
            if(iC[i].FullWinCanvHeight())
              {
               if(W.Width!=WidOld || W.height[iC[i].SubWin]!=HeiOld[iC[i].SubWin]) iC[i].Resize(W.Width,W.height[iC[i].SubWin]);
              }
            else {if(W.Width!=WidOld) iC[i].Resize(W.Width,iC[i].Height()); }
           }
      else
        {
         if(iC[i].FullWinCanvHeight())
            if(W.height[iC[i].SubWin]!=HeiOld[iC[i].SubWin]) iC[i].Resize(iC[i].Width(),W.height[iC[i].SubWin]);
        }
      else ArrayRemove(iC,i,1);
      HeiOld[iC[i].SubWin]=W.height[iC[i].SubWin];
     }
   WidOld=W.Width;
   preWinTotal=W.WindowsTotal;
   XYToTimePrice(0,0,W.MouseTime,W.MousePrice,CHARTEVENT_CHART_CHANGE);
  }
 
Nikolai Semko:

Gracias!
Corregido en KB.
Por favor, comprueba tu código. Lo arreglé sin comprobarlo. Quizás no tuve en cuenta algo.

Ahora todo está bien )

Quería preguntar, ¿cuál es el propósito de añadir la matriz iC?

 
Oleksii Chepurnyi:

Ya está bien.)

Quería preguntar, ¿cuál es el propósito de añadir la matriz iC?

Se hace para controlar un conjunto de subventanas y un conjunto de instancias iCanvas. Después de todo, las ventanas pueden ser añadidas y eliminadas en el proceso de trabajo del indicador.
Por ejemplo, para este indicador es necesario:

https://www.mql5.com/es/code/25414

Система линейных алгебраических уравнений на каждом баре
Система линейных алгебраических уравнений на каждом баре
  • www.mql5.com
Данная работа преследует 3 цели: Продемонстрировать работу индикатора сразу в двух окнах: в главном и подокне. Это достигается с помощью применения класса iCanvas.Компактное решение системы линейных алгебраических уравнений с помощью рекурсии.Продемонстрировать и доказать некоторым искателям грааля несостоятельность утверждения, что применение...
 
Nikolai Semko:

Esto se hace para controlar múltiples subventanas y múltiples instancias de iCanvas. Después de todo, las ventanas se pueden añadir y eliminar en el proceso de trabajo del indicador.
Por ejemplo, es necesario para este indicador:

https://www.mql5.com/es/code/25414

Corregido el enlace - que llevó al perfil, pero está cerrado para todos allí.
 
Artyom Trishkin:
Corregido el enlace - llevaba al perfil y allí está cerrado a todo el mundo.
Gracias)))
 
Versión 1.24: corregidos algunos errores.