Как реализовать в MQL5 событие двойной клик по объекту?

 
Существует событие CHARTEVENT_OBJECT_CLICK, но нет события CHARTEVENT_OBJECT_DOUBLE_CLICK. Необходимо отследить событие выделения объекта по двойному нажатию мыши. Кто знает какие костыли, грабли, примочки. Главное чтобы работало. Сочувствующих и слабонервных просьба не беспокоить, буду банить.)
 
Mikhail Nazarenko:
Необходимо отследить событие выделения объекта по двойному нажатию мыши.

Пример индикатора, который по двойному клику по линии меняет её толщину

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window

#define SPEEDCLICK 500 // скорость клика мыши в мс.

string name_obj = MQLInfoString(MQL_PROGRAM_NAME);
uint time_click = 0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   if(ObjectFind(0, name_obj) == -1)VLineCreate(0, name_obj, Time[0]);
   if(!ChartGetInteger(0, CHART_EVENT_OBJECT_CREATE))ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);   
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete(0, name_obj);
}
//+------------------------------------------------------------------+
//| 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[])
{
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   string name = "";
   
   if(id == CHARTEVENT_OBJECT_CLICK)
   {
      name = sparam;      
      if(name == name_obj)
      {
         if(GetTickCount() <= time_click + SPEEDCLICK)
         {
            if(ObjectGetInteger(0, name_obj, OBJPROP_WIDTH) != 3)ObjectSetInteger(0, name_obj, OBJPROP_WIDTH, 3);
            else ObjectSetInteger(0, name_obj, OBJPROP_WIDTH, 1);
            ChartRedraw();
         }
         else time_click = GetTickCount();
      }
   }  
}
//+------------------------------------------------------------------+ 
//| Создает вертикальную линию                                       | 
//+------------------------------------------------------------------+ 
bool VLineCreate(const long            chart_ID = 0,        // ID графика 
                 const string          name = "VLine",      // имя линии 
                 datetime              time = 0,            // время линии 
                 const color           clr = clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style = STYLE_SOLID, // стиль линии 
                 const int             width = 1,           // толщина линии 
                 const bool            back = false,        // на заднем плане 
                 const bool            selection = false)   // выделить для перемещений 
{ 
//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим вертикальную линию 
   if(!ObjectCreate(chart_ID, name, OBJ_VLINE, 0, time, 0)) 
   { 
      Print(__FUNCTION__, 
            ": не удалось создать вертикальную линию! Код ошибки = ", GetLastError()); 
      return(false); 
   } 
   ObjectSetInteger(chart_ID, name,OBJPROP_COLOR, clr); 
   ObjectSetInteger(chart_ID, name,OBJPROP_STYLE, style); 
   ObjectSetInteger(chart_ID, name,OBJPROP_WIDTH, width); 
   ObjectSetInteger(chart_ID, name,OBJPROP_BACK, back); 
   ObjectSetInteger(chart_ID, name,OBJPROP_SELECTABLE, selection); 
   ObjectSetInteger(chart_ID, name,OBJPROP_SELECTED, selection); 
//--- успешное выполнение 
   return(true); 
  } 
//+------------------------------------------------------------------+
Mikhail Nazarenko:
Сочувствующих и слабонервных просьба не беспокоить, буду банить.)

Вы же вроде не модератор, чтоб банить )

 
Sergey Kolemanov:

Пример индикатора, который по двойному клику по линии меняет её толщину

Вы же вроде не модератор, чтоб банить )

Спасибо Сергей. Я где-то так и сделал. Думал есть решения без плясок бубном.

if(id == CHARTEVENT_OBJECT_CLICK)
{
        if(GetMicrosecondCount() - TimeLastClick < 300000 && ObjectGetInteger(0,sparam,OBJPROP_TYPE) == OBJ_RECTANGLE && ObjectGetInteger(0,sparam,OBJPROP_SELECTED) == false)
        {
                //////---------------
      
        }
        TimeLastClick = GetMicrosecondCount();
}

Не MQL а сплошные костыли.) Я уже столько напилил, капец.