초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 217

 
alex_xss :

음 아마도

그렇지 않은 사람은 당신이 처음입니다.)

그러나 그것은 중요하지 않습니다. 누구에게나 튀어 나올 수 있으므로 불행히도 편집해야합니다.

아마도 MT4 버전(Alpari에서 가져옴)에 따라 다를 수 있습니다. 비밀이 아닌 경우 어떤 버전이 있습니까?

나는 다른 것들로부터 많은 것을 가지고 있지만 그들을 위해 모든 것을 프로그래밍합니다 :-) 그러나 소프트웨어는 여전히 동일하며 지표 / 고문의 최소한의 브랜딩과 작은 기능 만 다릅니다 ..

PS/ 색상이 있는 트릭은 잘못 설정된 DPI 모니터, "색 온도를 수정하는 유틸리티", "비디오 카드 게임 확장"이 있을 수 있습니다. 그리고 기타 - 기타.

PPS/ 그건 그렇고, 단일 DC가 지표 / 고문 / 스크립트 / 도구의 자체 패키지를 (돈을 위해, 탐욕에서) 마스터하지 못했습니다. 최대 - 기업 색상의 비참한 패널. 무엇을 나타내는 것 같습니까?

 

안녕하세요!
OBJPROP_XSIZE가 0을 반환 하는 이유를 말씀해 주시겠습니까?

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit ()
  {
   ObjectsDeleteAll ();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   string mnth=( string )TimeMonth( TimeCurrent ())+ "." ;
   string dy=( string )TimeDay( TimeCurrent ())+ " " ;
   string hr=( string )TimeHour( TimeCurrent ())+ ":00 " ;

   string TimeSig1=TimeToStr( TimeCurrent (), TIME_DATE | TIME_MINUTES );
   string Label1= " TEST " + Symbol ()+ "   " +TimeSig1+ " Test:  " +mnth+dy+hr+ " 1 2 3 4 5 6 7 8 9 10 11" ;
//string Label1="123456789"+"1"+"123456789"+"2"+"123456789"+"3"+"123456789"+"4"+"123456789"+" 5 "+"123456789";
   obj_create( "Sym" ,Label1, 50 , clrWhite , 15 );

  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void obj_create( string name, string object, int Y_distance, color Color, int size)
  {
   if ( ObjectFind (name)==- 1 )
     {
       ObjectCreate ( 0 ,name, OBJ_LABEL , 0 , 0 , 0 );
       ObjectSetInteger ( 0 ,name, OBJPROP_CORNER , CORNER_LEFT_UPPER );
       ObjectSetInteger ( 0 ,name, OBJPROP_FONTSIZE ,size);
       ObjectSetString ( 0 ,name, OBJPROP_FONT , "Rockwell" );
       ObjectSetInteger ( 0 ,name, OBJPROP_SELECTABLE , false );
       ObjectSetInteger ( 0 ,name, OBJPROP_SELECTED , false );
       ObjectSetInteger ( 0 ,name, OBJPROP_HIDDEN , true );
       ObjectSetInteger ( 0 ,name, OBJPROP_ANCHOR , ANCHOR_LEFT );
       ObjectSetInteger ( 0 ,name, OBJPROP_XDISTANCE , 10 );
       ObjectSetInteger ( 0 ,name, OBJPROP_YDISTANCE ,Y_distance);
       ObjectSetInteger ( 0 ,name, OBJPROP_COLOR ,Color);
     }
   ObjectSetString ( 0 ,name, OBJPROP_TEXT ,object);

//text size
   int text_sizeX= int ( ObjectGetInteger ( 0 ,name, OBJPROP_XSIZE ));
   
Print ( " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ obj_create  text_sizeX: " , text_sizeX );   
  }
//+------------------------------------------------------------------+
 
Nauris Zukas :

안녕하세요!
OBJPROP_XSIZE가 0을 반환 하는 이유를 말씀해 주시겠습니까?

OBJ_LABEL 은 매우 구체적인 개체입니다. 배치 후 차트의 첫 번째 업데이트 전에 너비(X_SIZE)가 정의되지 않았습니다.

일반적으로 화면의 글꼴, dpi에 따라 다릅니다. 그리기 기능이 완전히 작동할 때까지는 실제 너비에 대해 말할 수 없습니다.

 
Maxim Kuznetsov :

OBJ_LABEL 은 매우 구체적인 개체입니다. 배치 후 차트의 첫 번째 업데이트 전에 너비(X_SIZE)가 정의되지 않았습니다.

일반적으로 화면의 글꼴, dpi에 따라 다릅니다. 그리기 기능이 완전히 작동할 때까지는 실제 너비에 대해 말할 수 없습니다.

다시 그려보고 확인하십시오.

   ObjectSetString ( 0 ,name, OBJPROP_TEXT ,object);
   ChartRedraw ();
//text size
   int text_sizeX= int ( ObjectGetInteger ( 0 ,name, OBJPROP_XSIZE ));
 
Vitaly Muzichenko :

다시 그려보고 확인하십시오.

감사합니다. 시도하겠습니다!

작동하지 않았습니다.
 
Maxim Kuznetsov :

OBJ_LABEL 은 매우 구체적인 개체입니다. 배치 후 차트의 첫 번째 업데이트 전에 너비(X_SIZE)가 정의되지 않았습니다.

일반적으로 화면의 글꼴, dpi에 따라 다릅니다. 그리기 기능이 완전히 작동할 때까지는 실제 너비에 대해 말할 수 없습니다.


감사합니다. 아이디어는 명확합니다. 무언가를 실험해 보겠습니다.

 
Nauris Zukas :


감사합니다. 아이디어는 명확합니다. 무언가를 실험해 보겠습니다.

ChartRedraw 는 직접 다시 그리지 않고 터미널의 창자 어딘가에 "차트를 가능한 한 빨리 다시 그려야 합니다"라는 확인란을 둡니다.

텍스트 레이블의 너비(해야 함)를 확인하려면 TextSetFont, TextGetSize 기능을 사용해 보십시오. 상당한 차이는 HiDPI에서만 발생할 수 있습니다. 아니면 아닐 수도 있습니다 :-) 시도하지 않았습니다.

또는 다음 tick/chart_event에 이미 실제 OBJ_LABEL 의 너비를 가져옵니다.

 
Maxim Kuznetsov :

ChartRedraw 는 직접 다시 그리지 않고 터미널의 창자 어딘가에 "차트를 가능한 한 빨리 다시 그려야 합니다"라는 확인란을 둡니다.

텍스트 레이블의 너비(해야 함)를 확인하려면 TextSetFont, TextGetSize 기능을 사용해 보십시오. 상당한 차이는 HiDPI에서만 발생할 수 있습니다. 아니면 아닐 수도 있습니다 :-) 시도하지 않았습니다.

또는 다음 tick/chart_event에 이미 실제 OBJ_LABEL 의 너비를 가져옵니다.

감사합니다. 이미 완료되었습니다! OnDeinit()를 추가하고 거기에 지연을 설정한 다음 OBJPROP_XSIZE를 설정합니다.
추신 스크립트가 지연되었을 때만 나는 다음보다 더 나은 것을 생각해 내지 못했습니다.

 for(int i=100000000; i>0; i--) {} 
 
Nauris Zukas :

감사합니다. 이미 완료되었습니다! OnDeinit()를 추가하고 거기에 지연을 설정한 다음 OBJPROP_XSIZE를 설정합니다.
추신 스크립트가 지연되었을 때만 나는 다음보다 더 나은 것을 생각해 내지 못했습니다.

// задержка 500 милисекунд, годная для тестера

ulong timestamp=GetTickCount64();

do {

   Sleep(500/4);  // в тестере не сработает, зато спасёт GetTickCount

} while(GetTickCount64()-timestamp<500);

 
Maxim Kuznetsov :

// задержка 500 милисекунд, годная для тестера

ulong timestamp=GetTickCount64();

do {

   Sleep(500/4);  // в тестере не сработает, зато спасёт GetTickCount

} while(GetTickCount64()-timestamp<500);

고마워, 효과가 있었다!

   do {}
   while ( GetTickCount ()-Time11< 1000 );