Discussão do artigo "Interfaces Gráficas I: Animação na Interface Gráfica (Capítulo 3)"

 

Novo artigo Interfaces Gráficas I: Animação na Interface Gráfica (Capítulo 3) foi publicado:

No artigo anterior, nós começamos a desenvolver uma classe de formulário para os controles. Neste artigo, nós vamos continuar a desenvolver esta classe e preenchê-la com os métodos para mover um formulário sobre a área do gráfico. Em seguida, integraremos este componente da interface para o núcleo da biblioteca. Além disso, nós vamos garantir que os controles do formulário mudem de cor quando o cursor do mouse estiver pairando sobre eles.

Agora, não deve haver nada que possa interromper o movimento do formulário:

Fig. 1. Teste de deslocamento do formulário no gráfico.

Fig. 1. Teste de Movimento do Formulário sobre o Gráfico

Às vezes, acontece que o tamanho da janela do gráfico tem que ser alterado. Em tais momentos, é gerado o evento para alterar as propriedades do gráfico CHARTEVENT_CHART_CHANGE. No momento, isto não é controlado de qualquer maneira e uma situação pode ocorrer quando o formulário ultrapassar parcialmente ou completamente os limites da janela do gráfico. Para evitar isso, este tipo de evento deve também ser verificado no manipulador do gráfico de evento CWindow::OnEvent().

Autor: Anatoli Kazharski

 
Anatoly! O nível de codificação, sua qualidade - tudo está em um nível exorbitante, pessoalmente para mim. Muito obrigado a você por esse trabalho extraordinário! Estamos ansiosos pelas partes restantes!
 

Oi Anatoli,

Estou muito interessado em usar a interface gráfica. Mas ela não funciona em minha aplicação. A janela do painel não é movida. Também no programa de amostra "InfoPanel.mq5" (com a propriedade Movable definida como true) nada acontece. O Panel aparece, mas não pode ser movido. Talvez você tenha uma ideia do que pode estar errado? (Usei o Windows10 e o metatrader ver 5.0 build 1340)


Atenciosamente, Roland

 

Olá a todos,

Obtive os códigos-fonte da última Parte (4). Agora está tudo funcionando bem.

Atenciosamente, Roland

 

Qual é a forma de processar o movimento do mouse usando a Biblioteca Padrão? Eu testei com o arquivo localizado em Experts\Examples\Controls. Modificando a classe CListView da biblioteca padrão.
Ocorre que o evento ON_MOUSE_FOCUS_SET não é processado quando uso somente a função .ChartEvent(...).
Quando uso a função .OnEvent(...)  o evento ON_MOUSE_FOCUS_SET é processado, mas não consigo mover a janela.
Quando uso as duas funções, primeiro chamo .ChartEvent() e depois .OnEvent() o evento ON_MOUSE_FOCUS_SET é processado, porém quando clico no botão de incremento e decremento, está alterando mais de um passo.


   virtual bool      OnItemFocusSet(const int index);
   //--- redraw
   bool              Redraw(void);
   bool              RowState(const int index,const bool select);
   bool              CheckView(void);
  };
//+------------------------------------------------------------------+
//| Common handler of chart events                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CListView)
ON_INDEXED_EVENT(ON_CLICK,m_rows,OnItemClick)
ON_INDEXED_EVENT(ON_MOUSE_FOCUS_SET,m_rows,OnItemFocusSet)
EVENT_MAP_END(CWndClient)
bool CListView::OnItemFocusSet(const int index)
  {
//--- select "row"
   Select(index+m_offset);
//--- send notification
   EventChartCustom(CONTROLS_SELF_MESSAGE,ON_CHANGE,m_id,0.0,m_name);
//--- handled
   return(true);
  }
 
O exemplo é muito interessante e útil para o crescimento pessoal:))))))) Muito obrigado ao autor!
Tenho uma pergunta: ao alterar o quadro de tempo (reinicialização), o bloco voa para o canto superior esquerdo (x=0, y=0)... como implementar corretamente que as coordenadas atuais do bloco seriam salvas?

HI: há duas opções na minha cabeça:
1) gravar as coordenadas em variáveis globais...
2) gravar em um arquivo...
3) Estou curioso para saber qual é a sua solução profissional para esse problema! Como você a implementaria?