Кнопка на шкале цены, как уловить координаты?

 
Добрый день мужики, хочу сделать невидимую кнопку для меню(не спрашивайте зачем), 
Чтобы если я щелкнул в правый верхний угол (по шкале цены) появилась менюшка, проблема заключается в:
1) я не знаю есть ли разница что у всех разные мониторы, значит и координаты будут разные?
2) начинается "счетчик" координат с верхнего левого угла, можно ли как то изменить?

Ловлю координаты так:
      Comment("\n Координаты щелчка мышки на графике: x = ",lparam,"  y = ",dparam,
              "\n Time 1: ",i1,
              "\n Time 2: ",i2);
int i1=0,i2=0;



//+------------------------------------------------------------------+
void OnTimer()
  {
   i1+=1;
  }


3) если свернуть - обзор рынка(табло то что слева), тогда справа соответственно координаты поменяются. 
как быть? 
Спасибо

 
Кнопка - графический объект, неважно, видимый или нет. Поэтому проще всего отслеживать клик на ней и не заморачиваться с координатами. 
 
vebster005:

2) начинается "счетчик" координат с верхнего левого угла, можно ли как то изменить?

Попробуйте ENUM_BASE_CORNER

vebster005:

3) если свернуть - обзор рынка(табло то что слева), тогда справа соответственно координаты поменяются. 
как быть? 
Спасибо

Можно запоминать и затем сравнивать ширину графика и менять в кнопке координаты на соответствующую величину. Либо угол привязки попробовать изменить ...

 
Ребят я прощу прощения, имеется ввиду что нету как таковой кнопки, мне нужно уловить клик координат в правый верний угол, 
 
Ihor Herasko #:
Кнопка - графический объект, неважно, видимый или нет. Поэтому проще всего отслеживать клик на ней и не заморачиваться с координатами. 

Простите, я не так выразился

 
Может глупый вариант, но что если создать объект и скрыть его за шкалу, и уже от него "плясать", или же не получится потом кликать ибо клик будет по шкале?
мужики подскажите
 
ВОТ КОД:   но как я понял от размеров монитора зависит. Да и вообще не правильно так, как правильно подскажите
#property copyright "Copyright 2021"
#property link      "http://www.ya.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

int i1=0,i2=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer(100);
//---
   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[])
  {

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutRect(string name,datetime t1,double p1,datetime t2,double p2,color clr)
  {
   ObjectDelete(0,name);
//--- создадим прямоугольник по заданным координатам
   ObjectCreate(0,name,OBJ_RECTANGLE,0,t1,p1,t2,p2);
//--- установим цвет прямоугольника
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam) // параметр события типа string
  {
//--- нажатие левой кнопкой мышки на графике
   if(id==CHARTEVENT_CLICK)
     {
      OnTimer();
      if(i1-i2<5 && lparam>1160) PutRect("R",Time[4],Close[4],Time[10],Close[10],Red);
      
      Comment("\n Координаты щелчка мышки на графике: x = ",lparam,"  y = ",dparam,
              "\n Time 1: ",i1,
              "\n Time 2: ",i2);
      i2=i1;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   i1+=1;
  }
//+------------------------------------------------------------------+
 
vebster005 #:
ВОТ КОД:   но как я понял от размеров монитора зависит. Да и вообще не правильно так, как правильно подскажите

зачем вам вообще OBJECT ? 

сформулируйте задачу иначе:

    вы хотите ловить клик на графике и если тот попал в координатную шкалу (или около) то реагировать - вызывать меню

размеры окна и параметры шкалы вы знаете или можете получить из ChartGetXXX,перемещение мыша получаете через ChartEvent. С кликами сложность - помнится что MT отправляет события по отпусканию кнопки. Значит чуть-чуть таймера - опрос состояний

 
vebster005 #:
ВОТ КОД:   но как я понял от размеров монитора зависит. Да и вообще не правильно так, как правильно подскажите

Когда-же вы научитесь читать документацию? Вы хотите что-то сделать с графиком, а решение ищете в таймере… Жесть…

long chart_ID = ChartID();
/*******************Expert initialization function*******************/
int OnInit()
 {
  ChartSetInteger(chart_ID, CHART_EVENT_MOUSE_MOVE, 0, true);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

/************************Expert tick function************************/
void OnTick()
 {
 }/******************************************************************/

/********************************************************************\
|   ChartEvent function                                              |
\********************************************************************/
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
 {
  if(id == CHARTEVENT_CLICK)
   {
    long chartWidth = (long)ChartGetInteger(chart_ID, CHART_WIDTH_IN_PIXELS, 0);
    Comment("id ", id, "\n",
            "chartWidth ", chartWidth, "\n",
            "lparam ", lparam, "\n",
            "dparam ", dparam, "\n",
            "");
   }
 }/******************************************************************/

Вот вам ширина графика. Соответственно если координаты мыши больше ширины, значит это уже шкала цены. Высота это dparam — можно ограничить…

Не помешает проверить отображение шкалы цены CHART_SHOW_PRICE_SCALE  и если не отображается включить её.

 
Alexey Viktorov #:

Когда-же вы научитесь читать документацию? Вы хотите что-то сделать с графиком, а решение ищете в таймере… Жесть…

Вот вам ширина графика. Соответственно если координаты мыши больше ширины, значит это уже шкала цены. Высота это dparam — можно ограничить…

Не помешает проверить отображение шкалы цены CHART_SHOW_PRICE_SCALE  и если не отображается включить её.

Спасибо за ответ, но я не искал решения в таймере, это был пример, что по нажатию на нужный мне угол, происходит действие


Спасибо что подсказали(прямым текстом сказали) как сделать. Всё получилось
Проблема была в том что я не знал как узнать ширину. Спасибо

 
vebster005 #:

Спасибо за ответ, но я не искал решения в таймере, это был пример, что по нажатию на нужный мне угол, происходит действие


Спасибо что подсказали(прямым текстом сказали) как сделать. Всё получилось
Проблема была в том что я не знал как узнать ширину. Спасибо

Как узнать ширину - есть в справке. Т.е., проблема в её игнорировании
Причина обращения: