Bibliotecas: EasyAndFastGUI - biblioteca para criar interfaces gráficas do usuário - página 20

 

Hoje comecei a usar essa biblioteca, compilação de 2019.03.13 16:43 (acho que compilação 16). Então, estou usando-a para criar tabelas, está funcionando quase perfeitamente, usei como referência os artigos:

https://www.mql5.com/pt/articles/2500#para6

https://www.mql5.com/pt/articles/2897#para7

Para mim, é importante ter o recurso de classificação, portanto, uso a biblioteca de acordo com as instruções do artigo "X". Se eu usar essa compilação (compilação 6), a tabela funcionará muito bem, mas se eu usar a última compilação (compilação 16), a tabela não classificará os elementos quando eu clicar nas células do cabeçalho.

Ao investigar as principais diferenças, obtive isso no arquivo Table.mqh.


Isso está na compilação 6:

void CTable::SortData(const uint column_index=0)
{
   ...
   //--- Armazenar o índice da última coluna de dados classificada
   m_is_sorted_column_index=(int)column_index;
   //--- Classificação
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
   //--- Atualizar a tabela
   UpdateTable();
   //--- Defina o ícone de acordo com a direção de classificação
   m_sort_arrow.State((m_last_sort_direction==SORT_ASCEND)? true : false);
}

Isso está na compilação 16:

void CTable::SortData(const uint column_index=0,const int direction=WRONG_VALUE)
{
   ...
   //--- Запомним индекс последнего отсортированного столбца данных
   m_is_sorted_column_index=(int)column_index;
   //--- Сортировка
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
}


Na nova compilação, não há o método "Update", portanto, acho que esse é o motivo da não classificação.


Portanto, fiz essa alteração e aparentemente funcionou:

void CTable::SortData(const uint column_index=0,const int direction=WRONG_VALUE)
{
   ...
   //--- Запомним индекс последнего отсортированного столбца данных
   m_is_sorted_column_index=(int)column_index;
   //--- Сортировка
   QuickSort(first_index,last_index,column_index,m_last_sort_direction);
   
   //--- Atualizar a tabela
   Update(true);
}



PS: comentários em russo não ajudam muito.

Graphical Interfaces VII: the Tables Controls (Chapter 1)
Graphical Interfaces VII: the Tables Controls (Chapter 1)
  • www.mql5.com
The first article Graphical Interfaces I: Preparation of the Library Structure (Chapter 1) explains in detail what this library is for. You will find a list of articles with links at the end of each chapter. There, you can also download a complete version of the library at the current stage of development. The files must be placed in the same...
 

Onde está a classe Label na biblioteca? Como criar um único rótulo?

 

Fala Gustavo! Beleza?

Eu estava quebrando a cabeça aqui também para fazer o graph chart sort funcionar e consegui por acaso...

É necessário que a tabela seja atualizada no evento ON_SORT_DATA do seu "program.mqh", algo como:

// --- Eventos de tabela ordenados
if (id == CHARTEVENT_CUSTOM + ON_SORT_DATA)
{
if (lparam == m_table_symb.Id ())
{
m_table_symb.Update (true);
return;
}
// ---
return;
}


Espero que isso ajude!

Aqui funcionou perfeitamente!!!

T +

Raul

 
raulpjr:

Este é um fórum em inglês. Por favor, poste somente em inglês.

Use a ferramenta de tradução do site, se necessário.

Ao postar códigos, use o botão de código (Alt +S).

Editei sua postagem desta vez.

 

Se eu criar o ExampleEAF a partir da biblioteca como um indicador no MT4, o indicador falhará com um erro quando eu tentar arrastar a janela no gráfico

Ele funciona bem no MT5

array out of range in 'WndEvents.mqh' (288,72)

Se eu adicionar uma verificação de excesso de intervalo no primeiro ciclo, o arrastamento funcionará.

void CWndEvents::CheckElementsEvents(void)
  {
//--- Manipulação do evento de movimento do cursor do mouse
   if(m_id==CHARTEVENT_MOUSE_MOVE)
     {
      //--- Sair se o formulário estiver em outra subjanela do gráfico
      if(!m_windows[m_active_window_index].CheckSubwindowNumber())
         return;
      //--- Verificar apenas os itens disponíveis
      int available_elements_total=CWndContainer::AvailableElementsTotal(m_active_window_index);
      for(int e=0; e<available_elements_total; e++)
        {
         // !!! Verificação adicional
         if (e >= ArraySize(m_wnd[m_active_window_index].m_available_elements)) continue;
         CElement *el=m_wnd[m_active_window_index].m_available_elements[e];
         //--- Verificação do foco sobre os elementos
         el.CheckMouseFocus();
         //--- Tratamento de eventos
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }
     }
//--- Todos os eventos, exceto o movimento do cursor do mouse
   else
     {
      int elements_total=CWndContainer::ElementsTotal(m_active_window_index);
      for(int e=0; e<elements_total; e++)
        {
         //--- Verificar apenas os itens disponíveis
         CElement *el=m_wnd[m_active_window_index].m_elements[e];
         if(!el.IsVisible() || !el.IsAvailable() || el.IsLocked())
            continue;
         //--- Tratamento de eventos no manipulador de itens
         el.OnEvent(m_id,m_lparam,m_dparam,m_sparam);
        }
     }
//--- Direcionando o evento para o arquivo do aplicativo
   OnEvent(m_id,m_lparam,m_dparam,m_sparam);
  }

Mas "expandir" a janela para toda a área do gráfico e voltar para trás deixa de funcionar.

Você pode me dizer como corrigir esse problema para que ele funcione normalmente também no MT4?

Qual é a diferença? Nenhum aviso durante a compilação no MT4, não sei em que direção procurar.


Além disso, no MT4, ao compilar como indicador, a mudança de foco não funciona, no sentido de que, se você abrir uma lista suspensa e clicar em algum lugar à parte, a lista não fechará e o foco de entrada não mudará para outro elemento; no modo Expert, isso funciona normalmente.

No MT5, tanto o Expert Advisor quanto o indicador funcionam normalmente

 
Boa tarde, dica de alguma forma é possível implementar copiar e colar texto de campos de texto.
 

Outra falha interessante com as tabelas.

Após várias entradas, os caracteres começam a se duplicar e depois a triplicar (veja o gif).

Qual pode ser o problema?

Arquivos anexados:
ScreenFlow.gif  28 kb
 

O CreateTextEdit parece não suportar a entrada de dados em chinês?


O CreateTextEdit parece não suportar a entrada de dados em chinês?

 

Hi

Onde posso baixar a versão MT4 dessa biblioteca?

 
Você poderia me dizer como alterar a fonte padrão de um programa (Expert Advisor) que usa essa biblioteca? É ela que imprime tudo a partir do título no cabeçalho do programa. Pelo menos mudar o tamanho (aumentar).