Помогите сохранить состояние положение кнопки

 

Добрый день, написал простенький код и прошу вас помочь разобраться кое в чем:
1) Не нагружаю ли я индикатор тем что каждый раз проверяю наличие курсора мышки в нужном положении
2) Может было бы проще и лучше сделать через 2-й клик (я не знаю как сделать через 2-й клик, только через 1 клик, кому не сложно прошу подсказать и это)
3) Самое главное: Как мне сохранить положении кнопки, я так думаю что если бы я сделал через 2-й клик, меню(можно так назвать) выводилось бы и сохраняло положение, но я не уверен прошу подсказать по этому поводу, но самое главное, это 

сохранить положение кнопки

Файлы:
 

1) Нет. По крайней мере, ничего страшного.

2) При событии клика запоминать в статическую переменную GetTickCount() и сравнивать - если очередной клик сделан через короткий промежуток времени - значит это двойной клик. 

3) Когда состояние кнопки меняется, реагировать на него в OnChartEvent() - сохранять ее положение в переменной, а когда меню создается, создавать кнопку с учетом ее положения.

 

Положение кнопки можно сохранить задав ей конкретные координаты по оси Икс и Игрик

Если речь идёт о состоянии кнопки то можно после нажатия вернуть её в исходное положение или удалить с графика с помощью команд.

В мт4  это выглядит вот так


   CHWPX=-1;
   ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,CHWPX);   
   
   ObjectDelete(ShowTicketsbutton);
   ObjectCreate(0,ShowTicketsbutton,OBJ_BUTTON,0,BrTime,HIGHT+0.00015);
   ObjectSetInteger(0,ShowTicketsbutton,OBJPROP_XDISTANCE,CHWPX-100);//Здесь указывем отступы по икс
   ObjectSetInteger(0,ShowTicketsbutton,OBJPROP_YDISTANCE,135);/Здесь указывем отступы по игрик
   ObjectSetInteger(0,ShowTicketsbutton,OBJPROP_XSIZE,70);
   ObjectSetInteger(0,ShowTicketsbutton,OBJPROP_YSIZE,20);
   string textShowTicketsbutton="ADD Tickets";
   ObjectSetString(0,ShowTicketsbutton,OBJPROP_TEXT,textShowTicketsbutton);
   ObjectSetInteger(0,ShowTicketsbutton,OBJPROP_COLOR,clrRed);
   ObjectSetInteger(0,ShowTicketsbutton,OBJPROP_FONTSIZE,8);
   ShowTicketsstate=false;
   ObjectSetInteger(0,ShowTicketsbutton,OBJPROP_STATE,ShowTicketsstate);//Установка кнопки на отжатое состояние

//--------Далее просто------//
 long ShowTickebuttonpresed=ObjectGetInteger(0,ShowTicketsbutton,OBJPROP_STATE,0);

 if(ShowTickebuttonpresed==1)
{
//----Любые события которые могут приводится в действия после нажатия кнопки 

ObjectSetInteger(0,ShowTicketsbutton,OBJPROP_STATE,0);//Отжали кнопку в исходное состояние и можно нажимать опять.

}


 

 
Yevheniy Kopanitskyy:

Положение кнопки можно сохранить задав ей конкретные координаты по оси Икс и Игрик

Если речь идёт о состоянии кнопки то можно после нажатия вернуть её в исходное положение или удалить с графика с помощью команд.

В мт4  это выглядит вот так



 

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

 
Dmitry Fedoseev:

1) Нет. По крайней мере, ничего страшного.

2) При событии клика запоминать в статическую переменную GetTickCount() и сравнивать - если очередной клик сделан через короткий промежуток времени - значит это двойной клик. 

3) Когда состояние кнопки меняется, реагировать на него в OnChartEvent() - сохранять ее положение в переменной, а когда меню создается, создавать кнопку с учетом ее положения.

Спасибо, можно по конкретнее по 3-му пункту? пожалуйста

 
vebster005:

Спасибо, можно по конкретнее по 3-му пункту? пожалуйста

А что не понятно? Объявит переменную на глобальном уровне. Почитать справку про функцию OnChartEvent(), посмотреть примеры. Если при событии клика на кнопке она нажата, а определяется это, как уже показано выше, так:

ObjectGetInteger(0,ShowTicketsbutton,OBJPROP_STATE,0);

Так вот, возвращаемое этой функцией значение присвоить той переменной. А когда будете создавать кнопку, установить ей соответствующее состояние в зависимости от значений той переменной.

Но может, у вас кнопка самодельная, тогда только вы знаете, когда она нажата, когда отжата.

 
Dmitry Fedoseev:

А что не понятно? Объявит переменную на глобальном уровне. Почитать справку про функцию OnChartEvent(), посмотреть примеры. Если при событии клика на кнопке она нажата, а определяется это, как уже показано выше, так:

Так вот, возвращаемое этой функцией значение присвоить той переменной. А когда будете создавать кнопку, установить ей соответствующее состояние в зависимости от значений той переменной.

Но может, у вас кнопка самодельная, тогда только вы знаете, когда она нажата, когда отжата.

Пожалуйста посмотрите что не так? Нажатие кнопок сохраняется, но при смене ТФ снова в исходное положение

Пожалуйста помогите

Файлы:
Example-359.mq4  19 kb
 
Ребят уже была ветка, но так и не нашли решение проблемы
https://www.mql5.com/ru/forum/300554
Сброс глобальных переменных при смене периода графика
Сброс глобальных переменных при смене периода графика
  • 2019.01.22
  • www.mql5.com
Приветствую всех! Есть индикатор. В нем при смене ТФ сбрасываются переменные: Пробовал переделать согласно примеру: Вариант 1...
 
vebster005:
Ребят уже была ветка, но так и не нашли решение проблемы
https://www.mql5.com/ru/forum/300554

Его не искали

Замените

void OnDeinit(const int reason)
  {
   if(reason==1) {
     DeleteMenu();
     ObjectDelete(0,Prefix+"MM");
   }
  }
 
Vitaly Muzichenko:

Его не искали

Замените

Спасибо, подскажите как решить проблему с переходом на другой ТФ, ибо если перейти на другой ТФ кнопки примят исходное положение

 
vebster005:

Спасибо, подскажите как решить проблему с переходом на другой ТФ, ибо если перейти на другой ТФ кнопки примят исходное положение

С этим кодом так-же проблемы с кнопками?

P.S. Посмотрел в код, моё решение не подходит