assessor especializado - perguntas diversas - página 12

 
Marco vd Heijden:

Acho que sim.

É um pouco diferente tho.

O global versus estático não está nem aqui nem lá. Mas seu método de reset é bom. Ele evita o excesso de energia.
 
honest_knave:
O global versus estático não está nem aqui nem ali. Mas seu método de reinicialização é bom. Ele evita a superação.

Eu falei muito cedo. O seu se sobrepõe ao seu. Acionará em uma prensa CTRL posterior. Se você clicar na tabela, então pressione CTRL ela aciona.

 

@honest_knave- obrigado por seu comentário. Muito obrigado - mas eu comecei a tentar primeiro @Marco vd Heijden comentar. ( Eu li todos os seus comentários sobre isso. )

@Marco vd Heijden- muito obrigado.

Mas eu acho que estou fazendo algo errado, talvez eu não entenda mais claramente. De qualquer forma, eu tentei, você pode encontrá-lo abaixo do código.
Onde está o meu erro, por favor?

//+------------------------------------------------------------------+
//|                                                      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);
}
 

Seu primeiro problema é que CHARTEVENT_CLICK não é o mesmo que CHARTEVENT_OBJECT_CLICK. Você quer captar cliques em um objeto, não apenas qualquer clique no gráfico.

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);
}
Isto pode ajudar. Você pode descobrir que ele só vai até 0,1 no segundo clique do mouse, dependendo da rapidez com que você pressiona o botão depois de CTRL.
 
honest_knave:
Isto pode ajudar. Você pode descobrir que ele só vai até 0,1 no segundo clique do mouse, dependendo da rapidez com que você pressiona o botão depois de CTRL.

#Ctrl + Botão do Mouse - Fechado

Uau, tal e qual, um enorme e incrível obrigado, honestamente!

Agradecimentos especiais a@honest_knave e @Marco vd Heijden

 
#SpreadSheet - Aberto

A última sexta-feira'Spreadsheet' foi atualizada pela função OnTick ( qual eu preciso, foi bom para mim ).

( plataforma MT4 atualizada duas vezes. ) Após essa atualização esta planilha não é atualizada no gráfico, eu verifiquei tudo sobre planilha, não vejo nenhum problema.

Preciso informar que também uso os preços Bid and Ask acima da planilha, Bid and Ask funciona bem, mas a planilha não funciona.

Portanto, uso a função Label Function for Label Objects - todos os objetos Label funcionam bem sem 'Spreadsheet'. Também preciso informar quando crio um objeto de Etiqueta para planilha sem função, funciona bem.
Esse problema começa após as atualizações da plataforma MT4, não tenho certeza de onde vem esse problema.

Se você entender minha preocupação, me informe como posso resolver este problema.
Obrigado de antemão.

 

Você tinha algum código sobre planilha eletrônica?

 
Marco vd Heijden:

Você tinha algum código sobre planilha eletrônica?

Ainda estou pesquisando sobre isso, também vou postar algum código a partir dele, que está funcionando, o que não está, em breve.
 

Posso escrever 2 funções de etiqueta diferentes?
( por exemplo: 1 para texto, 2 para texto e tamanho da fonte).

Razão: