Erros, bugs, perguntas - página 2314

 

Camaradas programadores!

No MT4, clicar no objecto gráfico seleccionado desencadeia o evento"CHARTEVENT_OBJECT_DRAG". Isto é um erro real.

No mt5 não existe tal problema.

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
 {
  if(id==CHARTEVENT_OBJECT_DRAG)
    Print(id); // 2
 }
 
SuhanovDM94:

Boa tarde a todos! Desculpem a pergunta parva. Pessoal, poderiam por favor dizer-me como fazer com que um botão premido seja verdadeiro quando se clica com o botão esquerdo do rato e falso quando se clica com o botão esquerdo do rato. Agora a situação é tal, que nada acontece ao pressioná-lo, mas o Pressed muda o seu valor para o oposto ao libertá-lo.

Compreendo que preciso de anular o CButton::OnMouseUp e CButton::OnMouseDown manipuladores de eventos, mas não faço ideia de onde fazer isso. Uma dica, por favor. Obrigado de antemão!

Se alguém puder ajudar com o mesmo tópico, seria apreciado.

 
Baruban:

Se alguém puder ajudar com o mesmo tópico, seria apreciado.

O evento só é gerado quando o botão do rato é premido, mas não quando

 
Vitaly Muzichenko:

O evento é gerado apenas quando o botão do rato é premido, não quando é clicado

Mas há um manipulador de cliques, não há? Por isso, deve haver um evento com um clique.

 
SuhanovDM94:

Mas há um manipulador de imprensa, não há? Por isso, também deve haver um evento de imprensa.

Não estás confuso? Existe o evento CHARTEVENT_CLICK - um clique do rato sobre o gráfico; mas não um clique...

 
Alexey Viktorov:

Não está a confundir as coisas? Há um evento CHARTEVENT_CLICK - um clique do rato sobre um gráfico; mas não um clique...

Há, isso mesmo. É que a classe CButton tem dois manipuladores de eventos internos: OnMouseDown() e OnMouseUp(). Então pensei, talvez também haja eventos correspondentes?

 
SuhanovDM94:

Sim, é isso mesmo. É que a classe CButton tem dois manipuladores de eventos internos: OnMouseDown() e OnMouseUp(). Então pensei, talvez também haja eventos correspondentes?

Eu não olhei para o SB, mas aparentemente há uma imprensa OBJPROP_STATE == verdadeiro, a outra OBJPROP_STATE == falso. Ou talvez eu esteja errado.

 
Olá a todos, podem ajudar-me? Porque é que o gráfico está a descer no final do processo de optimização?
Arquivos anexados:
 
Ambos os editores MT4 e MT5 colidem ao passar o rato sobre "func" na linha "int i = func( 0, 1 );" e seleccionar a opção "Go to definition" (ou ao premir Alt+G)

MQL4 build 1910
MQL5 construir 1931

template<typename type>  
type func( type a, type b = 1 ){ return ( 0 ); }

int i = func( 0, 1 );

void OnStart(){ }  

Arquivos anexados:
altg.jpg  57 kb
 

Fórum sobre comércio, sistemas comerciais automatizados e teste de estratégias comerciais

MQL equivalente a nenhum tipo de Python?

nicholi shen, 2018.10.28 21:52

Não em MQL, pelo menos já não. Na verdade, é duas vezes mais lento que a referência na depuração, e suficientemente próximo do mesmo quando compilado normalmente que realmente não importa. Tente por si próprio.

#define  ITERATIONS 1000000

void OnStart()
{
   {
      ulong time = GetMicrosecondCount();
      ulong sum = 0;
      for(int i=0; i<ITERATIONS; i++){
         string r = string(rand());
         sum += by_ref(r);
      }
      time = GetMicrosecondCount() - time;
      printf("%s took %.3f milliseconds: sum=%dll", "by_ref", time/1000.0, sum);
   }{
      ulong time = GetMicrosecondCount();
      ulong sum = 0;
      for(int i=0; i<ITERATIONS; i++)
         sum += by_val(string(rand()));
      time = GetMicrosecondCount() - time;
      printf("%s took %.3f milliseconds: sum=%dll", "by_val", time/1000.0, sum);
   }
}
//+------------------------------------------------------------------+

int by_ref(string &var){ return int(var) % 100; }
int by_val(string  var){ return int(var) % 100; }

Porque é o by_ref mais lento que o by_val?