Finalmente, chegou a hora de lançar o mecanismo e ajudar aqueles que desejam criar programas grandes e muito legais com uma interface gráfica rica em MQL5. Agora esse objetivo está à distância de um braço.
E assim:
1. A primeira versão do mecanismo. Quero enfatizar a palavra "primeiro". Nada é perfeito na primeira vez. Você provavelmente encontrará erros que eu não notei. Não tem problema. Ainda não encontrei nenhum bug com o qual não tenha lidado. Tudo é resolvido rapidamente.
2. O mecanismo não está totalmente concluído. No momento, o aplicativo"usuário condicional"(1) EA Shell v1.mq5 (especialmente escrito para testar o mecanismo) captura todos os eventos dos controles da GUI criada. Isso já possibilita que o código do usuário reaja de forma programática. Os eventos chegam, trazem valores para os casos necessários da função OnGuiEvent(); é lá, no arquivo API, que o usuário escreverá seu código de reações aos eventos da interface.
3. Muito trabalho foi feito no mecanismo. As alterações afetaram os níveis local e global. Mais adiante, descreverei em detalhes o que exatamente escrevi e refiz durante esse período. A lista será longa.
4. A versão tem instruções de instalação no arquivo ReadMe.txt. Entretanto, adicionarei imagens para maior clareza. Se não estiver claro, pergunte. Eu o ajudarei.
Uma lista de correções e atualizações nesta e na próxima versão:
Alterações globais:
O arquivo Internal_API foi renomeado para simplesmente ARI.
Todas as definições e funções que não são relevantes para o trabalho do usuário com controles foram removidas do arquivo API. Parcialmente, elas foram movidas para o arquivo UIDATA.
O método de vincular o código do usuário aos controles foi fundamentalmente alterado. O usuário terá acesso direto ao núcleo G_CORE, onde os controles são armazenados. O acesso é realizado por meio de funções de wrapper que são impressas automaticamente no arquivo UIDATA.
Um prefixo especial é adicionado aos nomes das funções de wrapper para facilitar a localização dos elementos por meio do intellisense.
Foi aberta a possibilidade de criar um menu de contexto para um aplicativo de usuário. Uma área especial no arquivo #include<(2) KIB PROJECTS\(1) Must be included\User section\My menu section.mqh> foi alocada
Adicionada a possibilidade de definir botões na parte direita da barra de tarefas do usuário. Uma área especial no arquivo #include<(2) KIB PROJECTS\ (1) Must be included\User section\My Taskbar section.mqh> foi preparada para essa finalidade.
O menu de contexto personalizado e a barra de tarefas agora são chamados a partir do menu de contexto do construtor e não interferem na edição de outras janelas:
O menu de contexto do usuário pode chamar janelas de menu júnior.
Esta é a aparência após salvar o projeto e alternar para o modo de aplicativo do usuário em outro gráfico: .
O comportamento das janelas do menu de contexto é semelhante ao seu comportamento no ambiente de aplicativos do Windows.
As opções do menu de contexto podem chamar funções ou janelas. Se um item de menu chamar uma janela, o ícone da janela será automaticamente definido à esquerda.
Alterações e aprimoramentos locais:
Foi corrigido um problema com o salto da barra de tarefas ao alternar entre gráficos. Agora ela se adapta melhor e mais rapidamente ao redimensionamento da janela.
Oscontroles deslizantes funcionam melhor:
A guia de valor (S_WIDGET) sempre acomoda os dígitos do valor e assume o tamanho dependendo do tamanho do texto do valor máximo (ou mínimo).
O placar é posicionado em um dos 4 lados, conforme desejado pelo usuário (definido por sinalizadores).
O controle deslizante alterna qualquer valor em qualquer intervalo com qualquer O controle deslizante alterna qualquer valor em qualquer intervalo com qualquer número de casas decimais e em qualquer etapa especificada.
O número de casas decimais (precisão do valor) é definido pelo usuário (palavra DIGITS).
O tamanho do controle deslizante e o intervalo de valores não desempenham nenhum papel. O algoritmo calcula o movimento do controle deslizante pelo intervalo de forma que uma extremidade sempre tenha um mínimo e a outra extremidade sempre tenha um máximo.
Ao clicar na faixa do controle deslizante, o controle deslizante salta automaticamente para o local do clique e continua a se mover de forma sincronizada com o usuário se o botão do mouse for pressionado.
Está planejado adicionar a possibilidade de rolar o controle deslizante pela faixa do controle deslizante com a roda do mouse.
Correção de problemas com a lista suspensa.
A lista não pula mais quando o botão abrir é clicado.
Corrigido o problema de desaparecimento da lista ao rolar para a parte inferior.
A lista pode ser rolada com a roda do mouse mesmo que o cursor esteja na barra de rolagem ou nos botões.
A rolagem da lista com a roda do mouse agora é mais rápida.
Resolvido o problema do falso clique:
Anteriormente, pressionar um botão ou outro elemento semelhante causava uma alteração de estado , mesmo que o pressionamento ocorresse fora do espaço do elemento. Esse problema foi resolvido. Se o usuário clicasse em um elemento, mas mudasse de ideia e afastasse o cursor, ou o movesse para outro elemento ou espaço livre do gráfico, o elemento do primeiro clique sempre retornaria ao estado anterior. Como se nada tivesse acontecido. O evento será cancelado e não haverá alteração no valor do parâmetro. A fixação de falso clique permite cancelar o clique no último momento simplesmente movendo o cursor (com o botão do mouse ainda pressionado) para outro espaço.
Foi decidido concentrar-se na criação de modelos para janelas de configurações profissionais semelhantes às do Windows para facilitar a criação pelos usuários. Um bom exemplo dessas janelas são as janelas incluídas Settingsexample 1 e Settings example 2 (chamadas pelo menu de contexto e pelo uso da barra de tarefas):
Foi adicionada a possibilidade de bloquear mensagens.
Exemplo:
Primeiro abra as diferentes janelas de configurações. Seus botões estão na parte inferior da barra de tarefas. Em seguida, vá para o menu de contexto (clique duas vezes no gráfico) e abra a janela "Sorry, this order is blocked" (Desculpe, esta ordem está bloqueada). Ela está localizada aqui:
Em seguida, tente clicar em qualquer janela aberta anteriormente com a janela "Sorry, this order is blocked" aberta. Todas as ações em outras janelas serão bloqueadas até que essa janela seja fechada. No entanto, você pode limitar a lista de janelas bloqueadas nas propriedades da janela no código cibernético. Assim, algumas janelas serão bloqueadas e outras não. Dependendo da decisão do usuário.
Agora, as janelas de diálogo podem ser abertas com som. Isso é definido por meio do código KIB nas propriedades da janela.
As janelas de diálogo têm uma prioridade especial sobre outras janelas e são sempre desenhadas sobre as janelas de configurações.
Os botões das janelas de diálogo (Ok, Cancelar, Confirmar, Fechar) funcionam e fecham suas janelas automaticamente quando pressionados.
As caixas de diálogo podem ter seu recurso de minimização desativado. Nesse caso, elas não podem aparecer na barra de tarefas.
O nome da janela pode estar localizado à esquerda ou no centro. Ele é definido por um sinalizador nas propriedades da janela (cyb-code).
As janelas de diálogo podem ser chamadas de forma programática a partir do aplicativo do usuário.
As janelas de diálogo podem ser fechadas automaticamente ao se clicar em outra janela ou gráfico. A possibilidade é definida pelo usuário nas propriedades da janela no cyb-code.
Boa noite, queridos membros do fórum.
Finalmente, chegou a hora de lançar o mecanismo e ajudar aqueles que desejam criar programas grandes e muito legais com uma interface gráfica rica em MQL5. Agora esse objetivo está à distância de um braço.
E assim:
1. A primeira versão do mecanismo. Quero enfatizar a palavra "primeiro". Nada é perfeito na primeira vez. Você provavelmente encontrará erros que eu não notei. Não tem problema. Ainda não encontrei nenhum bug com o qual não tenha lidado. Tudo é resolvido rapidamente.
2. O mecanismo não está totalmente concluído. No momento, o aplicativo"usuário condicional" (1) EA Shell v1.mq5 (especialmente escrito para testar o mecanismo) captura todos os eventos dos controles da GUI criada. Isso já possibilita que o código do usuário reaja de forma programática. Os eventos chegam, trazem valores para os casos necessários da função OnGuiEvent(); é lá, no arquivo API, que o usuário escreverá seu código de reações aos eventos da interface.
3. Muito trabalho foi feito no mecanismo. As alterações afetaram os níveis local e global. Mais adiante, descreverei em detalhes o que exatamente escrevi e refiz durante esse período. A lista será longa.
4. A versão tem instruções de instalação no arquivo ReadMe.txt. Entretanto, adicionarei imagens para maior clareza. Se não estiver claro, pergunte. Eu o ajudarei.
Em geral, pegue a versão e vamos começar.
Como resultado da instalação da nova versão do construtor, você deverá ver um menu de contexto atualizado (clique duas vezes no gráfico):
Se você vir esse menu, significa que a instalação foi bem-sucedida.
Esta instalação não é diferente da anterior. As mesmas etapas na mesma ordem.
Há instruções em texto neste blog. E também em fotos:
https://www.mql5.com/ru/blogs/post/758425
Separadamente, gostaria de mencionar o novo arquivo EA Shell v1.mq5
Salve-o na pasta EAs, mas compile-o somente depois de imprimir o arquivo API no construtor. Ele trata das conexões em seu cabeçalho.
1. Execute o construtor e o indicador como antes em um gráfico.
2. Abra imediatamente o menu de contexto e imprima os arquivos UIDATA e API.
3. Transfira esses arquivos para a pasta neste caminho:
4. Compile o EA Shell v1.mq5 e coloque-o em outro gráfico.
5. Pronto.
Uma pequena instrução em imagens:
1.
2.
3.
4.
5.
6.
7.
1.
2.
3.
4.
5.
6.
7.
As janelas de configurações acima foram criadas para testar a conexão e a resposta a eventos de interface por meio de funcionalidade personalizada.
Para fazer isso, abra o arquivo API e escreva suas chamadas.
Por padrão, os eventos de interface chamam a função Alert() imprimindo seu identificador e o valor do parâmetro em eventos de impacto nos elementos.
Uma lista de correções e atualizações nesta e na próxima versão:
Esta é a aparência após salvar o projeto e alternar para o modo de aplicativo do usuário em outro gráfico: .
O comportamento das janelas do menu de contexto é semelhante ao seu comportamento no ambiente de aplicativos do Windows.
As opções do menu de contexto podem chamar funções ou janelas. Se um item de menu chamar uma janela, o ícone da janela será automaticamente definido à esquerda.
Alterações e aprimoramentos locais:
Foi adicionada a possibilidade de bloquear mensagens.
Exemplo:Primeiro abra as diferentes janelas de configurações. Seus botões estão na parte inferior da barra de tarefas. Em seguida, vá para o menu de contexto (clique duas vezes no gráfico) e abra a janela "Sorry, this order is blocked" (Desculpe, esta ordem está bloqueada). Ela está localizada aqui:
Em seguida, tente clicar em qualquer janela aberta anteriormente com a janela "Sorry, this order is blocked" aberta. Todas as ações em outras janelas serão bloqueadas até que essa janela seja fechada. No entanto, você pode limitar a lista de janelas bloqueadas nas propriedades da janela no código cibernético. Assim, algumas janelas serão bloqueadas e outras não. Dependendo da decisão do usuário.