C# - Relógio com barra de progresso e som


 Ja pensou em criar um relógio usando barra de progresso e ainda incluir um tic-tac ?

Publico com frequência pequenos exemplos de programas feitos em uma determinada linguagem com objetivo de mostrar a utilização de um recurso da linguagem para fins de estudo.

Hoje veremos um programa feito na linguagem C# que exibe as horas usando uma barra de progresso. Você tem ainda a opção de incluir o tic-tac do relógio.

O objetivo é mostrar como usar os controles Timer, ProgressBar e como executar arquivos mp3 usando o Windows Media Player na linguagem C#.

Criando o projeto no VS 2017 Community

Crie um novo projeto do tipo Windows Forms App(.NET Framework) no Visual Studio 2017 Community com o nome de RelogioProgressBar.

No formulário padrão Form1.cs inclua os seguintes controles:

Disponha os controles conforme o leiaute abaixo:

O projeto possui um arquivo App.Config com o código abaixo onde usamos a tag <supportedRuntime> definindo a versão suportada pelo aplicativo. Se você não usar esse recurso a versão do runtime usado para compilar o aplicativo será usada:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
</configuration>

Para referenciar o Windows Media Player abra a ToolBox e clique com o botão direito sobre a ToolBox e clique em Choose Items...;

Selecione a guia COM Components e marque o item Windows Media Player;

1- Os namespaces usados no projeto :

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using WMPLib;

2 - No início do formulário crie uma instância do Windows Media Player

WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();

No método Main() temos um laço infinito onde o usuário informa a url que deseja pingar e a seguir chama o método TestaPing() passando a url informada.  Para sair basta teclar Enter.

3 - No evento Load do formulário inclua o código abaixo

  private void Form1_Load(object sender, EventArgs e)
  {
       timerClock.Interval = 1000;
// um segundo
       timerClock.Enabled = true;
  }

Neste código ativamos o Timer e definimos o intervalo de tick em 1 segundo.

4- No evento Tick do controle Timer temos o código que exibe a hora, minuto e segundo nas Progress Bar :

        private void timerClock_Tick(object sender, EventArgs e)
        {
            int h = DateTime.Now.Hour;
            if (h > 12)
            {
                h = h - 12;
                pbHora.Value = h;
            }
            else
            {
                pbHora.Value = h;
            } 
            pbMinutos.Value = DateTime.Now.Minute;
            pbSegundos.Value = DateTime.Now.Second;
            lblHour.Text = h.ToString();
            lblMinute.Text = DateTime.Now.Minute.ToString();
            lblSecond.Text = DateTime.Now.Second.ToString();
            lblData.Text = DateTime.Now.ToLongDateString();
        }

 

4 -  A seguir temos o código de cada evento Click dos controles radiobuttons para mudar a cor da barra de progresso:

private void rdbVerde_Click(object sender, EventArgs e)
        {
            ModificarCorProgressBar.SetState(pbHora, 1);
            ModificarCorProgressBar.SetState(pbMinutos, 1);
            ModificarCorProgressBar.SetState(pbSegundos, 1);
        }

        private void rdbVermelho_Click(object sender, EventArgs e)
        {
            ModificarCorProgressBar.SetState(pbHora, 2);
            ModificarCorProgressBar.SetState(pbMinutos, 2);
            ModificarCorProgressBar.SetState(pbSegundos, 2);
        }

        private void rdbAmarelo_Click(object sender, EventArgs e)
        {
            ModificarCorProgressBar.SetState(pbHora, 3);
            ModificarCorProgressBar.SetState(pbMinutos, 3);
            ModificarCorProgressBar.SetState(pbSegundos, 3);
        }

A mudança da cor é feita pelo método ModificarCorProgressBar que é visto a seguir:

5 - O método ModificarCorProgressBar():

    public static class ModificarCorProgressBar
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr w, IntPtr l);

        public static void SetState(this ProgressBar pBar, int state)
        {
            SendMessage(pBar.Handle, 1040, (IntPtr)state, IntPtr.Zero);
        }
    }

6 - Para ativar/desativar o som do tic-tac usamos o evento ChechedChanged o controle ChechedBox, que executa o arquivo tic-tac.mp3 que esta na pasta Som do projeto:

       private void chkSom_CheckedChanged(object sender, EventArgs e)
        {
            string caminho = Environment.CurrentDirectory;
            caminho = caminho.Replace("\\bin\\Debug", "");
            caminho = caminho + "\\Som\\tic-tac.mp3";
            //define um número de execuções
            wplayer.settings.playCount = 100;
            wplayer.URL = caminho;
            if (chkSom.Checked)
            {
                wplayer.controls.play();
            }
            else
            {
                wplayer.controls.stop();
                wplayer.close();
            }
       }
 

Executando o projeto iremos obter o seguinte resultado:

Pegue o código do projeto aqui:  RelogioProgressBar.zip

"E, quanto fizerdes por palavras ou por obras, fazei tudo em nome do Senhor Jesus, dando por ele graças a Deus Pai."
Colossenses 3:17

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti