Существует событие CHARTEVENT_OBJECT_CLICK, но нет события CHARTEVENT_OBJECT_DOUBLE_CLICK. Необходимо отследить событие выделения объекта по двойному нажатию мыши. Кто знает какие костыли, грабли, примочки. Главное чтобы работало. Сочувствующих и слабонервных просьба не беспокоить, буду банить.)
- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
- При клике на объект генерируется событие CHARTEVENT_OBJECT_DRAG
- Создание кликабельного графического объекта на графике
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 а сплошные костыли.) Я уже столько напилил, капец.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь