Discussão do artigo "Interfaces Gráficas III: Grupos de Botões Simples e Multifuncionais (Capítulo 2)"

 

Novo artigo Interfaces Gráficas III: Grupos de Botões Simples e Multifuncionais (Capítulo 2) foi publicado:

O primeiro capítulo desta série foi sobre os botões simples e multifuncionais. O segundo artigo se dedicará aos grupos de botões interconectados entre si, que permitirão a criação dos controles, quando um usuário puder selecionar uma das opções a partir de um determinado conjunto (grupo).

Cada elemento de rádio será composto por três objetos primitivos:

  1. fundo;
  2. ícone;
  3. rótulo de texto.

Fig. 3. Partes integrantes dos botões de radio.

Fig. 3. Partes integrantes dos botões de radio.

Autor: Anatoli Kazharski

 
Ao compilar o arquivo SplitButton.mqh, o erro "'return' - cannot convert from const pointer to non-const pointer SplitButton.mqh 90 65"

 
Alexander:
Ao compilar o arquivo SplitButton.mqh, aparece o erro "'return' - cannot convert from const pointer to non-const pointer SplitButton.mqh 90 65".

Sim, esse erro apareceu após a última atualização do terminal. As regras do "jogo" mudaram um pouco. Você pode corrigi-lo simplesmente excluindo o especificador const.

Vá até a linha com o erro e substitua essa linha:

CContextMenu     *GetContextMenuPointer(void)        const { return(::GetPointer(m_drop_menu)); }

Por esta:

CContextMenu     *GetContextMenuPointer(void)              { return(::GetPointer(m_drop_menu)); }

//---

Você precisará fazer correções semelhantes em todos os arquivos em que esse erro ocorrerá. Nos próximos artigos da série, o erro será corrigido.

Obrigado pela postagem.

 

Excelente trabalho!


Porém, ao tentar usar o Painel como Indicador no MT4 (!), cada clique em um "Botão de ícone" resulta em uma impressão dupla do seu
::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);

Portanto, cada ação de clique, como um incremento ou qualquer outra coisa, será feita duas vezes :(
Há alguma maneira de corrigir isso?

P.S. O curioso é que tudo funciona bem no MT5. Apenas o MT4 apresenta esse problema quando usado como indicador. Como Expert, também funciona bem.

 
marquez:

...

Existe alguma maneira de corrigir isso?

P.S. O curioso é que tudo funciona bem no MT5. Apenas o MT4 apresenta esse problema quando usado como indicador. Como Expert, também funciona bem.

Obrigado. Esse erro é discutido no Service Desk. A correção será feita depois que a primeira versão da biblioteca for publicada. Haverá 25 artigos.
 

Hi,


Fiz uma solução rápida e suja que funciona muito bem para mim. Minha maneira foi verificar o botão esquerdo pressionado separadamente no OnEvent e, se estiver definido, escrever um bool true em um auxiliar. Depois disso, a declaração if normal é estendida com helper == true e a configuração dentro do if apenas redefine o helper. Funciona quase perfeitamente. Em alguns casos, os cliques rápidos não são mencionados, mas é melhor clicar mais devagar do que ter resultados duplos :)

BTW: seria bom se alguém pudesse atualizar todas as suas bibliotecas atuais para o inglês. As mais recentes, por exemplo, o artigo 05 e assim por diante, estão apenas em russo.

 

Hi,



Tenho uma pergunta,

como tornar transparente a parte preta ao redor dos ícones?

Obrigado

 

Hi.

Acabei de baixar os arquivos do artigo3

Quando os compilei... recebi o seguinte erro

CContextMenu *GetContextMenuPointer(void) const { return(::GetPointer(m_drop_menu));

Arquivo = splitButton.mqh.

Alguém sabe como consertar isso?


Estou tentando criar um botão simples.

Obrigado

 
Kristina Suh botão simples.

Obrigado

Excluir "const" está OK

CContextMenu *GetContextMenuPointer(void) { return(::GetPointer(m_drop_menu));