Discussão do artigo "Interfaces gráficas X: Atualizações para a Biblioteca Easy And Fast (Build 2)" - página 3

 
Alexey Oreshkin:
Quando esperar a atualização?

Se precisar dela com urgência, você mesmo poderá adicionar as seguintes alterações:

1. No arquivo Defines.mqh, adicione um novo identificador:

#define  ON_CLICK_TAB               (26) // Guia Alternar

//---

2. Nas classes CTabs e CIconTabs (arquivos Tabs.mqh e IconTabs.mqh), no método ShowTabElements(), adicione uma linha conforme mostrado na listagem abaixo:

//+------------------------------------------------------------------+
//| Mostra apenas os itens da guia selecionada
//+------------------------------------------------------------------+
void CTabs::ShowTabElements(void)
  {
//--- Sair se as guias estiverem ocultas
   if(!CElement::IsVisible())
      return;
//--- Verificando o índice da guia selecionada
   CheckTabIndex();
//---
   for(int i=0; i<m_tabs_total; i++)
     {
      //--- Obter o número de itens anexados à guia
      int tab_elements_total=::ArraySize(m_tab[i].elements);
      //--- Se essa guia estiver destacada
      if(i==m_selected_tab)
        {
         //--- Mostrar itens da guia
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Show();
        }
      //--- Ocultar elementos de guias inativas
      else
        {
         for(int j=0; j<tab_elements_total; j++)
            m_tab[i].elements[j].Hide();
        }
     }
//--- Enviar uma mensagem sobre isso
   ::EventChartCustom(m_chart_id,ON_CLICK_TAB,CElement::Id(),m_selected_tab,"");
  }

//---

3) Agora o evento com o identificador ON_CLICK_TAB pode ser aceito no manipulador da classe personalizada.

Exemplo:

//+------------------------------------------------------------------+
//| Manipulador de eventos gráficos|
//+------------------------------------------------------------------+
void CProgram::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- Evento de pressionamento da guia
   if(id==CHARTEVENT_CUSTOM+ON_CLICK_TAB)
     {
      //--- Se você pressionou o botão de rádio
      if(m_tabs.SelectedTab()==0)
        {
         switch(m_radio_buttons1.SelectedButtonIndex()){
            case  0:
               m_canvas_table1.Show();
               m_canvas_table11.Hide();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(0);
            break;
            case  1:
               m_canvas_table1.Hide();
               m_canvas_table11.Show();
               m_canvas_table111.Hide();
               ModifyCanvasTable1(1);                
            break;
            case  2:
               m_canvas_table1.Hide();
               m_canvas_table11.Hide();
               m_canvas_table111.Show();
               ModifyCanvasTable1(2);               
            break;                        
         }       
         return;
        }
      return;
     }
  }
 
Obrigado, está funcionando.
Encontrei mais um erro: iniciamos a ferramenta, afastamos o painel e começamos a pressionar os botões de rádio. Quando a tabela é desenhada, a princípio ela começa a ser desenhada a partir da borda esquerda e, em seguida, é puxada para as coordenadas necessárias.
 
Alexey Oreshkin:
Obrigado, está funcionando.
Encontrei mais um erro: iniciamos a ferramenta, afastamos o painel e começamos a pressionar os botões de rádio. Quando a tabela é desenhada, a princípio ela começa a ser desenhada a partir da borda esquerda e, em seguida, é puxada para as coordenadas necessárias.

Sim, isso existe. Usando esse tipo de tabela como exemplo, adicione uma linha ao método CCanvasTable::Show() no arquivo CanvasTable.mqh, conforme mostrado abaixo:

//+------------------------------------------------------------------+
//|| Mostra o elemento|
//+------------------------------------------------------------------+
void CCanvasTable::Show(void)
  {
//--- Sair se o item já estiver visível
   if(CElement::IsVisible())
      return;
//--- Tornar todos os objetos visíveis
   m_area.Timeframes(OBJ_ALL_PERIODS);
   m_canvas.Timeframes(OBJ_ALL_PERIODS);
   m_scrollv.Show();
   m_scrollh.Show();
//--- Status de visibilidade
   CElement::IsVisible(true);
//--- Movendo um item
   Moving(m_wnd.X(),m_wnd.Y());
  }

//---

Se esse problema ocorrer com outros itens, adicione a mesma linha ao método Show() deles. Todas as classes de elementos terão essa correção na próxima atualização.

 
Olá, estou acompanhando seu trabalho e estou muito grato.

Você já desenvolveu ou viu algo que possa funcionar com Tabulações ou Foco em Controles no formulário.

Preciso alterar as edições depois de inserir uma entrada em um CEdit ou CSpinEdit e pressionar Enter ou TAB, quero passar para o próximo Edit, para melhor usabilidade em meu programa.

Você pode me ajudar ou me indicar onde procurar?

Muito obrigado por sua contribuição para a comunidade.
 
RODRIGO CAMPOS FIDELIS:

Você já desenvolveu ou viu algo que possa funcionar com Tabulações ou Foco em controles no formulário.

Preciso alterar as edições depois de inserir uma entrada em um CEdit ou CSpinEdit e pressionar Enter ou TAB, quero passar para o próximo Edit, para melhorar a usabilidade do meu programa.

No momento, isso não é possível. Vou pensar em como implementá-lo.
 
Anatoli Kazharski:
No momento, isso não é possível. Vou pensar em como implementá-lo.
Anatoli Kazharski, estou pensando nisso. Existe alguma maneira de ativar o modo Edition por meio de código, da mesma forma que quando eles não são ReadOnly e clicamos duas vezes no CEdit e eles ficam azuis e selecionados.
Ou, de alguma forma, posso solicitar uma entrada por splash, caixa de mensagem ou qualquer janela solicitada automaticamente quando executo o código.

Estou pensando em algumas possibilidades, e realmente não quero usar DLL, ainda não sou tão profissional. Mas tenho muita vontade. Se você me der algumas orientações ou idéias, poderei realmente aprimorar nosso código.
 

Caro Anatoli, muito obrigado por seu esforço!

Gostaria apenas de salientar que há um erro de digitação no MenuItem.mqh, linha 237, que impede que ele seja compilado com êxito:

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem()") method");

deve ser lido em vez disso

" > The type of the menu item can be set using the CMenuItem::TypeMenuItem() method");

certo?

 
Essa é a última versão do MT4?
 

O Edit está sempre piscando.

https://www.mql5.com/en/forum/274301

 
Como criar somente rótulos?