Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1138

 
Igor Makanu:

Je n'ai pas utilisé SB depuis longtemps, je ne me souviens pas de la moitié, mais essayez de faire une sélection et une désélection du logiciel en faisant ChartRedraw() de l'objet OBJ_EDIT à chaque fois, vous pouvez obtenir les noms des objets de SB, il doit y avoir une méthode Name

Et si ?

HH : et Sleep() est probablement nécessaire pour ChartRedraw(), mais Sleep() ne fonctionne pas dans les indicateurs.

Si vous voulez que la propriété d'objet OBJPROP_SELECTED soit VRAIE, ce n'est pas le cas. Car dans ce cas, l'objet sera mis en évidence sur le graphique, mais la zone de saisie ne sera pas active.
 
Maksym Mudrakov:
Si vous voulez faire en sorte que la propriété OBJPROP_SELECTED soit VRAIE, ce n'est pas le cas. Car dans ce cas, l'objet sera mis en évidence sur le graphique, mais la boîte de saisie ne sera pas active.

coché sur tous les panneaux, il ne fonctionne pas en mettant en évidence l'objet OBJ_EDIT

Je ne sais pas, cherchez sur le forum :

"tab"

"tab"

" input focus "

 
Existe-t-il un moyen de mettre à jour le fichier MQL5/logs/*.log sans fermer le terminal? Pour voir son contenu frais.
 
ascerdfg:
Existe-t-il un moyen de mettre à jour le fichier MQL5/logs/*.log sans fermer le terminal ? Pour voir son contenu frais.

cliquez avec le bouton droit de la souris sur le terminal dans le menu contextuel - ouvrir, ce qui permet d'accéder au fichier de log.

pas pratique

 
Igor Makanu:

cliquez avec le bouton droit de la souris sur le terminal dans le menu contextuel - ouvrir, ce qui permet d'accéder au fichier de log.

pas pratique

Où dois-je cliquer ?
 
ascerdfg:
Où dois-je cliquer ?

Il fallait faire taire Rzewski...


 
Maksym Mudrakov:

Le graphe possède deux objets de type OBJ_EDIT

L'objectif est de faire la transition entre ces deux champs de saisie en appuyant sur la touche Tab.

Le principal problème n'est pas de lire l'événement clavier, mais de rendre le champ de saisie actif de manière programmatique.

Je comprends que vous devez utiliser user32.dll, mais comme je ne suis pas doué pour cela, aidez-moi s'il vous plaît.

Merci.

La solution est trouvée :

#property strict

struct RECT
  {
   int               Left;   // x position of upper-left corner
   int               Top;    // y position of upper-left corner
   int               Right;  // x position of lower-right corner
   int               Bottom; // y position of lower-right corner
  };
struct POINT
  {
   int               posX;   // x position
   int               posY;   // y position
  };

#import "user32.dll"
void  mouse_event(int dwFlags,int dx,int dy,int dwData,int dwExtraInfo);
bool  GetWindowRect(int hWnd,RECT &lpRect);
int   GetSystemMetrics(int nIndex);
bool  GetCursorPos(POINT &lpPoint);
bool  SetCursorPos(int x,int y);
#import

string edits[], pref;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   pref="EA_EDIT_SELECT_";
   int size=6;
   ArrayResize(edits,size);

   int width=100, heigh=25;
   int x=width, y=heigh;
   for(int i=0; i<size; i++)
     {
      string num=(string)(i/2+1);
      string text="Name ";
      edits[i]=pref+(string)i;
      if(i%2==0)
        {
         text="First "+text+num;
         x=width;
         y+=heigh+5;
        }
      else
        {
         text="Last "+text+num;
         x=2*width+5;
        }
      EditCreate(edits[i],x,y,width,heigh,text);
     }
   EventEditSelect(edits);
   return(INIT_SUCCEEDED);

  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,pref,-1,-1);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   if(id == CHARTEVENT_KEYDOWN)
      EventEditSelect(edits);
   else
      if(id == CHARTEVENT_OBJECT_ENDEDIT)
        {
         bool stateTab=TerminalInfoInteger(TERMINAL_KEYSTATE_TAB)<0;
         if(stateTab)
            EventEditSelect(edits);
        }
  }
//--------------------------------------------------------------------+
//      Create Edit                                                   |
//--------------------------------------------------------------------+
void EditCreate(string           name="Edit",              // object name
                int              x=0,                      // X coordinate
                int              y=0,                      // Y coordinate
                int              width=50,                 // width
                int              height=18,                // height
                string           text="Text")              // text
  {
   ObjectCreate(0,name,OBJ_EDIT,0,0,0) ;
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
   ObjectSetInteger(0,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,height);
   ObjectSetString(0,name,OBJPROP_TEXT,text);
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
   ObjectSetInteger(0,name,OBJPROP_ALIGN,ALIGN_CENTER);
   ObjectSetInteger(0,name,OBJPROP_READONLY,false);
   ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);
   ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrWhite);
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,clrGray);
   ObjectSetInteger(0,name,OBJPROP_BACK,false);
   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);
   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);
  }
//--------------------------------------------------------------------+
//      MOVE BETWEEN OBJ_EDIT BY TAB KEY                              |
//--------------------------------------------------------------------+
void EventEditSelect(string &editNames[])
  {
   bool back=TerminalInfoInteger(TERMINAL_KEYSTATE_SHIFT)<0;

   int size=ArraySize(editNames);
   if(size==0)
      return;
   static int index=0;

   if(!back)
     {
      if(index==size-1)
         index=0;
      else
         index++;
     }
   else
     {
      if(index==0)
         index=size-1;
      else
         index--;
     }

   string name=editNames[index];
   int x=(int)ObjectGetInteger(0,name,OBJPROP_XDISTANCE);
   int y=(int)ObjectGetInteger(0,name,OBJPROP_YDISTANCE);
   int width=(int)ObjectGetInteger(0,name,OBJPROP_XSIZE);
   int height=(int)ObjectGetInteger(0,name,OBJPROP_YSIZE);

   MouseClick(int ((2*x+width)/2),int((2*y+height)/2));
  }
void MouseClick(const int x, const int y)
  {
   Sleep(50);
   POINT currentPoint;
   GetCursorPos(currentPoint);
   POINT clickPoint=ConvertXY(x,y);
   mouse_event(0x8007,clickPoint.posX,clickPoint.posY,0,0);
   SetCursorPos(currentPoint.posX,currentPoint.posY);
   Sleep(50);
  }
POINT ConvertXY(const int x,const int y)
  {
   POINT AbsolutePoint;
   RECT  WndRect;
   int BorderX=5,BorderY=5;
   int screenX=GetSystemMetrics(0);
   int screenY=GetSystemMetrics(1);
   GetWindowRect(WindowHandle(_Symbol,_Period),WndRect);
   AbsolutePoint.posX=int ((x+WndRect.Left+BorderX)*65535/screenX);
   AbsolutePoint.posY=int ((y+WndRect.Top +BorderY)*65535/screenY);
   return(AbsolutePoint);
  }
 
MQL5, ObjectCreate ne dessine rien, les objets n'apparaissent même pas dans la liste des objets. La création se fait à OnInit, peut-être est-ce là le problème ?
En même temps, si nous retirons le robot du graphique, les objets créés seront affichés
 
Roman Sharanov:
MQL5, ObjectCreate ne dessine rien, les objets n'apparaissent même pas dans la liste des objets. La création se fait à OnInit, peut-être est-ce là le problème ?
Toutefois, si nous supprimons le robot du graphique, les objets créés seront affichés.

Il est possible que le prix et l'heure des coordonnées de l'objet soient égaux à zéro. Vérifiez-le de la façon suivante : appuyez sur Ctrl+B, dans la boîte de dialogue qui apparaît, appuyez sur le bouton "Tout" et regardez la liste des objets existants. S'il y en a un, ouvrez les propriétés et voyez les coordonnées.

 
Artyom Trishkin:

Il fallait faire taire Rzewski...


A quel moment devez-vous faire un clic droit ?