Eine Aufgabe mit Tasten! - Seite 7

 
Karputov Vladimir:
Es ist wahrscheinlich an der Zeit, den Testcode anzuhängen. Das macht das Experimentieren einfacher.

Hier ist

//+------------------------------------------------------------------+
//|                                                       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);
  }
//+------------------------------------------------------------------+

Hoffentlich gibt es Lösungen für dieses Problem...

 
Vladimir Pastushak:

Wo schreibe ich die Zeit hin? Erstelle ich Variablen für jede Schaltfläche, um die Zeit in ihnen zu speichern?

Vielen Dank an alle das Problem gelöst, fand ich einen einfacheren Weg, ich selbst sitzen und fragen ...

Sie haben die Lösung auf der zweiten Seitehttps://www.mql5.com/ru/forum/64408/page2#comment_1923439 gefunden.

und nicht geteilt hat.

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

TC fand eine Lösung auf der zweiten Seite vonhttps://www.mql5.com/ru/forum/64408/page2#comment_1923439

und nicht geteilt hat

vielleicht schlägt ja jemand einen besseren vor ...
 
Entschuldigen Sie, aber ich bin immer wieder überrascht über den Code
bool b;

if(b==true)
   ...

Ich möchte es zu Ende bringen:
bool b;

if(b==true)
  {
  ...
  }
else
  {
   if(b==false)
     ...
   else
     // не true и не false - что-то другое
  }
 
Ilyas:
Entschuldigen Sie, aber ich bin immer wieder überrascht über den Code

Ich würde es gerne zu Ende bringen:
Dies ist ein Muster für Tests, seien Sie nicht wählerisch...
 
Vladimir Pastushak:
Funktioniert nicht in der Testversion...
Um welches Terminal handelt es sich? Im MT5 funktioniert der Timer im Tester, Sie können ihn zur Überprüfung verwenden. In MT4 funktioniert der Timer auch nicht ((
 

Sie können sich mit einer statischen Variablen begnügen, da nur eine Taste gedrückt wird.

Die gedrückte Taste wird gespeichert, und bei jedem Ticken wird ein Vergleich durchgeführt. Wenn eine Differenz besteht, wird die Taste losgelassen und der neue Wert wird gespeichert.

 
Und alle einfachen 2x2-Lösungen sind verschwunden, zusammen mit den Beratern ...
 
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 );
   }
}