Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1138

 
Igor Makanu:

Ich habe SB schon lange nicht mehr benutzt, ich erinnere mich nicht mehr an die Hälfte, aber versuchen Sie, eine Softwareauswahl zu treffen und die Auswahl aufzuheben, indem Sie jedes Mal ChartRedraw() des OBJ_EDIT-Objekts ausführen, Sie können die Namen der Objekte von SB erhalten, es muss eine Name-Methode geben

was wäre wenn?

HH: und Sleep() wird wahrscheinlich für ChartRedraw() benötigt, aber Sleep() funktioniert nicht in Indikatoren

Wenn Sie meinen, dass die Objekteigenschaft OBJPROP_SELECTED TRUE sein soll, ist dies nicht der Fall. Denn in diesem Fall wird das Objekt im Diagramm hervorgehoben, aber das Eingabefeld wird nicht aktiv.
 
Maksym Mudrakov:
Wenn Sie meinen, dass die Objekteigenschaft OBJPROP_SELECTED TRUE sein soll, ist das nicht der Fall. Denn in diesem Fall wird das Objekt im Diagramm hervorgehoben, aber das Eingabefeld wird nicht aktiv.

in allen Panels aktiviert ist, funktioniert das Hervorheben des OBJ_EDIT-Objekts nicht

Ich weiß es nicht, suchen Sie im Forum:

"tab"

"tab"

"Eingabefokus"

 
Gibt es eine Möglichkeit, die Datei MQL5/logs/*.log zu aktualisieren, ohne das Terminal zu schließen? Um den neuen Inhalt zu sehen.
 
ascerdfg:
Gibt es eine Möglichkeit, die Datei MQL5/logs/*.log zu aktualisieren, ohne das Terminal zu schließen? Um den neuen Inhalt zu sehen.

Rechtsklick auf das Terminal im Kontextmenü - Öffnen , dies ermöglicht den Zugriff auf die Protokolldatei

nicht günstig

 
Igor Makanu:

Rechtsklick auf das Terminal im Kontextmenü - Öffnen , dies ermöglicht den Zugriff auf die Protokolldatei

nicht günstig

Wo muss ich klicken?
 
ascerdfg:
Wo muss ich klicken?

Rzewski musste zum Schweigen gebracht werden...


 
Maksym Mudrakov:

Der Graph hat zwei Objekte vom Typ OBJ_EDIT

Ziel ist es, den Übergang zwischen diesen beiden Eingabefeldern durch Drücken der Tabulatortaste zu erreichen.

Das Hauptproblem ist nicht das Lesen des Tastaturereignisses, sondern die Frage, wie man das Eingabefeld programmatisch aktiviert.

Ich verstehe, dass Sie user32.dll verwenden müssen, aber da ich nicht gut darin bin, bitte ich um Hilfe.

Ich danke Ihnen.

Die Lösung ist gefunden:

#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 zeichnet nichts, die Objekte erscheinen nicht einmal in der Objektliste. Die Erstellung erfolgt bei OnInit, vielleicht ist das das Problem?
Wenn wir gleichzeitig den Roboter aus dem Diagramm entfernen, werden die erstellten Objekte angezeigt
 
Roman Sharanov:
MQL5, ObjectCreate zeichnet nichts, die Objekte erscheinen nicht einmal in der Objektliste. Die Erstellung erfolgt bei OnInit, vielleicht ist das das Problem?
Wenn wir jedoch den Roboter aus dem Diagramm entfernen, werden die erstellten Objekte angezeigt

Es ist möglich, dass der Preis und die Zeit für die Objektkoordinaten gleich Null sind. Überprüfen Sie es so: Drücken Sie Strg+B, drücken Sie in dem erscheinenden Dialogfenster die Schaltfläche "Alle" und sehen Sie sich die Liste der vorhandenen Objekte an. Wenn es eine gibt, öffnen Sie die Eigenschaften und sehen Sie die Koordinaten.

 
Artyom Trishkin:

Rzewski musste zum Schweigen gebracht werden...


An welchem Punkt müssen Sie mit der rechten Maustaste klicken?
Grund der Beschwerde: