Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1138

 
Igor Makanu:

Non uso SB da molto tempo, non ne ricordo la metà, ma prova a fare una selezione e deselezione software facendo ChartRedraw() dell'oggetto OBJ_EDIT ogni volta, puoi ottenere i nomi degli oggetti da SB, ci deve essere un metodo Name

e se?

HH: e Sleep() è probabilmente necessario per ChartRedraw(), ma Sleep() non funziona negli indicatori

Se intendete rendere la proprietà dell'oggetto OBJPROP_SELECTED TRUE, questo non è il caso. Perché in questo caso l'oggetto sarà evidenziato sul grafico, ma la casella di input non diventerà attiva.
 
Maksym Mudrakov:
Se intendete rendere la proprietà dell'oggetto OBJPROP_SELECTED TRUE, non è così. Perché in questo caso l'oggetto sarà evidenziato sul grafico, ma la casella di input non diventerà attiva.

spuntato su tutti i pannelli, non funziona evidenziando l'oggetto OBJ_EDIT

Non lo so, cerca nel forum:

"scheda"

"scheda"

"input focus"

 
C'è un modo per aggiornare il file MQL5/logs/*.log senza chiudere il terminale? Per visualizzare il suo contenuto fresco.
 
ascerdfg:
C'è un modo per aggiornare il file MQL5/logs/*.log senza chiudere il terminale? Per visualizzare il suo contenuto fresco.

fare clic con il tasto destro del mouse nel terminale nel menu contestuale - apri, questo permette di accedere al file di registro

non conveniente

 
Igor Makanu:

fare clic con il tasto destro del mouse nel terminale nel menu contestuale - apri, questo permette di accedere al file di registro

non conveniente

Dove devo cliccare?
 
ascerdfg:
Dove devo cliccare?

Rzewski doveva essere zittito...


 
Maksym Mudrakov:

Il grafico ha due oggetti di tipo OBJ_EDIT

L'obiettivo è quello di fare la transizione tra questi due campi di input premendo Tab.

Il problema principale non è la lettura dell'evento tastiera, ma come rendere il campo di input attivo programmaticamente.

Capisco che è necessario usare user32.dll, ma dato che non sono bravo, per favore aiutatemi.

Grazie.

La soluzione è stata trovata:

#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 non disegna nulla, gli oggetti non appaiono nemmeno nella lista degli oggetti. La creazione viene fatta in OnInit, forse è questo il problema?
Allo stesso tempo, se rimuoviamo il robot dal grafico, gli oggetti creati saranno visualizzati
 
Roman Sharanov:
MQL5, ObjectCreate non disegna nulla, gli oggetti non appaiono nemmeno nella lista degli oggetti. La creazione viene fatta in OnInit, forse è questo il problema?
Tuttavia, se rimuoviamo il robot dal grafico, gli oggetti creati saranno visualizzati

È possibile che il prezzo e il tempo delle coordinate dell'oggetto siano uguali a zero. Controllate in questo modo: premete Ctrl+B, nella finestra di dialogo che appare, premete il pulsante "Tutti" e guardate la lista degli oggetti esistenti. Se c'è, apri le proprietà e vedi le coordinate.

 
Artyom Trishkin:

Rzewski doveva essere zittito...


A che punto devi cliccare con il tasto destro?