Discussão do artigo "Interfaces Gráficas IX: Os Controles Barra de Progresso e Gráfico de Linha (Capítulo 2)" - página 3

 

Anatol, você pode me dizer se é possível alterar dinamicamente a descrição do processo na barra de progresso?

Suponha que tenhamos uma matriz de nomes de símbolos. Fazemos um loop nessa matriz e obtemos os nomes dos caracteres. Em seguida, cada símbolo é processado pelo programa para obter dados dele. O ciclo geral é exibido por uma barra de progresso, mas eu gostaria de exibir o processo de processamento de cada símbolo individual. Portanto, assine o nome do processo "processando CMG" e, em seguida, ao processar o próximo, já escreva outro nome do processo: "processando EQIX" etc.

Não se sabe de antemão quais símbolos podem estar na matriz, ou seja, não será possível preparar um monte de barras de progresso, e isso não é ideal com mais de mil nomes de símbolos diferentes....

 
Artyom Trishkin:

Anatol, você pode me dizer se é possível alterar dinamicamente a descrição do processo na barra de progresso?

Suponha que tenhamos uma matriz de nomes de símbolos. Fazemos um loop nessa matriz e obtemos os nomes dos caracteres. Em seguida, cada símbolo é processado pelo programa para obter dados dele. O ciclo geral é exibido por uma barra de progresso, mas eu gostaria de exibir o processo de processamento de cada símbolo individual. Portanto, assine o nome do processo "processando CMG" e, em seguida, ao processar o próximo, já escreva outro nome do processo: "processando EQIX" etc.

Você não sabe antecipadamente quais símbolos podem estar na matriz, ou seja, não é possível preparar várias barras de progresso, e isso não é ideal com mais de mil nomes de símbolos diferentes....

Atualmente, esse método não existe. Na próxima atualização, adicionarei esse recurso para cada elemento que tenha uma descrição de texto. Ou seja, será possível alterar o texto depois que o item for criado.
 
Anatoli Kazharski:
No momento, não existe esse método. Na próxima atualização, adicionarei esse recurso para cada elemento que tenha uma descrição de texto. Ou seja, será possível alterar o texto depois que o item for criado.

Obrigado, estou ansioso por isso ;)

Pergunta: em seus exemplos, você tem esse código para criar uma barra de progresso:

//+------------------------------------------------------------------+
//| Cria uma barra de progresso|
//+------------------------------------------------------------------+
bool CProgram::CreateProgressBar(const int x_gap,const int y_gap)
  {
//--- Salvar o ponteiro no formulário
   m_progress_bar.WindowPointer(m_window);
//--- Coordenadas
   int x=m_window.X()+x_gap;
   int y=m_window.Y()+y_gap;
//--- Definir propriedades antes da criação
   m_progress_bar.YSize(15);
   m_progress_bar.BarYSize(11);
   m_progress_bar.BarXOffset(65);
   m_progress_bar.BarYOffset(2);
   m_progress_bar.BarBorderWidth(1);
   m_progress_bar.LabelText("Processing:");
   m_progress_bar.AreaColor(C'225,225,225');
   m_progress_bar.BarAreaColor(clrWhiteSmoke);
   m_progress_bar.BarBorderColor(clrWhiteSmoke);
   m_progress_bar.IsDropdown(true);
   m_progress_bar.AutoXResizeMode(true);
   m_progress_bar.AutoXResizeRightOffset(230);
//--- Criando um elemento
   if(!m_progress_bar.CreateProgressBar(m_chart_id,m_subwin,x,y))
      return(false);
//--- Ocultar elemento
   m_progress_bar.Hide();
//--- Adicione um ponteiro ao elemento na base
   CWndContainer::AddToElementsArray(0,m_progress_bar);
   return(true);
  }
//+------------------------------------------------------------------+

qual é o atributo do elemento dropdown para:

m_progress_bar.IsDropdown(true);

???

 
Artyom Trishkin:

Pergunta: Você tem este código para criar uma barra de progresso em seus exemplos:

qual é a finalidade da característica do elemento dropdown?

???

Para evitar a exibição da barra de progresso quando o formulário é expandido, quando ela não deveria estar visível.
 
Anatoli Kazharski:
Para evitar a exibição da barra de progresso quando o formulário é expandido, quando ela não deveria estar visível.
Isso se aplica a qualquer objeto que possa ser criado com sua biblioteca?
 
Artyom Trishkin:
Isso se aplica a todos os objetos que podem ser criados usando sua biblioteca?
Sim. O método IsDropdown() está na classe base CElement e está disponível para todos os elementos da GUI.
 

A alteração dinâmica das propriedades da barra de progresso não funciona.

Por exemplo, eu queria alterar a cor:

   void              IndicatorColor(const color clr)    { m_indicator_color=clr;           }

Zero response. Aparentemente, no método Update, além de alterar os valores de índice e total, é necessário escrever o outro m_indicator_color e assim por diante. Caso contrário, esses métodos não são aplicados em lugar algum, exceto durante a criação. Ou foi essa a intenção?

 
Alexander Fedosov:

... Caso contrário, esses métodos não se aplicam em lugar algum, exceto na criação. Ou foi essa a intenção?

Sim, esta é uma versão temporária. Em breve (nos próximos artigos), haverá atualizações maciças para todos os controles, nas quais será possível alterar qualquer propriedade em tempo de execução.
 
Anatoli Kazharski:
Sim, esta é uma versão temporária. Em breve (nos próximos artigos), haverá atualizações maciças para todos os controles, nas quais será possível alterar qualquer propriedade em tempo de execução.

Isso é animador. Nesse meio tempo, encontrei uma solução temporária:

//+------------------------------------------------------------------+
//|| 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);
   
   m_indicator.BackColor(m_indicator_color);
   m_indicator.Color(m_indicator_color);
  }
 
172218684:
Todos vocês, para esse grupo único de gritos de combate de ouro 172218684 172218684 , continuarão a obter lucros, um único grupo aqui gritando Verificação - a força não tem preço!

Mentiroso