MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1138

 
Igor Makanu :

오랫동안 SB를 사용하지 않아 반은 기억나지 않지만 매번 OBJ_EDIT 개체의 ChartRedraw()를 수행하여 프로그래밍 방식으로 선택 및 선택 해제하려고 하면 SB에서 개체 이름을 가져올 수 있습니다. Name 메서드여야 합니다.

하지만 만약에?

추신: 그리고 Sleep() 은 ChartRedraw() 에 가장 필요하지만 Sleep() 은 표시기에서 작동하지 않습니다.

개체의 OBJPROP_SELECTED 속성이 TRUE라는 것을 의미한다면 그게 아닙니다. 이 경우 개체는 차트에서 강조 표시되지만 입력 필드는 활성화되지 않습니다.
 
Maksym Mudrakov :
개체의 OBJPROP_SELECTED 속성이 TRUE라는 것을 의미한다면 그게 아닙니다. 이 경우 개체는 차트에서 강조 표시되지만 입력 필드는 활성화되지 않습니다.

패널에 뭐가 있는지 확인해보니 OBJ_EDIT 객체 선택이 안되네요

그런 다음 포럼을 검색하십시오.

"탭"

"입력 포커스"

 
터미널을 닫지 않고 MQL5/logs/*.log 파일을 어떻게든 업데이트할 수 있습니까? 신선한 내용을 보려면.
 
ascerdfg :
터미널을 닫지 않고 MQL5/logs/*.log 파일을 업데이트하는 방법이 있습니까? 신선한 내용을 보려면.

상황에 맞는 메뉴 에서 터미널을 마우스 오른쪽 버튼으로 클릭 - 열기 , 이를 통해 로그 파일에 액세스할 수 있습니다.

편리하지 않다

 
Igor Makanu :

상황에 맞는 메뉴에서 터미널을 마우스 오른쪽 버튼으로 클릭 - 열기 , 이를 통해 로그 파일에 액세스할 수 있습니다.

편리하게 이루어지지 않은

어디를 클릭할까요?
 
ascerdfg :
어디를 클릭할까요?

Rzhevsky는 닥쳐야 했다...


 
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에서 생성이 발생합니다. 이것이 문제일까요?
이 경우 차트에서 로봇을 제거 하면 생성된 개체 가 표시됩니다.

물체의 좌표에 대한 비용과 시간이 0으로 판명되었을 수 있습니다. 다음과 같이 확인하십시오. Ctrl+B를 누르고 나타나는 대화 상자에서 "전체" 버튼을 클릭하고 기존 개체 목록을 확인합니다. 있는 경우 속성을 열고 좌표를 확인합니다.

 
Artyom Trishkin :

Rzhevsky는 닥쳐야 했다...


마우스 오른쪽 버튼을 어디에서 눌러야 합니까?