程序库: Easy Canvas - 页 2

 
这里是 MT4 版本
 
1.16 版:修复了一些错误并加速了一些功能。
 
1.21 版:修复了一些错误
 

下午好。

我应该添加它吗?因为它不记得 )

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:

下午好。

我应该添加它吗?因为它不记得 )

谢谢!
已在 KB 中修复。
请检查您的代码。我没有检查就修复了。也许我没有考虑到某些因素。

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:

谢谢!
已在 KB 中修复。
请检查您的代码。我没有检查就修复了。也许我没有考虑到某些因素。

现在一切正常 )

我想问一下,添加 iC 数组的目的是什么?

 
Oleksii Chepurnyi:

现在没事了 )

我想问一下,添加 iC 阵列的目的是什么?

这样做是为了控制一组子窗口和一组 iCanvas 实例。毕竟,在指标工作过程中可以添加和删除窗口。
例如,本指标就需要这样做:

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

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

这样做是为了控制多个子窗口和多个 iCanvas 实例。毕竟,在指标工作过程中可以添加和删除窗口。
例如,本指标就需要这样做:

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

更正了链接--它指向了个人资料,但那里对所有人都是关闭的。
 
Artyom Trishkin:
更正了链接--它指向的是个人资料,而那里对所有人都是关闭的。
谢谢)))
 
1.24 版:修复了一些错误。