Задача с кнопками ! - страница 7 12345678 Новый комментарий Vladimir Pastushak 2015.09.23 15:20 #61 Karputov Vladimir: Наверное пора код тестовый приложить. Так будет легче проводить эксперименты.Вот//+------------------------------------------------------------------+ //| Button.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { ButtonCreate(0,"A",0,20,50,100,20,CORNER_LEFT_UPPER,"Button A"); ButtonCreate(0,"B",0,20,80,100,20,CORNER_LEFT_UPPER,"Button B"); if((bool)ObjectGetInteger(0,"A",OBJPROP_STATE)==true) ObjectSetInteger(0,"B",OBJPROP_STATE,false); if((bool)ObjectGetInteger(0,"B",OBJPROP_STATE)==true) ObjectSetInteger(0,"A",OBJPROP_STATE,false); } //+------------------------------------------------------------------+ bool ButtonCreate(const long chart_ID=0, // ID графика const string name="Button", // имя кнопки const int sub_window=0, // номер подокна const int x=0, // координата по оси X const int y=0, // координата по оси Y const int width=50, // ширина кнопки const int height=18, // высота кнопки const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки const string text="Button", // текст const string font="Arial", // шрифт const int font_size=10, // размер шрифта const color clr=clrBlack, // цвет текста const color back_clr=C'236,233,216', // цвет фона const color border_clr=clrNONE, // цвет границы const bool state=false, // нажата/отжата const bool back=false, // на заднем плане const bool selection=false, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { //--- сбросим значение ошибки ResetLastError(); //--- создадим кнопку if(ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) { //--- установим координаты кнопки ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y); //--- установим размер кнопки ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height); //--- установим угол графика, относительно которого будут определяться координаты точки ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); //--- установим текст ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); //--- установим шрифт текста ObjectSetString(chart_ID,name,OBJPROP_FONT,font); //--- установим размер шрифта ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); //--- установим цвет текста ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- установим цвет фона ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); //--- установим цвет границы ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); //--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- переведем кнопку в заданное состояние ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); //--- включим (true) или отключим (false) режим перемещения кнопки мышью ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); } //--- успешное выполнение return(true); } //+------------------------------------------------------------------+ Надеюсь что будут решения задачи.. Vladimir Suslov 2015.09.23 15:37 #62 Vladimir Pastushak: Куда записывать время ? Создавать переменные для каждой кнопки что бы хранить в них время ?Всем спасибо задача решена, я нашёл более простой способ. Сам сижу и удивляюсь ...ТС еще на второй странице нашел решение https://www.mql5.com/ru/forum/64408/page2#comment_1923439и не поделился Задача с кнопками ! www.mql5.com Задача : При нажатии на любую из кнопок предыдущая нажатая кнопка должна отжаться. - Страница 2 - Категория: общее обсуждение Vladimir Pastushak 2015.09.23 15:43 #63 Event: ТС еще на второй странице нашел решение https://www.mql5.com/ru/forum/64408/page2#comment_1923439и не поделился может кто то предложит лучше ... Ilyas 2015.09.23 15:48 #64 Извините конечно, но меня всегда удивляет кодbool b; if(b==true) ...Хочется его дописать:bool b; if(b==true) { ... } else { if(b==false) ... else // не true и не false - что-то другое } Vladimir Pastushak 2015.09.23 15:57 #65 Ilyas: Извините конечно, но меня всегда удивляет кодХочется его дописать:Это образец для тестов, не придирайтесь ... Alexey Volchanskiy 2015.09.23 16:49 #66 Vladimir Pastushak: Не работает в тестере...А какой терминал-то? В МТ5 работает в тестере таймер, можно по нему проверять. В МТ4 и таймер не работает тоже (( Rorschach 2015.09.23 16:53 #67 Можно обойтись одной статической переменной, так как нажата только одна кнопка.Запоминается нажатая кнопка, потом при каждом тике идет сравнение. Если есть отличие, то кнопка из памяти отжимается и запоминается новое значение. Vladimir Pastushak 2015.09.23 18:46 #68 И все куда то все простые решения 2х2 делись, вместе с советчиками ... [Удален] 2015.09.24 12:44 #69 bool stateA = false; bool stateB = false; bool stateC = false; int init() { ButtonCreate( 0, "A", 0, 20, 50, 100, 20, CORNER_LEFT_UPPER, "Button A" ); ButtonCreate( 0, "B", 0, 20, 80, 100, 20, CORNER_LEFT_UPPER, "Button B" ); ButtonCreate( 0, "C", 0, 20, 110, 100, 20, CORNER_LEFT_UPPER, "Button C" ); return 0; } void OnTick() { if( stateA != (bool)ObjectGetInteger( 0, "A", OBJPROP_STATE ) ) { stateA = true; stateB = false; stateC = false; ObjectSetInteger( 0, "B", OBJPROP_STATE, false ); ObjectSetInteger( 0, "C", OBJPROP_STATE, false ); } if( stateB != (bool)ObjectGetInteger( 0, "B", OBJPROP_STATE ) ) { stateA = false; stateB = true; stateC = false; ObjectSetInteger( 0, "A", OBJPROP_STATE, false ); ObjectSetInteger( 0, "C", OBJPROP_STATE, false ); } if( stateC != (bool)ObjectGetInteger( 0, "C", OBJPROP_STATE ) ) { stateA = false; stateB = false; stateC = true; ObjectSetInteger( 0, "A", OBJPROP_STATE, false ); ObjectSetInteger( 0, "B", OBJPROP_STATE, false ); } } Vladimir Pastushak 2015.09.24 12:47 #70 static int t=0; void OnTick() { ButtonCreate( 0, "A", 0, 20, 50, 100, 20, CORNER_LEFT_UPPER, "Button A" ); ButtonCreate( 0, "B", 0, 20, 80, 100, 20, CORNER_LEFT_UPPER, "Button B" ); ButtonCreate( 0, "C", 0, 20, 110, 100, 20, CORNER_LEFT_UPPER, "Button C" ); if( (bool)ObjectGetInteger( 0, "A", OBJPROP_STATE ) && t!=0) { t=0; ObjectSetInteger( 0, "B", OBJPROP_STATE, false ); ObjectSetInteger( 0, "C", OBJPROP_STATE, false ); } if( stateB != (bool)ObjectGetInteger( 0, "B", OBJPROP_STATE ) && t!=1 ) { t=1; ObjectSetInteger( 0, "A", OBJPROP_STATE, false ); ObjectSetInteger( 0, "C", OBJPROP_STATE, false ); } if( stateC != (bool)ObjectGetInteger( 0, "C", OBJPROP_STATE ) && t!=2 ) { t=2; ObjectSetInteger( 0, "A", OBJPROP_STATE, false ); ObjectSetInteger( 0, "B", OBJPROP_STATE, false ); } } 12345678 Новый комментарий
Наверное пора код тестовый приложить. Так будет легче проводить эксперименты.
Вот
Надеюсь что будут решения задачи..
Куда записывать время ? Создавать переменные для каждой кнопки что бы хранить в них время ?
Всем спасибо задача решена, я нашёл более простой способ. Сам сижу и удивляюсь ...
ТС еще на второй странице нашел решение https://www.mql5.com/ru/forum/64408/page2#comment_1923439
и не поделился
ТС еще на второй странице нашел решение https://www.mql5.com/ru/forum/64408/page2#comment_1923439
и не поделился
Хочется его дописать:
Извините конечно, но меня всегда удивляет код
Хочется его дописать:
Не работает в тестере...
Можно обойтись одной статической переменной, так как нажата только одна кнопка.
Запоминается нажатая кнопка, потом при каждом тике идет сравнение. Если есть отличие, то кнопка из памяти отжимается и запоминается новое значение.