Обсуждение статьи "DoEasy. Элементы управления (Часть 1): Первые шаги"

 

Опубликована статья DoEasy. Элементы управления (Часть 1): Первые шаги:

С этой статьи начинаем обширную тему по созданию на MQL5 элементов управления в стиле Windows Forms. И начнём тему с создания класса панели. Без наличия элементов управления уже становится сложно обходиться. Поэтому мы создадим все возможные элементы управления в стиле Windows Forms.

Скомпилируем советник и запустим его на графике:


Формы реагируют на перемещение мышкой, всегда находятся поверх добавляемых на график графических объектов. Градиентные заливки объектов-элементов рисуются верно и цвет у объекта-панели единственный. Но у нас ни элементы, ни панель не реагируют на мышку и находятся на фоне под всеми графическими объектами. Это потому, что мы делали обработку событий мышки только для объектов-форм. И, даже то, что панель по сути является тоже формой, не имеет значения, так как в обработчике мы явно обрабатываем только класс CForm. Всё это будем исправлять далее.

Автор: Artyom Trishkin

 

Я поздравляю вас со всей вашей тяжелой работой... это был довольно сложный проект.

Я только начинаю работать над ним и пытаюсь скомпилировать TestDoEasyPart101.mq5 ... Я получаю следующие 4 ошибки:


1) CTrading::OpenPosition<...... (cannot access private member function)


Все остальные ошибки в основном одинаковы, так что у меня должна быть проблема с путем, но я не могу определить ее.

Я скопировал файлы DoEasy для включения, так что иерархия выглядит следующим образом:

MQL5\Include\DoEasy\ все файлы, которые были в вашей папке DoEasy под include

Я сделал следующее в верхней части файла TradingControl.mqh: #include <DoEasy\trading.mqh


В чем может быть моя проблема... как я уже сказал, похоже, что вы сделали по крайней мере 100 статей, чтобы создать то, что вы имеете в начале этого... любые предложения о том, как я могу заставить это компилироваться?


спасибо

Дин Фредриксон

 
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();

Это позволит методам быть видимыми из производных классов.

Ошибка была внесена мной по невнимательности, но старый компилятор ее не заметил. После обновления терминала компилятор увидел эту ошибку.