전문 고문 - 기타 질문 - 페이지 12

 
Marco vd Heijden :

그럴 것 같아요.

약간 다릅니다.

전역 대 정적은 여기도 저기도 아닙니다. 그러나 재설정 방법은 좋습니다. 오버런을 방지합니다.
 
honest_knave :
전역 대 정적은 여기도 저기도 아닙니다. 그러나 재설정 방법은 좋습니다. 오버런을 방지합니다.

내가 너무 빨리 말했다. 당신의 것은 다른 방향으로 뛰어 넘습니다. 나중에 CTRL을 누르면 트리거됩니다. 차트를 클릭한 다음 Ctrl 키를 누르면 차트가 실행됩니다.

 

@honest_knave - 귀하의 의견에 감사드립니다. 그 점에 감사드립니다. 하지만 먼저 @Marco vd Heijden 의견을 시도하기 시작했습니다. (나는 그것에 대한 당신의 모든 의견을 읽었습니다. )

@Marco vd Heijden - 고마워요.

하지만 내가 뭔가 잘못하고 있다고 생각합니다. 어쩌면 더 명확하게 이해하지 못할 수도 있습니다. 어쨌든 시도했지만 코드 아래에서 찾을 수 있습니다.
내 실수가 어디 있습니까?

//+------------------------------------------------------------------+
//|                                                      keydown.mq4 |
//|      Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

string prefix = "Custom Expert |" ;
string lotedit = prefix + "Edit Name" ;
string lotbtnplus = prefix + "Lot button Plus" ;
string lotbtnminus = prefix + "Lot button Minus" ;

double lot = 0.01 , lotstep = 0.01 ;
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
   EventSetTimer ( 60 );

   graphicsObj();

//---
   return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
     EventKillTimer ();
     ObjectsDeleteAll ( 0 , prefix );
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
    graphicsObj();
}
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---

  }
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{

     if ( id == CHARTEVENT_CLICK )
    {
         if ( sparam == lotbtnplus )
        {
             ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
            lot = lot + lotstep;
            update();

             Print ( " | lot plus :  " , lot );
             return ;
        }

         Print ( "Click" );
        ctrl_click = 1 ;
    }

     if ( id == CHARTEVENT_KEYDOWN )
    {
         //Print(lparam);// print to identify keycode

         if ( lparam == 17 )   // ctrl key
        {
             if ( ctrl_click == 1 ) // if mouse click
            {
                 //Do Something when CTRL (keycode 17) is pressed
                 if ( sparam == lotbtnplus )
                {
                     ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
                    lot = lot + ( lotstep * 10 );
                     Print ( " | lot plus + Ctrl initial:  " , lot );
                    update();

                     Print ( " | lot plus + Ctrl:  " , lot );
                     return ;
                }
                 Print ( "Ctrl + Click" );
                ctrl_click = 0 ;   // reset
            }
        }
        ctrl_click = 0 ; // reset if not ctrl
    }
}

//|+--------------------------------------------------------------------------------+
//| -   Function Update                                                             |
//|+--------------------------------------------------------------------------------+
void update()
{
     //---
     ObjectSetString ( 0 , lotedit, OBJPROP_TEXT , DoubleToString ( lot, 2 ) );
     //---
     return ;
}
void graphicsObj()
{
     ObjectCreate ( 0 , lotedit, OBJ_EDIT , 0 , 0 , 0 );
     ObjectSetInteger ( 0 , lotedit, OBJPROP_XDISTANCE , 30 );
     ObjectSetInteger ( 0 , lotedit, OBJPROP_YDISTANCE , 30 );
     ObjectSetInteger ( 0 , lotedit, OBJPROP_XSIZE , 60 );
     ObjectSetInteger ( 0 , lotedit, OBJPROP_YSIZE , 30 );
     ObjectSetString ( 0 , lotedit, OBJPROP_TEXT , DoubleToString ( lot, 2 ));

     ObjectCreate ( 0 , lotbtnplus, OBJ_BUTTON , 0 , 0 , 0 );
     ObjectSetString ( 0 , lotbtnplus, OBJPROP_TEXT , "+" );
     ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_XDISTANCE , 100 );
     ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_YDISTANCE , 30 );
     ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_XSIZE , 70 );
     ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_YSIZE , 30 );
     ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_BACK , false );
     ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_SELECTABLE , false );
}
 

첫 번째 문제는 CHARTEVENT_CLICK 가 CHARTEVENT_OBJECT_CLICK 와 같지 않다는 것입니다. 차트를 클릭하는 것이 아니라 개체에 대한 클릭을 포착하려고 합니다.

void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{

//    if( id == CHARTEVENT_CLICK )
     if ( id == CHARTEVENT_OBJECT_CLICK )
 
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{
   static bool wasCTRL= false ;
   if (id== CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus)
     {
       ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
      lot+=(wasCTRL)?lotstep* 10 :lotstep;
      update();
       Print ( " | lot plus :  " , lot );
       return ;
     }
   wasCTRL=(id== CHARTEVENT_KEYDOWN && lparam== 17 );
}
도움이 될 수 있습니다. Ctrl 키를 누른 후 버튼을 얼마나 빨리 누르느냐에 따라 마우스를 두 번째 클릭할 때만 0.1로 이동한다는 것을 알 수 있습니다.
 
honest_knave :
도움이 될 수 있습니다. Ctrl 키를 누른 후 버튼을 얼마나 빨리 누르느냐에 따라 마우스를 두 번째 클릭할 때만 0.1로 이동한다는 것을 알 수 있습니다.

#Ctrl + 마우스 버튼 - 닫힘

와우, 그것처럼, 놀랍습니다. 감사합니다. 정직합니다!

@honest_knave@Marco vd Heijden 에게 특별한 감사를 전합니다.

 
#스프레드시트 - 열기

최근 금요일 ' 스프레드시트 '는 OnTick 기능으로 업데이트되었습니다(필요한 기능, 저에게 좋았습니다).

( MT4 플랫폼은 두 번 업데이트되었습니다. ) 업데이트 후 이 스프레드시트는 차트에서 업데이트되지 않습니다. 스프레드시트에 대한 모든 것을 확인했는데 문제가 보이지 않습니다.

스프레드시트 위의 입찰 및 매도 가격도 사용하고 있음을 알려야 합니다. 입찰 및 매도는 잘 작동하지만 스프레드시트는 그렇지 않습니다.

그래서 저는 레이블 객체 에 레이블 기능을 사용합니다. 모든 레이블 객체는 '스프레드시트' 없이도 잘 작동합니다. 또한 기능이 없는 스프레드시트의 Label 개체를 만들 때 알려야 하는데 잘 작동합니다.
그 문제는 MT4 플랫폼 업그레이드 후에 시작됩니다. 그 문제가 어디에서 오는지 잘 모르겠습니다.

내 우려를 이해한다면 이 문제를 어떻게 해결할 수 있는지 알려주십시오.
미리 감사드립니다.

 

스프레드시트 에 대한 코드가 있습니까?

 
Marco vd Heijden :

스프레드시트에 대한 코드가 있습니까?

나는 여전히 그것에 대해 연구하고 있으며, 또한 곧 작동하지 않는 코드의 일부를 게시할 것입니다.
 

2개의 다른 레이블 기능을 작성할 수 있습니까?
(예: 텍스트의 경우 1, 텍스트 및 글꼴 크기 의 경우 2 . )

사유: