程序库: Easy Canvas - 页 8

 
Nikolai Semko:

重命名并不难。有 Ctrl+H

但我同意 Andrei 的观点。查找#define T 或 #include <Canvas\iCanvas.mqh> 将其放在项目的首位

文件搜索是自动进行的 ) MQL5 文件夹中没有#define T

我发现这与 TradeTransactionshttps://www.mql5.com/zh/code/22166 中的 TypeToBytes.mqh 有冲突

这个库已经很久没有修改过了,所以很可能在某个新版本中出现了一些创新或错误 )

 
Oleksii Chepurnyi:

设法找出冲突是与 TradeTransactionshttps://www.mql5.com/zh/code/22166 的 TypeToBytes.mqh 中的某些内容有关。

这个库已经很久没有修改过了,所以很可能在某个新版本中出现了一些新功能或错误 )

这是一个编译器错误。

#include <TypeToBytes.mqh> //https://www.mql5.com/zh/code/16282

class CLASS
{
  void Method()
  {
    datetime T[1];
    
    T[0] = 0; // '[' - 预期名称
  };
};

void OnStart()
{
  datetime T[1];
  
  T[0] = 0; // 确定
}
 
知道了谢谢当然,我会修好它的。
 

耶,我们找到了!)


@fxsaber,您是自动跟踪 "您的 "关键词的分支,还是定期浏览所有分支?您对 "有针对性的 "问题回复非常快。

 
Andrey Khatimlianskii:

@fxsaber,你是自动跟踪 "你的 "关键词的分支,还是定期浏览所有分支?您回答 "有针对性 "的问题非常快。

这是偶然发生的。

 

我想向感兴趣的程序员解释一下测试模式下 kanvas 操作的一个重要问题。
本社区的一位著名程序员向我提出了这样一个问题:

- 为什么在测试模式下,在对象上创建的面板的重绘速度要比在 kanvas 上实现的快一个数量级,而在正常模式下,kanvas 的速度一切正常?

经过分析,我明白了这个问题的原因和解决办法。

问题在于,在重绘对象的同时也会重绘整个屏幕,而测试仪中重绘屏幕的频率不会超过每秒 30 帧。

对象的画布(内部)最终是相同的,但当您更改对象的属性 时,对象的画布不会形成(不会重 新计算),而只会在屏幕刷新(ChartRedraw)时形成,这在测试仪中(在正常模式下也是)发生的 频率不会超过我们眼睛所能分辨的变化频率,即不会超过每秒 32 帧。

假设面板每隔一个刻度都会发生变化。那么在默认测试器中,画布将每隔一个刻度重新计算一次,但测试器中的重绘频率仍不会超过 30 毫秒(每秒约 30 帧)。

换句话说,重新计算画布的频率要比实际显示在屏幕上的频率高得多,因此会过度消耗资源。

解决这个问题的方法是控制画布的重新计算和重新绘制频率,每 15-30 毫秒的计算机时间内不能超过一次,这样就不会出现不必要的空重复计算周期。

例如

void OnTick()
  {
  static uint lastCalc=0;
  uint cur=GetTickCount();
  if (cur-lastCalc>15) {
    ReDrawMyCanvas();
    lastCalc=cur;
   }
  }
 

下午好。

   if(width==0) {width=W.Width;   FullWinCanvW=true; Xpos=0;} else FullWinCanvW=false;
   if(height==0){height=W.height[SubWin]; FullWinCanvH=true; Ypos=0;} else FullWinCanvH=false;
   Name+=IntegerToString(rand())+IntegerToString(rand());
   Handle=ChartGetInteger(chart_id,CHART_WINDOW_HANDLE,SubWin);
   if(!CreateBitmapLabel(chart_id,SubWin,Name,Xpos,Ypos,width,height,formatCF))
      Print("Error creating canvas: ",GetLastError());

构造函数中的这一行,为什么?

CCanvas 还在名称中添加了很多内容,包括 rand。有时名称太长,超过了允许长度 )

 
Oleksii Chepurnyi:

下午好。

构造函数中的这一行,为什么?

CCanvas 还在名称中添加了很多内容,包括 rand。有时名称太长,超过了允许长度 )

是的,我同意。
在我的 iCanvas 版本中,我已经解决了这个问题,但在这里我似乎忘记了。

 
版本 1.40
修正了一些错误。
特别是修正了一个错误:如果有多个对象,iCanvas 对象不会自动垂直调整大小。
 
最新版本 1.40
附加的文件:
iCanvas.mqh  48 kb