Caros Amigos,

Pretendo demonstrar neste artigo uma aplicação Delphi para definir uma hora por extenso obtendo para a hora 09:53:48, por exemplo, o seguinte resultado: nove horas, cinquenta e três minutos e quarenta e oito segundos.

[1º Passo] Formulário Principal

Observe que as caixas de textos explicativos utilizadas na figura apresentam a ordem sequencial e o nome do componente, a página da sua localização e as propriedades que devem ser alteradas com os respectivos valores.

Configuração do Formulário Principal

Figura 1. Configuração do Formulário Principal.

[2º Passo] implementation

a) Função que retorna o tempo por extenso através dos seguintes parâmetros: "n" = tempo; e, "tipo" = utilizado para indicar que o tempo recebido corresponde: 1- horas, 2- minutos e 3- segundos.


// o parâmetro "tipo" foi utilizado para indicar que o tempo recebido
// (parâmetro "n") corresponde: 1- horas, 2- minutos e 3- segundos.
function tempoPorExtenso(n, tipo: integer): string;
const
  parte: array[0..19] of string = ('zero', 'um', 'dois', 'três',
           'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove',
           'dez', 'onze', 'doze', 'treze', 'quatorze', 'quinze',
           'dezesseis', 'dezessete', 'dezoito', 'dezenove');
  dezena: array[2..5] of string = ('vinte', 'trinta', 'quarenta',
            'cinquenta');
var dez, unid: integer;
            s: string;
begin
  if (n <= 19)
     then s := parte[n]
  else begin
         dez := n div 10;
         unid := n mod 10;
         s := dezena[dez];
         if (unid <> 0)
            then if (tipo = 1) // hora
                    then if (unid = 1) // vinte e uma horas
                            then s := s + ' e uma'
                         else if (unid = 2) // vinte e duas horas
                                 then s := s + ' e duas'
                              else s := s + ' e ' + parte[unid]
                 else s := s + ' e ' + parte[unid];
       end;

    if (tipo = 1)
       then s := s + ' hora'
    else if (tipo = 2)
            then s := s + ' minuto'
         else s := s + ' segundo';

    if (n > 1) // plural
       then s := s + 's';

  tempoPorExtenso := s;
end;

b) Evento "OnTimer" do componente Timer.


procedure TForm1.Timer1Timer(Sender: TObject);
var h, m, s, ms: word;
begin
  DecodeTime(Time, h, m, s, ms);
  Edit1.Text := tempoPorExtenso(h, 1) + ', ' + tempoPorExtenso(m, 2) +
    ' e ' + tempoPorExtenso(s, 3);
end;

[3º Passo] Executando a Aplicação

A cada 1 (um) segundo, tempo determinado pelo valor da propriedade Interval igual a 1000 do componente Timer, será exibido o resultado da hora do sistema operacinal por extenso, como mostra a figura a seguir:

Executando a Aplicação

Figura 2. Executando a Aplicação

Perspectiva Futura: utilizar a função tempoPorExtenso para desenvolver um "relógio falante" com a capacidade de "falar" (Realspeak) a hora em intervalos selecionáveis para ser utilizado por deficientes visuais.

Veja também:

1) Data por Extenso em uma Aplicação Delphi

2) Valor por Extenso: Delphi

Obrigado e um abraço.

Prof. Omero Francisco Bertol (//www.devmedia.com.br/omero)

Download da Aplicação no topa da página, na opção "código-fonte".