一个有按钮的任务! - 页 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:TC在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: 在测试器中不工作... 是哪个终端?在MT5中,定时器在测试器中工作,你可以用它来检查。在MT4中,计时器也不工作(()。 Rorschach 2015.09.23 16:53 #67 你可以用一个静态变量 来做,因为只有一个按钮被按下。被按下的按钮被记忆下来,然后在每次打勾时进行比较。如果有差异,则松开按钮,新的数值被储存。 Vladimir Pastushak 2015.09.23 18:46 #68 而所有简单的2x2解决方案都消失了,连同顾问......。 Koldun Zloy 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 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
现在可能是时候附上测试代码了。这将使实验更加容易。
这里是
希望会有解决问题的办法......
我在哪里写时间? 我是否为每个按钮创建变量来存储时间?
谢谢大家,问题解决了,我找到了一个更简单的方法,我自己坐着想......。
你在第二页找到了解决方案https://www.mql5.com/ru/forum/64408/page2#comment_1923439
并没有分享。
TC在https://www.mql5.com/ru/forum/64408/page2#comment_1923439 的第二页上找到了一个解决方案
并没有分享
我想完成它。
对不起,但我总是对代码感到惊讶
我想完成它。
在测试器中不工作...
你可以用一个静态变量 来做,因为只有一个按钮被按下。
被按下的按钮被记忆下来,然后在每次打勾时进行比较。如果有差异,则松开按钮,新的数值被储存。