Discussão do artigo "DoEasy. Controles (Parte 17): Recorte de seções invisíveis de objetos, objetos-botões WinForms auxiliares com setas"

 

Novo artigo DoEasy. Controles (Parte 17): Recorte de seções invisíveis de objetos, objetos-botões WinForms auxiliares com setas foi publicado:

Neste artigo vamos criar funcionalidade para esconder seções de objetos que ultrapassam as margens de seu contêiner e vamos elaborar objetos-botões auxiliares com setas para usá-los como parte de outros objetos WinForms.

Compilamos o Expert Advisor e o iniciamos no gráfico:


O que vemos? O recorte fora do escopo funciona corretamente, os cabeçalhos fora do contêiner são recortados por sua borda, mas se você definir as coordenadas TabControl para que o elemento seja deixado fora do contêiner, ele também é recortado corretamente - o elemento em si é recortado pela borda do painel, e botões localizados no controle também são recortados pela borda do painel, não pela borda do contêiner. Aqui tudo funciona corretamente. Os botões horizontais esquerda-direita são menores do que a largura padrão (9 pixels), e ainda são exibidos corretamente.
O que mais está errado até agora? O objeto-sombra aparece diante do painel que o projeta. Isto será tratado à medida que a biblioteca se desenvolver.

Autor: Artyom Trishkin

 
É estranho ver uma resposta tão fraca da comunidade. Ninguém mais precisa de interfaces gráficas. Em um determinado momento, houve discussões acaloradas sobre esse tópico. Aparentemente, as fileiras diminuíram muito. É uma pena.

Só agora encontrei tempo para ler o código dessa série com mais detalhes e fiquei agradavelmente surpreso. Finalmente, depois de tantos anos, alguém amadureceu e decidiu iniciar uma nova rodada de evolução no desenvolvimento de interfaces gráficas em MQL, levando em conta as deficiências de todas as iterações anteriores de outros autores.

Recentemente, após uma longa pausa no desenvolvimento de MQL, comecei a trabalhar em uma nova versão da biblioteca EasyAndFastGUI, mas agora vejo que ela logo se tornará irrelevante para a comunidade de desenvolvedores de MQL, pois essa versão já tem uma base que permitirá implementar uma solução muito mais interessante.

Espero que o projeto seja finalizado e talvez até substitua a parte gráfica da biblioteca padrão. Terei prazer em usá-lo em meus projetos, se todo o mínimo necessário para mim, que está implementado no EasyAndFastGUI e muito mais, for realizado.

É claro que ainda há muito trabalho a ser feito, mas tenho certeza de que o autor o fará.

Boa sorte!
EasyAndFastGUI - библиотека для создания графических интерфейсов
EasyAndFastGUI - библиотека для создания графических интерфейсов
  • www.mql5.com
Библиотека EasyAndFastGUI дает возможность создавать графические интерфейсы для своих MQL-программ.
 
Anatoli Kazharski #:
É estranho ver uma resposta tão fraca da comunidade. Ninguém mais precisa de interfaces gráficas. Em um determinado momento, houve discussões acaloradas sobre esse tópico. Aparentemente, as fileiras diminuíram muito. É uma pena.

Só agora encontrei tempo para ler o código dessa série com mais detalhes e fiquei agradavelmente surpreso. Finalmente, depois de tantos anos, alguém amadureceu e decidiu iniciar uma nova rodada de evolução no desenvolvimento de interfaces gráficas em MQL, levando em conta as deficiências de todas as iterações anteriores de outros autores.

Recentemente, após uma longa pausa no desenvolvimento de MQL, comecei a trabalhar em uma nova versão da biblioteca EasyAndFastGUI, mas agora vejo que ela logo se tornará irrelevante para a comunidade de desenvolvedores de MQL, pois essa versão já tem uma base que permitirá implementar uma solução muito mais interessante.

Espero que o projeto seja finalizado e talvez até substitua a parte gráfica da biblioteca padrão. Terei prazer em usá-lo em meus projetos, se todo o mínimo necessário para mim, que está implementado no EasyAndFastGUI e muito mais, for realizado.

Ainda há muito trabalho a ser feito, mas tenho certeza de que o autor o fará.

Sucesso!

Eu precisava criar uma interface, mas não havia uma única biblioteca com eventos bem elaborados, gerenciamento correto de janelas em termos de localização mútua, sobreposições e restrições de escopo. Se em algum lugar havia os itens acima com graus variados de elaboração, havia problemas com a criação, a exclusão de janelas e a alteração de propriedades em um ponto arbitrário no tempo.

Tudo isso deveria ser a espinha dorsal das GUIs. Não está claro por que eles começam imediatamente a fazer "desenhos".

Fiz algumas pequenas alterações no código-fonte do artigo atual no Expert Advisor:

//--- Создадим объект WinForms Panel
for(int i1=0; i1<2; i1++)
     {
      CPanel *pnl=NULL;
      pnl=engine.CreateWFPanel("WFPanel"+string(i1),50,50,410,200,array_clr,200,true,true,false,-1,FRAME_STYLE_BEVEL,true,false);
      ...
     }

Brinquei um pouco com os painéis e o resultado foi o seguinte:

A mudança da janela para o primeiro plano ocorre quando o mouse é clicado, embora devesse ser quando você clica.

O recebimento de eventos ocorre através do indicador, provavelmente para o testador foi feito, sem ele os eventos não funcionam, no testador também, mesmo ao carregar o indicador através do template....

 
Anatoli Kazharski #:
É estranho ver uma resposta tão fraca da comunidade. Ninguém mais precisa de interfaces gráficas. Em um determinado momento, houve discussões acaloradas sobre esse tópico. Aparentemente, as fileiras diminuíram muito. É uma pena.

Só agora encontrei tempo para ler o código dessa série com mais detalhes e fiquei agradavelmente surpreso. Finalmente, depois de tantos anos, alguém amadureceu e decidiu iniciar uma nova rodada de evolução no desenvolvimento de interfaces gráficas em MQL, levando em conta as deficiências de todas as iterações anteriores de outros autores.

Recentemente, após uma longa pausa no desenvolvimento de MQL, comecei a trabalhar em uma nova versão da biblioteca EasyAndFastGUI, mas agora vejo que ela logo se tornará irrelevante para a comunidade de desenvolvedores de MQL, pois essa versão já contém uma base que permitirá implementar uma solução muito mais interessante.

Espero que o projeto seja finalizado e talvez até substitua a parte gráfica da biblioteca padrão. Terei prazer em usá-lo em meus projetos, se todo o mínimo necessário para mim, que está implementado no EasyAndFastGUI e muito mais, for realizado.

Ainda há muito trabalho a ser feito, mas tenho certeza de que o autor o fará.

Sucesso!
Obrigado, Anatoly, por seus comentários. É claro que tudo será finalizado.
Gostaria de saber o que você gostaria de ver aqui, qual funcionalidade?
O feedback está fazendo muita falta.
 
Aliaksandr Hryshyn #:

Eu precisava criar uma interface, mas não havia uma única biblioteca com eventos bem elaborados, gerenciamento correto de janelas em termos de localização mútua, sobreposições e restrições de escopo. Se em algum lugar havia os itens acima com graus variados de elaboração, havia problemas com a criação, a exclusão de janelas e a alteração de propriedades em um ponto arbitrário no tempo.

Tudo isso deveria ser a espinha dorsal das GUIs. Não está claro por que eles começam a fazer "desenhos" imediatamente.

Fiz algumas pequenas alterações no código-fonte do artigo atual no Expert Advisor:

Brinquei um pouco com os painéis, e o resultado é o seguinte:

A janela é alternada para o primeiro plano quando o mouse é pressionado, embora devesse ser pressionado.

O recebimento de eventos é feito por meio do indicador, provavelmente para o testador, pois sem ele os eventos não funcionam, no testador também, mesmo ao carregar o indicador por meio do template....

A escuta de eventos de outro gráfico é implementada por meio do indicador-spy.
Se você tiver outra maneira melhor, sugira-a e nós a consideraremos.
Os eventos não funcionam no testador como estão.
Obrigado por apontar o defeito - nós o corrigiremos, pois ainda está em fase de desenvolvimento. A própria espinha dorsal de que você está falando.
 

Para que servem os eventos de outros gráficos?

Cliquei no meu aplicativo visual, seu Expert Advisor está sendo executado em paralelo, e isso está escrito nos registros:

2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Состояние кнопки: Отжата
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Изменено свойство графического объекта:
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Имя BMP-файла:
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)        - Состояние "On" [0]: "\Experts\Greshnik\Strategy_viewer.ex5::1716653226_u_012896816886410156413404032"
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1)        - Состояние "Off" [1]: Отсутствует
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       CGStdGraphObj::PropertiesCheckChanged: Создан снимок истории изменений графического объекта #19: 2022.09.09 23:54:59.875
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Изменено свойство графического объекта:
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Время создания: 2022.09.10 22:18:38
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Изменено свойство графического объекта:
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)       OnChartEvent: Имя BMP-файла:
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)        - Состояние "On" [0]: "\Experts\Greshnik\Strategy_viewer.ex5::1716653226_u_012896816886410156413395097"
2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1)        - Состояние "Off" [1]: Отсутствует
2022.09.10 22:18:38.959 TestDoEasy117 (AUDUSD,M1)       CGStdGraphObj::PropertiesCheckChanged: Создан снимок истории изменений графического объекта #20: 2022.09.09 23:54:59.875

Não entendo o propósito disso.


A contagem é muito lenta. O que acontecerá com a tabela com um grande número de células?

Medindo a velocidade de atualização de objetos gráficos:

//--- Tratamento de eventos de uma coleção de itens gráficos
   ulong mcs=GetMicrosecondCount();
   engine.GetGraphicObjCollection().OnChartEvent(id,lparam,dparam,sparam);
   Print((GetMicrosecondCount()-mcs)/1000.0);

Clique com o botão esquerdo do mouse no centro do painel: 5 ms

Clicar no cabeçalho de uma guia ativa: 7 ms.

Clicar no cabeçalho de uma guia inativa: 20 ms


 
Aliaksandr Hryshyn #:

Para que servem os eventos dos outros gráficos?

Cliquei no meu aplicativo visual, seu Expert Advisor está sendo executado em paralelo, e os registros mostram isso:

Não entendo o propósito disso.


A contagem é muito lenta. O que acontecerá com a tabela com um grande número de células?

Medindo a velocidade de atualização de objetos gráficos:

Clique com o botão esquerdo do mouse no centro do painel: 5 ms

Clicar no título da guia ativa: 7 ms

Clique no cabeçalho de uma guia inativa: 20 ms


A biblioteca examina todo o ambiente e emite mensagens sobre os eventos registrados. No momento, essas são apenas mensagens de depuração - a biblioteca está em desenvolvimento. Quando estiver totalmente funcional, haverá uma opção do que é necessário e do que não é necessário.

 
Artyom Trishkin #:
Obrigado, Anatoly, por seu feedback. É claro que tudo será finalizado.
Gostaria de saber o que você gostaria de ver aqui, qual funcionalidade?
O feedback está fazendo muita falta.

As necessidades mínimas são atendidas pelo EasyAndFastGUI. Talvez você possa lançar a versão mais recente no mercado por uma pequena taxa, pois não há muito tempo para suporte gratuito.

Da forma como está, esse tópico pode ser desenvolvido infinitamente. Há tantas opções diferentes para onde tudo isso pode levar que é fantástico. )

Voltaremos a esse assunto novamente. Estou muito ocupado por enquanto. Continuem com o bom trabalho, é muito empolgante! 👍

 
Anatoli Kazharski #:

Tenho minhas necessidades mínimas atendidas com o EasyAndFastGUI. Provavelmente lançarei a versão mais recente no mercado por uma pequena taxa, pois não há muito tempo para suporte gratuito.

Do jeito que está, esse tópico pode ser desenvolvido infinitamente. Há tantas opções diferentes para onde tudo isso pode levar que é fantástico. )

Voltaremos a essa questão novamente. Estou muito ocupado por enquanto. Continuem com o bom trabalho, é muito empolgante! 👍

Dobro 👌