Обсуждение статьи "Как создать графическую панель любой сложности и как это работает"

 

Опубликована статья Как создать графическую панель любой сложности и как это работает:

В статье подробно рассматривается, как создать панель на базе класса CAppDialog и как добавить в нее элементы управления. Описывается структура панели и схема наследования объектов в ней. Продемонстрировано, что нужно для обработки событий и как события раздаются подчинённым элементам управления. Приведены примеры изменения параметров панели: размера, цвета фона.

Порядок создания и наложения объектов из раздела Панели и диалоги Стандартной библиотеки выглядит следующим образом. Сначала создается объект "Border", в его границах добавляется фон панели в виде объекта "Back", на фон накладывается клиентская область "ClientBack", внутри которой могут находится дочерние контролы. В верхнюю часть панели добавляются объект "Caption" с названием панели и две кнопки для управления.

Разложение панели AppWindow на графические контролы

Автор: Vladimir Karputov

 

   Спасибо за Статью. Очень познавательно!

 
да статья полезная, но не могу понять как обработать событие ON_DBL_CLICK, можете помочь?
 
Andrii Djola:
да статья полезная, но не могу понять как обработать событие ON_DBL_CLICK, можете помочь?

Двойной клик - это два клика, между которыми совсем малый промежуток времени. Значит, обрабатываться может так же, как и обычный клик - нужно только добавить статическую переменную в OnChartEvent. Посмотрите пример в https://www.mql5.com/ru/docs/constants/chartconstants/enum_chartevents и сделайте примерно так:

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
  {
//--- время последнего клика мышки
   static uint last_click=0;
//--- нажатие левой кнопкой мышки на графике
   if(id==CHARTEVENT_CLICK)
     {
      uint click_time=GetTickCount();
      Print("Координаты щелчка мышки на графике: x = ",lparam,"  y = ",dparam);
      if(click_time-last_click<dbl_click_time) 
        {
         Print("DoubleClick!");
         // какие-то еще действия
        }
      last_click=click_time;
     }
//--- нажатие мышкой на графическом объекте
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
     }
//--- нажатие кнопки на клавиатуре
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("Нажата KEY_NUMLOCK_LEFT");   break;
         case KEY_LEFT:          Print("Нажата KEY_LEFT");           break;
         case KEY_NUMLOCK_UP:    Print("Нажата KEY_NUMLOCK_UP");     break;
         case KEY_UP:            Print("Нажата KEY_UP");             break;
         case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT");  break;
         case KEY_RIGHT:         Print("Нажата KEY_RIGHT");          break;
         case KEY_NUMLOCK_DOWN:  Print("Нажата KEY_NUMLOCK_DOWN");   break;
         case KEY_DOWN:          Print("Нажата KEY_DOWN");           break;
         case KEY_NUMPAD_5:      Print("Нажата KEY_NUMPAD_5");       break;
         case KEY_NUMLOCK_5:     Print("Нажата KEY_NUMLOCK_5");      break;
         default:                Print("Нажата какая-то неперечисленная клавиша");
        }
      ChartRedraw();
......
     }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Существуют 11 видов событий, которые можно обрабатывать с помощью функции предопределенной функции OnChartEvent(). Для пользовательских событий предусмотрено 65535 идентификаторов в диапазоне от CHARTEVENT_CUSTOM до CHARTEVENT_CUSTOM_LAST включительно. Для генерации пользовательского события необходимо использовать функцию EventChartCustom...
 
Andrii Djola:
да статья полезная, но не могу понять как обработать событие ON_DBL_CLICK, можете помочь?

Ну если пытаться всё делать по феншую, то событие ON_DBL_CLICK словить невозможно. Простая проверка: запускаю любой пример панели из раздела Панели и диалоги, в CWnd::OnMouseUp ставлю точку останова на:

и как итог - хоть клик, хоть двойной клик производить на панели, курсор не заходит на точку останова. Бяда.

 
Vladimir Karputov:

Ну если пытаться всё делать по феншую, то событие ON_DBL_CLICK словить невозможно. Простая проверка: запускаю любой пример панели из раздела Панели и диалоги, в CWnd::OnMouseUp ставлю точку останова на:

и как итог - хоть клик, хоть двойной клик производить на панели, курсор не заходит на точку останова. Бяда.

Решение показал в другой ветке https://www.mql5.com/ru/forum/239867#comment_7224345

Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient"
Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient"
  • 2018.04.23
  • www.mql5.com
Опубликована статья Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient: Автор: Vladimir Ka...
 

Привет!

В примерах:

1. Размещаем Панель на графике финансового инструмента.

2. Переходим на график произвольного финансового инструмента, открытого в другом окне.

3. Возвращаемся в окно графика с Панелью.

4. Панель находится в левом верхнем углу графика в свёрнутом состоянии.


Как сделать так, чтобы Панель не сворачивалась при возврате в окно графика, в котором она размещена?


Понятно, что необходимо обрабатывать события, но что-то запутался :) ...

За ранее спасибо за пояснения.

 
А панель на mql4 можно создать? 
За ранее большое спасибо. 
 
Irina Dymura:
А панель на mql4 можно создать? 
За ранее большое спасибо. 

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

 
Спасибо .
 
Действительно полезная вещь
Причина обращения: