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

- www.mql5.com
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....
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....
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
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.
Obrigado, Anatoly, por seu feedback. É claro que tudo será finalizado.
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! 👍
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 👌

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
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