文章 "DoEasy. 控件 (第 1 部分): 第一步"

 

新文章 DoEasy. 控件 (第 1 部分): 第一步已发布:

本文开始延展话题,介绍如何利用 MQL5 仿照 Windows 窗体样式创建控件。 我感兴趣的第一个对象是创建面板(panel)类。 若是没有控件,那么管理就会变得越来越困难。 因此,我将仿照 Windows 窗体样式创建所有可能的控件。

编译 EA,并在图表上启动它:


窗体会对鼠标移动作出反应,并始终置于已添加到图表的图形对象的顶部。 元素对象的渐变填充绘制无误,并且面板对象只有一种颜色。 但是,无论是元素还是面板都不会对鼠标作出反应,且都锁定在所有图形对象之下的背景中。 这是因为我只需处理窗体对象的鼠标事件。 面板本质上是一个窗体,这个事实并不重要,因为我只处理显式的 CForm 类。 我稍后会修复这一点。

作者:Artyom Trishkin

 

我祝贺您的辛勤工作......这是一个相当大的项目

我刚刚开始这项工作,正在尝试编译 TestDoEasyPart101.mq5 ...我遇到了以下 4 个错误:


1) CTrading::OpenPosition<...... (无法访问私有成员函数)


所有其他错误基本相同,所以我一定是路径出了问题,但无法缩小范围。

我复制了用于包含的 DoEasy 文件,因此层次结构如下:

MQL5\Include\DoEasy (所有在你的 DoEasy 文件夹下的文件)。

我在 TradingControl.mqh 文件的顶部做了如下操作: #include <DoEasy\trading.mqh>


我的问题可能出在哪里......正如我所说的,似乎你至少做了 100 篇文章来构建你在这篇文章开头的内容......有什么建议可以帮助我编译吗?


谢谢

Dean Fredrickson

 
Dean Fredrickson 项目。

我刚刚开始这项工作,正在尝试编译 TestDoEasyPart101.mq5 ...我遇到了以下 4 个错误:


1) CTrading::OpenPosition<...... (无法访问私有成员函数)


所有其他错误基本相同,所以我一定是遇到了路径问题,但无法缩小范围。

我复制了 DoEasy 文件的包含文件,因此层次结构如下:

MQL5\Include\DoEasy (所有 DoEasy 文件夹中的文件都在 include 文件夹下

我在 TradingControl.mqh 文件的顶部做了以下操作: #include <DoEasy\trading.mqh>


我的问题可能出在哪里......正如我所说的,似乎你至少做了 100 篇文章来构建你在这篇文章开头的内容......对于如何让它编译,有什么建议吗?


谢谢

迪安-弗雷德里克森

在 Trading.mqh 文件中做出以下更改

 //--- (1) Открывает позицию, (2) устанавливает отложенный ордер
 protected : 
   template < typename SL, typename TP> 
   bool                  OpenPosition( const ENUM_POSITION_TYPE type,
                                     const double volume,
                                     const string symbol,
                                     const ulong magic= ULONG_MAX ,
                                     const SL sl= 0 ,
                                     const TP tp= 0 ,
                                     const string comment= NULL ,
                                     const ulong deviation= ULONG_MAX ,
                                     const ENUM_ORDER_TYPE_FILLING type_filling= WRONG_VALUE );
   template < typename PR, typename PL, typename SL, typename TP>
   bool                  PlaceOrder( const ENUM_ORDER_TYPE order_type,
                                     const double volume,
                                     const string symbol,
                                     const PR price,
                                     const PL price_limit= 0 ,
                                     const SL sl= 0 ,
                                     const TP tp= 0 ,
                                     const ulong magic= ULONG_MAX ,
                                     const string comment= NULL ,
                                     const datetime expiration= 0 ,
                                     const ENUM_ORDER_TYPE_TIME type_time= WRONG_VALUE ,
                                     const ENUM_ORDER_TYPE_FILLING type_filling= WRONG_VALUE );
 private :                                     
 //--- Возвращает индекс объекта-запроса в списке по (1) идентификатору、
 //--- (2) тикету ордера, (3) тикету позиции в запросе 
   int                   GetIndexPendingRequestByID( const uchar id);
   int                   GetIndexPendingRequestByOrder( const ulong ticket);
   int                   GetIndexPendingRequestByPosition( const ulong ticket);

 public :
 //-- Возвращает себя 
   CTrading            *GetObject( void )    { return & this ;   }
 //--- Конструктор 
                        CTrading();

这将允许从派生类中可见方法。

这个错误是我不注意造成的,但旧的编译器漏掉了。 更新终端后,编译器看到了这个错误。