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.
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:
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
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".