Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2088

 
lynxntech #:
Прошу прощения что влез, когда у одного работает, а второй волосы на голове рвет, у кого проблема в коде, явно ведь не у того которого работает все?

Уважаемый, Вы даже не представляете, насколько Вы правы.

Я прям преклоняюсь пере Вашей проницательностью.

Не зря  я сюда написал, прося о помощи, здесь действительно собрались истинные знатоки и провидцы.

 
Vitaliy Davydov #:

Уважаемый, Вы даже не представляете, насколько Вы правы.

Я прям преклоняюсь пере Вашей проницательностью.

Не зря  я сюда написал, прося о помощи, здесь действительно собрались истинные знатоки и провидцы.

Попробуйте вместо true, поставить false

 
Vitaliy Davydov #:

прописываю  объект - свою панель


Фишка в том, что в основном окне панелька мышью перемещается, а в подокне нет.

И события кнопочек не срабатывают в подокне.

Свойства графиков

При обращении к некоторым свойствам необходимо указывать дополнительный параметр-модификатор (modifier), который служит для указания номера подокна графика. 0 означает главное окно.

 
Vitaliy Davydov #:

прописываю  объект - свою панель

Быстро накидал простое перемещение объекта, увы Вы правы.

Даже интересно стало.

 
Tretyakov Rostyslav #:

Быстро накидал простое перемещение объекта, увы Вы правы.

Даже интересно стало.

Спасибо за интерес к моей проблеме

Смотрите я накидал вывод в лог

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam

                  )

  {

Print(__FUNCTION__+": id = ",id);

Print(__FUNCTION__+": lparam = ",lparam);

Print(__FUNCTION__+": dparam = ",dparam);  

Print(__FUNCTION__+": sparam = ",sparam);  

//---

   pts1.OnEvent(id,lparam,dparam,sparam);


   return;

  };


и вижу, что эта функция в подокне и в основном окне работает по разному, отсюда и проблемы.

В основном окне все 4 параметра нормально работают, а в подокне id не работает нормально

 
Vitaliy Davydov #:

Спасибо за интерес к моей проблеме


и вижу, что эта функция в подокне и в основном окне работает по разному, отсюда и проблемы.

В основном окне все 4 параметра нормально работают, а в подокне id не работает все время = 10,  sparam тоже имя контрола не присваивается.

Судя повсему

lparam; // Координата по оси X
dparam; // Координата по оси Y

передают координаты только основного окна

CHART_MOUSE_SCROLL и CHART_DRAG_TRADE_LEVELS в под окне тоже не включаются

 
Tretyakov Rostyslav #:

Судя повсему

lparam; // Координата по оси X
dparam; // Координата по оси Y

передают координаты только основного окна

CHART_MOUSE_SCROLL и CHART_DRAG_TRADE_LEVELS в под окне тоже не включаются

Вот.

И что теперь делать?

Ладно, пора спать, завтра буду думать.

Спасибо!

 
Vitaliy Davydov #:

Спасибо за интерес к моей проблеме

и вижу, что эта функция в подокне и в основном окне работает по разному, отсюда и проблемы.

В основном окне все 4 параметра нормально работают, а в подокне id не работает нормально

1. Научись вставлять код в сообщение.

2. Внимательно смотри комментарий графика на гифке

Вот код

/********************************************************************\
|                                                             00.mq5 |
|                                            © 2023, Alexey Viktorov |
|                       https://www.mql5.com/ru/users/alexeyvik/news |
\********************************************************************/
#property copyright "© 2023, Alexey Viktorov"
#property link      "https://www.mql5.com/ru/users/alexeyvik/news"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 0
#property indicator_plots   0
//---
long chart_id = ChartID();
/********************************************************************\
|           Custom indicator initialization function                 |
\********************************************************************/
int OnInit()
 {
//---
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/********************************************************************\
|              Custom indicator iteration function                   |
\********************************************************************/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {

  //Comment(rates_total, "\n",
  //        "");
//--- return value of prev_calculated for next call
  return(rates_total);
 }/******************************************************************/
void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {
  if(id == CHARTEVENT_OBJECT_DRAG)
   {
    Comment(sparam);
   }
 }/******************************************************************/

/********************************************************************\
|                  Expert deinitialization function                  |
\********************************************************************/
void OnDeinit(const int reason)
 {
  Comment("");
 }/******************************************************************/
 
Alexey Viktorov #:

1. Научись вставлять код в сообщение.

2. Внимательно смотри комментарий графика на гифке

Вот код

Vitaliy Davydov #:

Спасибо, попробую у себя вечером.

Пока на работе.

-----

Попробовал в обед. Прошу прощения, это немного не то. Обычный контрол, созданный с помощью ObjectCreate(...) конечно же перемещается и реагирует на мышь нормально.

С этим нет проблем. Достаточно правильно установить свойства OBJPROP_SELECTABLE и OBJPROP_SELECTED.

 Речь идет о панельке управления с кнопками, производной от CWndContainer. Она нормально ведет себя в основном окне и ненормально  в подокне.

Если бы она вообще нигде не двигалась - я бы понял что ошибка в коде.

Кроме перемещения, кнопки тоже по разному реагируют на клик мышью почему то.

На основном окне кнопки нажимаются без фиксации а в подокне почему-то начинают оставаться в нажатом состоянии после клика мышью

и событие нажатия кнопок в подокне не отрабатывается.


Если не верите, попробуйте у себя создать панельку класса CDialog и проверить её поведение в окне и подокне.

Ну я собственно сам накидал пример, пока время есть.

Индикатор, создает панельку. в настройках можно указать, где создавать - в окне или в подокне.

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


//+------------------------------------------------------------------+
//|                                                  DragCDialog.mq5 |
//|                        Copyright 2022, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#property indicator_separate_window
#property indicator_buffers 0
#property indicator_plots   0

#include <Controls\Dialog.mqh>
CDialog DragWindow;
//---
enum wind
  {
   main_window,//создаем в основном окне
   sub_window//создаем в подокне
  };
//---
input wind             Panel_Window=sub_window;
//---
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

//Comment(rates_total, "\n",
//        "");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   int panel_wind=0;
   if(Panel_Window==sub_window)
      panel_wind=ChartWindowFind();
//--- create application dialog
   if(!DragWindow.Create(0,"AppWindow",panel_wind,20,20,360,324))
      return(INIT_FAILED);
//--- run application
//  AppWindow.Run();
//--- succeed
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy dialog
   DragWindow.Destroy(reason);
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event ID
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {
   DragWindow.OnEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+


P.S.  спасибо за совет научиться вставлять код. Просто не часто на форуме писал....

Файлы:
 
Vitaliy Davydov #:

прописываю  объект - свою панель

class CControlsTS : public CWndContainer

-------


Где тут сказано о своей панельке?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам

Vitaliy Davydov, 2022.12.21 19:17

Всем здравствуйте!

MQL5.

Подскажите пожалуйста как обработать события подокна графика.

Функция  OnChartEvent() на события с объектами, находящимися в подокне почему-то не реагирует.


Причина обращения: