¡Una tarea con botones! - página 7 12345678 Nuevo comentario Vladimir Pastushak 2015.09.23 15:20 #61 Karputov Vladimir: Probablemente sea el momento de adjuntar el código de prueba. Esto facilitará la experimentación.Aquí está//+------------------------------------------------------------------+ //| 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); } //+------------------------------------------------------------------+ Esperemos que haya soluciones al problema... Vladimir Suslov 2015.09.23 15:37 #62 Vladimir Pastushak: ¿Dónde escribo la hora? ¿Creo variables para cada botón para almacenar la hora en ellas?Gracias a todos el problema está resuelto, he encontrado una forma más sencilla, yo mismo me siento y me pregunto ...Ha encontrado la solución en la segunda páginahttps://www.mql5.com/ru/forum/64408/page2#comment_1923439y no compartió. Задача с кнопками ! www.mql5.com Задача : При нажатии на любую из кнопок предыдущая нажатая кнопка должна отжаться. - Страница 2 - Категория: общее обсуждение Vladimir Pastushak 2015.09.23 15:43 #63 Event: TC encontró la solución en la segunda página dehttps://www.mql5.com/ru/forum/64408/page2#comment_1923439y no compartió tal vez alguien sugiera uno mejor ... Ilyas 2015.09.23 15:48 #64 Perdone, pero siempre me sorprende el códigobool b; if(b==true) ... Quiero terminarlo:bool b; if(b==true) { ... } else { if(b==false) ... else // не true и не false - что-то другое } Vladimir Pastushak 2015.09.23 15:57 #65 Ilyas: Perdone, pero siempre me sorprende el código Me gustaría terminarlo: Esta es una muestra para pruebas, no seas exigente... Alexey Volchanskiy 2015.09.23 16:49 #66 Vladimir Pastushak: No funciona en el probador...¿Qué terminal es? En MT5 el temporizador funciona en el probador, puedes usarlo para comprobarlo. En MT4 el temporizador tampoco funciona (( Rorschach 2015.09.23 16:53 #67 Puedes conformarte con una variable estática, ya que sólo se pulsa un botón.El botón pulsado se memoriza y luego se hace una comparación en cada tic. Si hay una diferencia, se suelta el botón y se almacena el nuevo valor. Vladimir Pastushak 2015.09.23 18:46 #68 Y todas las soluciones simples de 2x2 han desaparecido, junto con los asesores... [Eliminado] 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 Nuevo comentario
Probablemente sea el momento de adjuntar el código de prueba. Esto facilitará la experimentación.
Aquí está
Esperemos que haya soluciones al problema...
¿Dónde escribo la hora? ¿Creo variables para cada botón para almacenar la hora en ellas?
Gracias a todos el problema está resuelto, he encontrado una forma más sencilla, yo mismo me siento y me pregunto ...
Ha encontrado la solución en la segunda páginahttps://www.mql5.com/ru/forum/64408/page2#comment_1923439
y no compartió.
TC encontró la solución en la segunda página dehttps://www.mql5.com/ru/forum/64408/page2#comment_1923439
y no compartió
Quiero terminarlo:
Perdone, pero siempre me sorprende el código
Me gustaría terminarlo:
No funciona en el probador...
Puedes conformarte con una variable estática, ya que sólo se pulsa un botón.
El botón pulsado se memoriza y luego se hace una comparación en cada tic. Si hay una diferencia, se suelta el botón y se almacena el nuevo valor.