程序库: 用于创建图形界面的 EasyAndFastGUI 开发库 - 页 18

 
Marco vd Heijden:

早期是在 MQL4 和 MQL5 中开发的,但最后几个示例是针对 MQL5 的。

这并不意味着它不能在 MQL4 中运行。

代码通常需要一些小的调整。

复杂的 MT5 .mqh 文件让我感到沮丧,变量和对象太多了!

 
17334708:

复杂的 MT5 .mqh 文件让我感到沮丧,变量和对象太多了!

是的,这涉及到一些工作,最好的办法是重命名循环变量,例如,当您收到关于变量 i 的警告时,您可以在该循环中将 i 重命名为 i1,然后在下一个循环中将 i2 和 i3 重命名,以此类推。

另外,你也不需要对整个库进行转换,你可以只对你需要的元素进行转换,因为文章涉及到很多项目和对象。

 
但是,很多问题都与此有关。修改循环或变量是一项非常繁重的工作。
 
只有当你想要全部的时候,而不是只想要一个元素的时候。
 
Could this library be used in MQL4?
 
我做了什么?
一个面板上有多个组合框和数字输入字段。有一个主组合框,其他字段都依赖于它。

它应该如何工作?
当主组合框的值发生变化时,其他输入框和组合框:某些内容被隐藏、某些内容出现、某些内容改变了位置(X,Y)

我试过哪些方法
1) - 在主组合框中重新选择值时,删除所有不必要的元素(Delete()),然后重新创建(Create...())。结果是,当您点击重新绘制的组合框中的元素时,在访问 表单元素数组 时会出现数组超出范围的情况。我试图 "强化 "该错误,并在出错位置添加了一个数组大小检查(这样循环就不会被迫超出数组范围),但现在到了这里,表单就 "挂起 "了。

2) - 尝试了方法 1),但同时在 "DeleteElementsFromArray "的开头添加了本主题中写到的 WndContainer 函数 - 情况没有改变。

3) - 我试着用相同的 X、Y 值绘制所有元素(所有元素都在一个点上),然后立即隐藏它们(Hide()),如有必要,再更改它们的 X、Y 值(XGap(...), YGap(...))并绘制它们(Update(true); Show())。- 这里还有一个问题--有些元素在隐藏后并没有隐藏,而另一部分--失去了 LabelText(只是视觉上没有)。


您有什么建议?
 
Mikhail Mitin:

在 WndContainer 中添加了 "DeleteElementsFromArray "开头的函数,该函数写在本主题中 - 情况没有改变


我是为简单元素写的。组合框并不简单)目前的版本应该可以删除复杂的元素,但我还没有测试过,我想我还需要修改很多地方)。

为了隐藏,我在元素和 CWndEvents::Show(const uint window_index) 中添加了 m_is_hiden 属性;为 true 的元素将被跳过。

 

大家好、

开发使用图形元素面板的业务代码是一回事,这个库非常有用。但是,当遇到性能低下或需要重现的错误时、

几乎没有办法绕过Strategy Tester

也就是说,试图在实时图表中修复问题是非常乏味的(例如,要等到某些条件满足后才能点击图形元素......嘎嘎)

如果我们能在策略测试器中正确测试,那将会非常有帮助!


1.MetaTrader 开发团队是否在论坛上讨论过为什么在 ST 中没有触发 void OnChartEvent?

2.是否有机会找到解决方法?


谢谢,
Marcel

 

文件 Defines.mqh 中的宏与 Alglib {ap.mqh

#define  TO_STRING(A) #A

与 Alglib {ap.mqh) 不兼容。

class CSerializer
  {
   //--- 枚举
   enum SMODE { DEFAULT,ALLOC,TO_STRING,FROM_STRING };

我不得不重新命名它。

 

在 2132 上安装平台更新后,出现了编译错误:

  • WndEvents.mqh' - 'CWndContainer::~CWndContainer' - 无法访问受保护的成员函数 WndEvents.mqh 11 27
  • CWndEvents::~CWndEvents' - 无法访问受保护的成员函数 WndCreate.mqh 10 27


如何修复:

  • 在文件 "WndContainer.mqh "中,将 "CWndContainer "的构造函数和析构函数中的 "protected "替换为 "public"。
  • 在文件 "WndEvents.mqh "中,将 "CWndCreate "的构造函数和析构函数中的 "protected "替换为 "public
  • 在文件 "WndCreate.mqh "中,将 "CWndCreate "的构造函数和析构函数中的 "protected "替换为 "public"。