Discussão do artigo "Interfaces Gráficas IX: Os Controles Barra de Progresso e Gráfico de Linha (Capítulo 2)"
Muito bom!
Do meu ponto de vista, agora você está definitivamente à frente de todos os desenvolvedores de gráficos MQL.
Concluí por mim mesmo que tenho algo a que aspirar.
O resultado é incrível!
Boa sorte em seu desenvolvimento futuro.
Muito bom!
Do meu ponto de vista, agora você está definitivamente à frente de todos os desenvolvedores de gráficos MQL.
Concluí por mim mesmo que tenho algo a que aspirar.
O resultado é incrível!
Boa sorte em seu desenvolvimento futuro.
Sempre há algo pelo que se esforçar. )
Aqui, veja as obras do mestre, que o inspirarão ainda mais: Yuri Kulikov >>>>
Sempre há algo pelo que se esforçar. )
Aqui está uma olhada nas obras do mestre que o inspirarão ainda mais: Yuri Kulikov >>>.
Obrigado, realmente impressionante!
Sabe, eu queria lhe fazer uma pergunta...
Você criou seu projeto usando OOP. Implementou quase todos os controles básicos. Criou uma biblioteca rica...
Ao mesmo tempo, quanto do código você já usou em seu trabalho?
Por exemplo, quanto você usou da biblioteca de controles do MT, Canvas, etc.?
Pessoalmente, tive que criar tudo do zero e em uma tecnologia completamente nova, na qual era impossível usar coisas já elaboradas.
No futuro, o desenvolvimento do meu projeto também não será continuado por outros desenvolvedores e eles não poderão participar de seu desenvolvimento, porque a tecnologia não é familiar para ninguém além de mim.
No seu caso, é o oposto... Todos os programadores poderão participar do aprimoramento e do desenvolvimento de sua biblioteca.
E a única coisa que pode impedir isso é a preguiça.
Ao mesmo tempo, quanto do código você já usou em seu trabalho?
Por exemplo, quanto você usou da biblioteca de controles do MT, Canvas, etc.?
No primeiro artigo desta série, respondi a essa pergunta: GUIs I: Preparando a estrutura da biblioteca (Capítulo 1). Lá é mostrada a estrutura das classes da biblioteca padrão para trabalhar com primitivas de objetos gráficos padrão.
A lista de classes que uso no projeto é a seguinte
- CChartObjectRectLabel - rótulo retangular.
- CChartObjectEdit - campo de entrada.
- CChartObjectLabel - rótulo de texto.
- CChartObjectBmpLabel - rótulo gráfico.
- CChartObjectButton - botão.
- CCanvas - fornece a criação de um recurso gráfico (com ou sem vinculação a um objeto de gráfico) e o desenho de primitivos gráficos.
Idealmente, deveria restar apenas uma classe: CCanvas. Um tópico útil sobre esse assunto está aqui: Fazendo um projeto de crowdsource no Canvas >>>
Antes de iniciar o desenvolvimento, estudei a biblioteca padrão para a criação de interfaces gráficas e a versão de Dmitry Fedoseev. Em seguida, fiz uma lista do que me faltava e comecei a trabalhar no projeto. A lista do que precisa ser feito ainda é bastante grande e está sendo constantemente atualizada com sugestões de outros usuários interessados. Só que tudo isso está acontecendo principalmente por meio de correspondência pessoal. Também estamos trabalhando nos bugs e erros que são gradualmente revelados ao usar a biblioteca em nossos projetos.
A única coisa que pode impedir isso é a preguiça.
Não há problemas com isso. )
No primeiro artigo desta série, respondi a essa pergunta: Interfaces gráficas I: Preparando a estrutura da biblioteca (Capítulo 1). Lá é mostrada a estrutura de classes de uma biblioteca padrão para trabalhar com objetos primitivos gráficos padrão.
A lista de classes que uso no projeto é a seguinte
- CChartObjectRectLabel - rótulo retangular.
- CChartObjectEdit - campo de entrada.
- CChartObjectLabel - rótulo de texto.
- CChartObjectBmpLabel - rótulo gráfico.
- CChartObjectButton - botão.
- CCanvas - fornece a criação de um recurso gráfico (com ou sem vinculação a um objeto de gráfico) e o desenho de primitivos gráficos.
Idealmente, deveria restar apenas uma classe: CCanvas. Tópico útil sobre esse assunto: Realização de um projeto de crowdsource no Canvas >>>
Antes de iniciar o desenvolvimento, estudei a biblioteca padrão para a criação de interfaces gráficas e a versão de Dmitry Fedoseev. Em seguida, fiz uma lista do que me faltava e comecei a trabalhar no projeto. A lista do que precisa ser feito ainda é bastante grande e está sendo constantemente atualizada com sugestões de outros usuários interessados. Só que tudo isso está acontecendo principalmente por meio de correspondência pessoal. Também estou trabalhando em bugs e erros que são gradualmente revelados ao usar a biblioteca em meus projetos.
Não há problemas com isso. )
Obrigado por sua resposta detalhada. )
Desejo a você um trabalho mais produtivo.
Anatoly, peço desculpas por ser intrusivo, mas gostaria de saber como é possível atualizar a barra de progresso dentro de um loop com cálculos pesados.
Por exemplo, temos uma barra de progresso m_progress_bar, temos um loop dentro do CProgram
m_progress_bar.Show(); // é inútil, pois já é visível imediatamente ao mostrar a janela (m_window.Show()) à qual está vinculado, // e eu gostaria de criá-lo em um estado oculto e mostrá-lo quando for necessário int total=1000; // um determinado número de iterações de loop, que você deseja exibir com a barra de progresso for(int i=0;i<total;i++) { Func(); // Função com cálculos pesados a cada iteração do loop m_progress_bar.Update(i,total); // não faz nada: a barra de progresso está em "hung" - seu estado inicial. } //--- a barra de progresso deve ficar oculta quando o ciclo for concluído, //--- e, nessa situação, ele não é atualizado durante o loop e, em seguida, fica oculto ao ser sobreposto a outro objeto m_progress_bar.Hide(); // não oculta a barra de progresso por algum motivo, tenho que ocultá-la em outro objeto gráfico.
Você poderia explicar em um exemplo tão "abstrato" o que eu não entendi?
Não faria mal nenhum passar alguns dados.
E quanto a isso?
m_progress_bar.Update(i,total);
E quanto a isso?
Não funciona.
Por que não funciona?
//+------------------------------------------------------------------+ //|| Atualiza a barra de progresso| //+------------------------------------------------------------------+ void CProgressBar::Update(const int index,const int total) { //--- Definir novo índice CurrentIndex(index); //--- Definir novo intervalo StepsTotal(total); //--- Calcular a largura do indicador double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize(); //--- Ajuste se for menor que 1 if((int)new_width<1) new_width=1; else { //--- Ajuste para a largura do quadro int x_size=m_bar_bg.XSize()-(m_bar_border_width*2); //--- Corrigir se estiver fora dos limites if((int)new_width>=x_size) new_width=x_size; } //--- Definir uma nova largura para o indicador m_indicator.X_Size((int)new_width); //--- Calcular a porcentagem e formar uma string double percent =m_current_index/m_steps_total*100; string desc =::DoubleToString((percent>100)? 100 : percent,m_digits)+"%"; //--- Definir o novo valor m_percent.Description(desc); } //+------------------------------------------------------------------+
- 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 Interfaces Gráficas IX: Os Controles Barra de Progresso e Gráfico de Linha (Capítulo 2) foi publicado:
O segundo capítulo da parte nove é dedicado aos controles barra de progresso e gráfico de linha. Como sempre, teremos exemplos detalhados para revelar como esses controles podem ser utilizados nas aplicações MQL personalizadas.
Vamos listar todos os componentes utilizados para a criação de uma barra de progresso na Biblioteca desenvolvida.
Fig. 1. Componentes do controle da barra de progresso.
Autor: Anatoli Kazharski