一个有按钮的任务! - 页 7

 
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 Pastushak:

我在哪里写时间? 我是否为每个按钮创建变量来存储时间?

谢谢大家,问题解决了,我找到了一个更简单的方法,我自己坐着想......。

你在第二页找到了解决方案https://www.mql5.com/ru/forum/64408/page2#comment_1923439

并没有分享。

Задача с кнопками !
Задача с кнопками !
  • www.mql5.com
Задача : При нажатии на любую из кнопок предыдущая нажатая кнопка должна отжаться. - Страница 2 - Категория: общее обсуждение
 
Event:

TC在https://www.mql5.com/ru/forum/64408/page2#comment_1923439 的第二页上找到了一个解决方案

并没有分享

也许有人会建议一个更好的......
 
对不起,但我总是对代码感到惊讶
bool b;

if(b==true)
   ...

我想完成它。
bool b;

if(b==true)
  {
  ...
  }
else
  {
   if(b==false)
     ...
   else
     // не true и не false - что-то другое
  }
 
Ilyas:
对不起,但我总是对代码感到惊讶

我想完成它。
这是一个用于测试的样本,不要挑剔...
 
Vladimir Pastushak:
在测试器中不工作...
是哪个终端?在MT5中,定时器在测试器中工作,你可以用它来检查。在MT4中,计时器也不工作(()。
 

你可以用一个静态变量 来做,因为只有一个按钮被按下。

被按下的按钮被记忆下来,然后在每次打勾时进行比较。如果有差异,则松开按钮,新的数值被储存。

 
而所有简单的2x2解决方案都消失了,连同顾问......。
 
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 );
   }
}
 
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 );
   }
}