Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1138

 
Igor Makanu:

давно СБ не пользуюсь, не помню половину, а попробуйте сделать программно выделение и снять выделение делая ChartRedraw() обьекта  OBJ_EDIT каждый раз, имена обьектов можно из СБ получить, должен быть метод Name 

а вдруг?

ЗЫ: и Sleep() скорее всего нужен для ChartRedraw() , но Sleep() не работает в индикаторах

если вы имеете в виду свойство объекта OBJPROP_SELECTED сделать TRUE, то это не то. Так как в данном случае объект выделится на графике, но поле для ввода активным не станет.
 
Maksym Mudrakov:
если вы имеете в виду свойство объекта OBJPROP_SELECTED сделать TRUE, то это не то. Так как в данном случае объект выделится на графике, но поле для ввода активным не станет.

проверил на панельках какие были, не работает так выделение обьекта OBJ_EDIT

тогда не знаю, поиском по форуму:

"таб"

"tab"

"фокус ввода"

 
Можно ли как-нибудь обновлять файл MQL5/logs/*.log не закрывая терминал? Чтобы просматривать его свежее содержимое.
 
ascerdfg:
Можно ли как-нибудь обновлять файл MQL5/logs/*.log не закрывая терминал? Чтобы просматривать его свежее содержимое.

кликните в терминале правой кн.мышки в контекстном меню - открыть , это позволяет получить доступ к файлу журнала

не удобно сделали

 
Igor Makanu:

кликните в терминале правой кн.мышки в контекстном меню - открыть , это позволяет получить доступ к файлу журнала

не удобно сделали

В каком месте кликнуть?
 
ascerdfg:
В каком месте кликнуть?

Ржевского пришлось заткнуть...


 
Maksym Mudrakov:

На графике имеется два объекта типа OBJ_EDIT

Цель сделать переход между этими двумя полями для ввода по нажатию Tab.

Главная проблема заключается не в чтении события клавиатуры, а как сделать программно поле для ввода активным.

Я так понимаю что нужно использовать user32.dll, но так как я в этом не силен, то прошу помощи.

Спасибо.

решение найдено:

#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 не рисует ничего, даже не появляются объекты в списке объектов. Создание происходит в OnInit, может в этом проблема?
При этом если удалить робота с графика, созданные объекты отобразятся
 
Roman Sharanov:
MQL5, ObjectCreate не рисует ничего, даже не появляются объекты в списке объектов. Создание происходит в OnInit, может в этом проблема?
При этом если удалить робота с графика, созданные объекты отобразятся

Возможно что цена и время для координат объекта оказались равны нулю. Проверить так: Нажать Ctrl+B, в появившемся диалоге нажать кнопку «Все» и посмотреть список существующих объектов. Если нужный есть, открыть свойства и посмотреть координаты.

 
Artyom Trishkin:

Ржевского пришлось заткнуть...


В каком месте надо нажать правую кнопку мыши?
Причина обращения: