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

 

Olá colegas!

Consegui reduzir o número de erros de 18 para 6, substituindo o nome do objeto por "CElementBase::".

E esses 6 foram reduzidos a 4 tipos de erros, que apresento a seguir. Por favor, me ajudem a corrigi-los corretamente.

1. Como substituir corretamente "m_tabs.GetButtonPointer(m_selected_tab)." pelo texto "CElementBase::"?

//--- Definir a cor da linha
   color clr=m_back_color;
   if(m_tabs.GetButtonPointer(m_selected_tab).IsLocked()) // este!
      clr=m_tabs.GetButtonPointer(m_selected_tab).BackColorLocked();
//--- Desenhar uma linha
   m_canvas.Line(x1,y1,x2,y2,::ColorToARGB(clr,m_alpha));
  }


2) E aqui - quando substituo "el." por "CElementBase::". - há um novo erro de compilação "IsAvailable - access to non-staticmember of function" - como corrigir esse erro corretamente?

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


3. a mesma linha: quando eu substituo "el.IsLocked()" pelo texto "CElementBase::IsLocked": erro "IsLocked - access to non-static member of function".

4. e, por último, qual é a maneira correta de substituir "m_windows[0].IsLocked()"?

//--- Sair se a interface não for criada
   if(windows_total<1)
      return;
//--- Redimensionar todos os elementos do formulário bloqueado se um dos modos estiver ativado
   if(m_windows[0].IsLocked() && (m_windows[0].AutoXResizeMode() || m_windows[0].AutoXResizeMode()))
     {

Seria ótimo usar essa biblioteca, mas preciso resolver esses problemas primeiro.


Desde já, obrigado!

Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
Documentation on MQL5: Language Basics / Object-Oriented Programming / Static Members of a Class
  • www.mql5.com
Static Members of a Class - Object-Oriented Programming - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Yevgen Drumachyk:

Olá, colegas!

Consegui reduzir o número de warrnings de 18 para 6, substituindo o nome do objeto por "CElementBase::".

el.CElementBase::IsLocked() ?
 
Edgar Akhmadeev:
el.CElementBase::IsLocked() ?

Edgar Akhmadeev, muito obrigado, colega!

Funcionou! ))

 

Saudações, colegas!

Vocês poderiam me dizer como criar duas janelas usando essa biblioteca? Estou escrevendo um Expert Advisor que consiste em duas janelas: 1) painel de negociação e 2) lista de observação.

A primeira janela com o painel de negociação foi criada e funciona sem problemas:

CWindow m_window;

CreateWindow(m_window, "META TOOLS",1,1,175,175,200,false,false,true,true) + adicionando botões:


Mas ao adicionar:

CWindow m_watchlist_window;

CreateWindow(m_watchlist_window, "Watch List",150,1,100,150,150,false,false,false,true,true,false)

CreateButton(m_watchlist1_btn, "EURUSD",m_watchlist_window,0,245,25,60,30)

então o botão EURUSD aparece no ar... ou seja, outra janela separada não é criada... Por quê?



Essa interface do usuário é criada no contexto: class CProgram : public CWndCreate

Concluo a criação da UI com o comando

CWndEvents::CompletedGUI()


Você poderia me dizer se conseguiu criar uma IU com várias janelas?

Estou falando de duas janelas independentes. Ou seja, a variante com a janela de diálogo que aparece (como para configurações) não é adequada. Você precisa que ambas as janelas estejam sempre visíveis e possam ser clicadas independentemente. Por que janelas separadas? Porque a primeira - Trade Panel - tem um tamanho fixo. Na segunda - Watch List (Lista de observação) - o tamanho da janela muda conforme o número de itens adicionados a ela é aumentado ou reduzido.

 

Olá, pessoal!

Vocês conseguiram criar mais de uma janela independente usando essa biblioteca? Ou seja, chamar o método WindowCreate() mais de uma vez para janelas adicionais no gráfico dentro do mesmo EA?

Eu consigo criar uma janela com sucesso. Mas, ao tentar criar a segunda, ela NÃO aparece...

Alguma ideia do motivo?

Ou, por exemplo, como você conseguiu criar janelas adicionais (não caixas de diálogo).

Obrigado!

 
Yevgen Drumachyk:

Você poderia me dizer como criar duas janelas usando essa biblioteca?


Não é possível. Tudo é construído em torno de uma janela principal. Uma das razões pelas quais comecei a escrever minha própria biblioteca )

 
Oleksii Chepurnyi:

De jeito nenhum. Tudo é construído em torno de uma janela principal. Uma das razões pelas quais comecei a escrever minha própria biblioteca )

Obrigado, Oleksii Chepurnyi! Afinal, eu gostaria de passar sem essa biblioteca. Ela é muito bem feita.


Pessoal, há alguma outra versão? Talvez alguém tenha contornado esse problema e conseguido criar mais de uma janela?

Você pode ver no código da biblioteca que uma janela recém-criada é adicionada à "matriz comum de elementos". Portanto, pode haver mais de uma janela...? Preste atenção a esse trecho de código na biblioteca:



//+------------------------------------------------------------------+
//| Adiciona o ponteiro da janela ao banco de dados do elemento de interface.
//+------------------------------------------------------------------+
void CWndContainer::AddWindow(CWindow &object)
  {
   int windows_total=::ArraySize(m_windows);
//--- Se ainda não houver janelas, redefina o contador de elementos para zero
   if(windows_total<1)
     {
      m_counter_element_id=0;
      ::Comment("Loading. Please wait...");
     }
//--- Adicione um ponteiro à matriz de janelas
   int new_size=windows_total+1;
   ::ArrayResize(m_wnd,new_size);
   ::ArrayResize(m_windows,new_size);
   m_windows[windows_total]=::GetPointer(object);
//--- Adicione um ponteiro à matriz comum de elementos
   int last_index=ResizeArray(m_wnd[windows_total].m_elements);
   m_wnd[windows_total].m_elements[last_index]=::GetPointer(object);
//--- Adicionar ponteiros de botão de janela ao banco de dados
   AddWindowElements(windows_total,object);
//--- Defina o id e lembre-se do id do último elemento
   m_windows[windows_total].Id(m_counter_element_id);
   m_windows[windows_total].LastId(m_counter_element_id);
//--- Aumentar o contador de identificadores de elementos
   m_counter_element_id++;
  }
 
Para iniciar duas janelas e torná-las ativas ao mesmo tempo, você precisa editar a biblioteca. Não é uma tarefa simples e volumosa. Se você precisar muito disso, escreva para o freelancer
 
The Best, ever. Congrats.
 

Hello everyone, how are you? Is there a limit to CreateSimpleButton? I am not able to put more than 6 simple buttons on the window. I am using the code of the graphical interfaces x (mql4). I had the uninit reason 8. I am very grateful to Anatoli Kazharski Best, RDT


I found out that the error was with the metatrader 4 itself, I was compiling the EA on the same chart several times. I noticed that if I make the changes and close the graph and open a new one and then put the EA in it, the changes are applied correctly. Anatoli, thank you very much for all the exceptional e complete work. Best, RDT

Anatoli Kazharski
Anatoli Kazharski
  • 2019.02.17
  • www.mql5.com
Perfil do Trader