Посмотрите пожалуйста, заменил / упростил код, сделал через button, помогите сохранить положение кнопки Ибо скрытие с
поля терминала это не выход нужно именно сохранение кнопки
#property copyright"Copyright 2010"#property link""#property version"1.00"#property strict#property indicator_chart_windowexternlong X=1112; //Смещение меню по Хexternlong Y=0; //Смещение меню по Ylong X1,X2,Y1,Y2; //Координаты менюbool ShowMenu=false;//Есть или нет меню на чартеint Widht=50;//Ширина элемента менюint Height=20;//Высота элемента меню//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);//Устанавливаем отслеживание координат мышки на чарте//Пересчитаем координаты для реагирования
X1=X; Y1=Y; X2=X+Widht; Y2=Y+Height;
EventSetMillisecondTimer(100);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+voidOnChartEvent(constint id, // идентификатор события constlong& lparam, // параметр события типа longconstdouble& dparam, // параметр события типа doubleconststring& sparam) // параметр события типа string
{
//Если мышка в границах реагирования то реагируемif(id==CHARTEVENT_MOUSE_MOVE && lparam>=X1 && lparam<=X2 && dparam>=Y1 && dparam<=Y2)
{
if(!ShowMenu){CreateMenu();}//Если меню нет на чарте то создаём его
}
//Если мышка вне границ реагирования то проверяемif(id==CHARTEVENT_MOUSE_MOVE && (lparam<X1-237 || lparam>X2 || dparam<Y1 || dparam>Y2))
{
if(ShowMenu){DeleteMenu();}//Если меню есть на чарте то удаляем
}
}
//+------------------------------------------------------------------+void DeleteMenu()
{
ObjectDelete("H1");
//Пересчитаем координаты реагирования
Y2=Y+Height;
ShowMenu=false;
}
//+------------------------------------------------------------------+void CreateMenu()
{
PutButton("H1",191,27,"",false);
Y2=Y+364+46;
//X2=X400+Widht;
ShowMenu=true;
}
void PutButton(string name,int x,int y,string text,bool state)
{
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопкиObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопкиObjectSetInteger(0,name,OBJPROP_XSIZE,190);
ObjectSetInteger(0,name,OBJPROP_YSIZE,25);
//--- установим угол графика, относительно которого будут определяться координаты точкиObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_RIGHT_UPPER);
//--- установим текстObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текстаObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифтаObjectSetInteger(0,name,OBJPROP_FONTSIZE,9);
//--- установим цвет текстаObjectSetInteger(0,name,OBJPROP_COLOR,Black);
//--- установим цвет фона//ObjectSetInteger(0,name,OBJPROP_BGCOLOR,ChartGetInteger(0,CHART_COLOR_BACKGROUND));ObjectSetInteger(0,name,OBJPROP_BGCOLOR,C'245,245,245');
//--- установим цвет границыObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,C'125,125,125');
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектовObjectSetInteger(0,name,OBJPROP_HIDDEN,false);
//--- установим приоритет на получение события нажатия мыши на графикеObjectSetInteger(0,name,OBJPROP_ZORDER,0);
//--- переведем кнопку в заданное состояниеObjectSetInteger(0,name,OBJPROP_STATE,state);
}
Посмотрите пожалуйста, заменил / упростил код, сделал через button, помогите сохранить положение кнопки Ибо
скрытие с поля терминала это не выход нужно именно сохранение кнопки
Я следил за темой с самого начала, но так и не понял что в вашем понимании положение кнопки. Это координаты на графике или это состояние,
нажата\отжата?
Потом я не понимаю зачем для нажатия кнопки вы используете CHARTEVENT_MOUSE_MOVE вместо CHARTEVENT_OBJECT_CLICK
Если хотите разобраться, я к вашим услугам. Если-же просто написать, то это не ко мне.
Я следил за темой с самого начала, но так и не понял что в вашем понимании положение кнопки. Это координаты на графике или это состояние,
нажата\отжата?
Потом я не понимаю зачем для нажатия кнопки вы используете CHARTEVENT_MOUSE_MOVE вместо CHARTEVENT_OBJECT_CLICK
Если хотите разобраться, я к вашим услугам. Если-же просто написать, то это не ко мне.
Смотрите, я пытаюсь добиться подобие меню, тобишь наводим на нужное место, показывается меню(в данном случае кнопка) далее уже по нажатию кнопки
что либо происходит, так вот, если навести на нужное место показывается и вправду кнопка, но вот если нажать на неё(тобишь активировать
кнопку) далее если убрать курсор и заного поднести на нужное место тогда кнопка уже не активка! тобишь её нужно как то сохранить, если бы не
было такого действия(поднести дабы показалась кнопка) а просто нажать -->показалась кнопка --> нажали еще другая показалась и так
далее
Смотрите, я пытаюсь добиться подобие меню, тобишь наводим на нужное место, показывается меню(в данном случае кнопка) далее уже по нажатию
кнопки что либо происходит, так вот, если навести на нужное место показывается и вправду кнопка, но вот если нажать на неё(тобишь
активировать кнопку) далее если убрать курсор и заного поднести на нужное место тогда кнопка уже не активка! тобишь её нужно как то
сохранить, если бы не было такого действия(поднести дабы показалась кнопка) а просто нажать -->показалась кнопка --> нажали
еще другая показалась и так далее
Я дал полноценный ответ в том сообщении которое вы цитировали, но не проверили как это работает.
Ответьте себе на такие вопросы:
Если кнопку надо только скрыть, то зачем её удалять???
Зачем 100500 раз пересчитывать координаты кнопки и "меню"?
Я дал полноценный ответ в том сообщении которое вы цитировали, но не проверили как это работает.
Ответьте себе на такие вопросы:
Если кнопку надо только скрыть, то зачем её удалять???
Зачем 100500 раз пересчитывать координаты кнопки и "меню"?
стоп не понял вас, Сначалом ы наводим курсор мышки дабы появилось меню (пока меню состоит из 1-й кнопки) далее мы нажимаем кнопку тобишь
включаем что либо, потом же мы решаем отключить что либо а кнопка уже показывает что она не нажата!
Могли бы вы ответить, как сделать так
чтобы мы вначале поставили статус кнопки - нажатое состояние, а в нажатом состоянии должно что-то показывать но если мы кидаем на график
(ставим курсор мышки дабы появилось меню) и лицезрим что кнопка нажата - а информация которая должна выводится в начатом состоянии нет, и
она появится если мы заново щелкним на кнопку
стоп не понял вас, Сначалом ы наводим курсор мышки дабы появилось меню (пока меню состоит из 1-й кнопки) далее мы нажимаем кнопку
тобишь включаем что либо, потом же мы решаем отключить что либо а кнопка уже показывает что она не нажата!
Могли бы вы ответить, как
сделать так чтобы мы вначале поставили статус кнопки - нажатое состояние, а в нажатом состоянии должно что-то показывать но если мы
кидаем на график (ставим курсор мышки дабы появилось меню) и лицезрим что кнопка
нажата - а информация которая должна выводится в начатом состоянии нет, и она появится если мы заново щелкним на кнопку
В OnInit() создаём кнопку и больше нигде и никогда не вызываем функцию PutButton(). Сразу её прячем по моей подсказке на стр.2, затем при
наведении мышки на "куда надо" по той-же подсказке кнопку показываем. По сути функции создания и удаления меню абсолютно лишние. Ну,
разве-что так нравится, можно сделать и так. Только заменив удаление на скрытие, а создание на отображение объекта.
Вся проблема у вас в том, что кнопка создаётся со статусом отжата. Если-же вы упорно хотите удалять и создавать кнопку, то воспользуйтесь
советом Федосеева, сохраняйте её состояние в GV и при очередном создании кнопки ставьте ей состояние которое было перед удалением.
И ещё одно замечание: Это
ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
надо
делать исключительно с проверкой если объект не найден.
В OnInit() создаём кнопку и больше нигде и никогда не вызываем функцию PutButton(). Сразу её прячем по моей подсказке на стр.2, затем
при наведении мышки на "куда надо" по той-же подсказке кнопку показываем. По сути функции создания и удаления меню абсолютно лишние.
Ну, разве-что так нравится, можно сделать и так. Только заменив удаление на скрытие, а создание на отображение объекта.
Вся проблема у вас в том, что кнопка создаётся со статусом отжата. Если-же вы упорно хотите удалять и создавать кнопку, то
воспользуйтесь советом Федосеева, сохраняйте её состояние в GV и при очередном создании кнопки ставьте ей состояние которое было
перед удалением.
И ещё одно замечание: Это
надо делать исключительно с проверкой если объект не найден.
Спасибо что отвечаете, с созданием и удалением (показать/скрыть) всё понятно, теперь же могли бы объяснить: Мне нужно
чтобы информация выводилась через кнопку, тобишь нажал кнопку - появилась информация, отжали - скрылась. С этим проблем нету Проблема в том что
я изначально делаю статус кнопки нажатой, а информация с нажатой кнопки не выводится. Она выведется только если я нажму любую другую
кнопку,
Сделайте координаты кнопки static и не парьтесь. При смене любых параметров графика (ТФ, даже валютная пара) кнопка будет позиционироваться
одинаково, пока Вы не закроете график, либо явно не измените значения этих координат. Впервые увидел хоть какой-нибудь смысл в MQL-вском
понимании режима управления памятью static )
Алексей Тарабанов: Сделайте координаты кнопки
static и не парьтесь. При смене любых параметров графика (ТФ, даже валютная пара) кнопка будет позиционироваться одинаково, пока Вы
не закроете
график, либо явно не измените значения этих координат. Впервые увидел хоть какой-нибудь смысл в MQL-вском понимании
режима управления памятью static )
А почему такое решение? Не правильней-ли будет
Посмотрите пожалуйста, заменил / упростил код, сделал через button, помогите сохранить положение кнопки
Ибо скрытие с поля терминала это не выход нужно именно сохранение кнопки
Посмотрите пожалуйста, заменил / упростил код, сделал через button, помогите сохранить положение кнопки
Ибо скрытие с поля терминала это не выход нужно именно сохранение кнопки
Я следил за темой с самого начала, но так и не понял что в вашем понимании положение кнопки. Это координаты на графике или это состояние, нажата\отжата?
Потом я не понимаю зачем для нажатия кнопки вы используете CHARTEVENT_MOUSE_MOVE вместо CHARTEVENT_OBJECT_CLICK
Если хотите разобраться, я к вашим услугам. Если-же просто написать, то это не ко мне.
Я следил за темой с самого начала, но так и не понял что в вашем понимании положение кнопки. Это координаты на графике или это состояние, нажата\отжата?
Потом я не понимаю зачем для нажатия кнопки вы используете CHARTEVENT_MOUSE_MOVE вместо CHARTEVENT_OBJECT_CLICK
Если хотите разобраться, я к вашим услугам. Если-же просто написать, то это не ко мне.
Смотрите, я пытаюсь добиться подобие меню, тобишь наводим на нужное место, показывается меню(в данном случае кнопка) далее уже по нажатию кнопки что либо происходит, так вот, если навести на нужное место показывается и вправду кнопка, но вот если нажать на неё(тобишь активировать кнопку) далее если убрать курсор и заного поднести на нужное место тогда кнопка уже не активка! тобишь её нужно как то сохранить, если бы не было такого действия(поднести дабы показалась кнопка) а просто нажать -->показалась кнопка --> нажали еще другая показалась и так далее
Смотрите, я пытаюсь добиться подобие меню, тобишь наводим на нужное место, показывается меню(в данном случае кнопка) далее уже по нажатию кнопки что либо происходит, так вот, если навести на нужное место показывается и вправду кнопка, но вот если нажать на неё(тобишь активировать кнопку) далее если убрать курсор и заного поднести на нужное место тогда кнопка уже не активка! тобишь её нужно как то сохранить, если бы не было такого действия(поднести дабы показалась кнопка) а просто нажать -->показалась кнопка --> нажали еще другая показалась и так далее
Я дал полноценный ответ в том сообщении которое вы цитировали, но не проверили как это работает.
Ответьте себе на такие вопросы:
Если кнопку надо только скрыть, то зачем её удалять???
Зачем 100500 раз пересчитывать координаты кнопки и "меню"?
Я дал полноценный ответ в том сообщении которое вы цитировали, но не проверили как это работает.
Ответьте себе на такие вопросы:
Если кнопку надо только скрыть, то зачем её удалять???
Зачем 100500 раз пересчитывать координаты кнопки и "меню"?
стоп не понял вас,
Сначалом ы наводим курсор мышки дабы появилось меню (пока меню состоит из 1-й кнопки) далее мы нажимаем кнопку тобишь включаем что либо, потом же мы решаем отключить что либо а кнопка уже показывает что она не нажата!
Могли бы вы ответить, как сделать так чтобы мы вначале поставили статус кнопки - нажатое состояние, а в нажатом состоянии должно что-то показывать но если мы кидаем на график (ставим курсор мышки дабы появилось меню) и лицезрим что кнопка нажата - а информация которая должна выводится в начатом состоянии нет, и она появится если мы заново щелкним на кнопку
стоп не понял вас,
Сначалом ы наводим курсор мышки дабы появилось меню (пока меню состоит из 1-й кнопки) далее мы нажимаем кнопку тобишь включаем что либо, потом же мы решаем отключить что либо а кнопка уже показывает что она не нажата!
Могли бы вы ответить, как сделать так чтобы мы вначале поставили статус кнопки - нажатое состояние, а в нажатом состоянии должно что-то показывать но если мы кидаем на график (ставим курсор мышки дабы появилось меню) и лицезрим что кнопка нажата - а информация которая должна выводится в начатом состоянии нет, и она появится если мы заново щелкним на кнопку
В OnInit() создаём кнопку и больше нигде и никогда не вызываем функцию PutButton(). Сразу её прячем по моей подсказке на стр.2, затем при наведении мышки на "куда надо" по той-же подсказке кнопку показываем. По сути функции создания и удаления меню абсолютно лишние. Ну, разве-что так нравится, можно сделать и так. Только заменив удаление на скрытие, а создание на отображение объекта.
Вся проблема у вас в том, что кнопка создаётся со статусом отжата. Если-же вы упорно хотите удалять и создавать кнопку, то воспользуйтесь советом Федосеева, сохраняйте её состояние в GV и при очередном создании кнопки ставьте ей состояние которое было перед удалением.
И ещё одно замечание: Это
надо делать исключительно с проверкой если объект не найден.В OnInit() создаём кнопку и больше нигде и никогда не вызываем функцию PutButton(). Сразу её прячем по моей подсказке на стр.2, затем при наведении мышки на "куда надо" по той-же подсказке кнопку показываем. По сути функции создания и удаления меню абсолютно лишние. Ну, разве-что так нравится, можно сделать и так. Только заменив удаление на скрытие, а создание на отображение объекта.
Вся проблема у вас в том, что кнопка создаётся со статусом отжата. Если-же вы упорно хотите удалять и создавать кнопку, то воспользуйтесь советом Федосеева, сохраняйте её состояние в GV и при очередном создании кнопки ставьте ей состояние которое было перед удалением.
И ещё одно замечание: Это
надо делать исключительно с проверкой если объект не найден.Спасибо что отвечаете, с созданием и удалением (показать/скрыть) всё понятно, теперь же могли бы объяснить:
Мне нужно чтобы информация выводилась через кнопку, тобишь нажал кнопку - появилась информация, отжали - скрылась. С этим проблем нету
Проблема в том что я изначально делаю статус кнопки нажатой, а информация с нажатой кнопки не выводится. Она выведется только если я нажму любую другую кнопку,
Если можно приведите пример пожалуйста
Сделайте координаты кнопки static и не парьтесь. При смене любых параметров графика (ТФ, даже валютная пара) кнопка будет позиционироваться одинаково, пока Вы не закроете график, либо явно не измените значения этих координат. Впервые увидел хоть какой-нибудь смысл в MQL-вском понимании режима управления памятью static )
static сбрасывается в индикаторах при смене тайма
static сбрасывается в индикаторах при смене тайма
Нет. Он это делает во всех языках программирования, кроме MQL. Пробуйте, если есть желание.