Bibliotecas: Easy Canvas - página 2

 
Versão MT4 aqui
 
Versão 1.16: corrigiu alguns bugs e acelerou algumas funções.
 
Versão 1.21: corrigiu alguns erros
 

Boa tarde.

Devo adicioná-lo? Porque ele não se lembra)

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:

Boa tarde.

Devo adicioná-lo? Porque ele não se lembra)

Obrigado!
Corrigido no KB.
Verifique seu código. Eu o corrigi sem verificar. Talvez eu não tenha levado algo em consideração.

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:

Obrigado!
Corrigido na KB.
Verifique seu código. Eu o corrigi sem verificar. Talvez eu não tenha levado algo em consideração.

Agora está tudo certo.)

Gostaria de perguntar: qual é a finalidade de adicionar a matriz iC?

 
Oleksii Chepurnyi:

Agora está tudo bem.)

Gostaria de perguntar: qual é a finalidade de adicionar a matriz iC?

Isso é feito para controlar um conjunto de subjanelas e um conjunto de instâncias do iCanvas. Afinal de contas, as janelas podem ser adicionadas e removidas no processo de trabalho do indicador.
Por exemplo, para esse indicador, isso é necessário:

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

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

Isso é feito para controlar várias subjanelas e várias instâncias do iCanvas. Afinal de contas, as janelas podem ser adicionadas e removidas no processo de trabalho do indicador.
Por exemplo, isso é necessário para esse indicador:

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

O link foi corrigido - ele levava ao perfil, mas está fechado para todos lá.
 
Artyom Trishkin:
Corrigi o link - ele estava levando ao perfil e está fechado para todos lá.
Obrigado)))
 
Versão 1.24: corrigiu alguns erros.