Ir para conteúdo
Fórum Script Brasil
  • 0

Passar Hora De Um Edit Por Extenso.


Tamires

Pergunta

Boa tarde,

Alguém saberia informar como faço para passar uma hora que está em um edit por extenso (ex : 12:32

-->>> doze horas e trinta e dois minutos). Já procurei na internet se há alguma função para fazer isso, inclusive aqui no fórum, mas não consegui achar. Achei uma função que faz isso, mas em java script e eu queria para Delphi. Se alguém souber e puder me passar eu agradeço.

Um abraço pra vocês...

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Tinha começado hoje cedo(em casa), e deixei para acabar só agora.

Não usei funções para obter as partes separadas (hora e minutos), existentes no D7, porque aqui onde estou só tem o D3 :huh:

const
  cnUnidade :array[1..9] of string = ('um', 'dois', 'três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove');
  cnDezena10 :array[11..19] of string = ('onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove');
  cnDezena :array[1..9] of string= ('dez', 'vinte', 'trinta', 'quarenta', 'cinqüenta', 'sessenta', 'setanta', 'oitenta', 'noventa');

// monta apenas números decimais (até 99)
function DecimalExtenso(Num :integer) :string;
var
  Unidade,
  Dezena :integer;
begin
  if Num > 0 then
  begin
    Unidade := Num mod 10;
    Dezena := Num div 10;
    if Dezena = 0 then
      Result := cnUnidade[Unidade]
    else
      if Unidade = 0 then
        Result := cnDezena[Dezena]
      else
        if Dezena = 1 then
          Result := cnDezena10[Num]
        else
          if Dezena <= 9 then
            Result := cnDezena[Dezena] + ' e ' +cnUnidade[Unidade];
  end else
    Result := 'zero';
end;

// Monta a hora por extenso.
// Pode receber um campo composto por data e hora, sem problemas
function HoraPorExtenso(Horario :TDateTime) :string;
var
  Hora,
  Minuto :integer;
begin
  Hora := Trunc(Frac(Horario) *24);  // Obtém Horas
  Minuto := Round(Frac(Frac(Horario) *24) *60);  // Obtém Minutos - sem arredondamento
  Result := DecimalExtenso(Hora) + ' horas';
  if Minuto > 0 then
    Result := Result +' e ' +DecimalExtenso(Minuto) +' minutos';
end;

// Testando o uso
procedure TForm1.Button2Click(Sender: TObject);
begin
  Label2.Caption := HoraPorExtenso(StrToTime(MaskEdit1.Text));
end;

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Opa!!!

está com alguns bugs aí!! :P

observe os exemplos:

01:01 = um horas e um minutos

01:00 = zero horas e sessenta minutos :blink: :o

02:00 = um horas e sessenta minutos :blink: :o

dois horas, melhor => duas horas

um horas, melhor => uma hora

etc...

etc...

etc...

é coisinha boba :P

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu Progr'amador. Não tinha testado estas opções. A questão do plural, tinha ignorado mesmo. Mas acho que agora ficou correto.

Pensando melhor, não era exatamente isso que eu ia fazer não rsrsrs.
Thales, eu bem que desconfiei que não poderia "ser exatamente a mesma coisa" :D

Corrigindo...

const
  cnUnidadeGenero :array[1..4] of string = ('uma', 'duas', 'um', 'dois');
  cnUnidade :array[3..9] of string = ('três', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove');
  cnDezena10 :array[11..19] of string = ('onze', 'doze', 'treze', 'quatorze', 'quinze', 'dezesseis', 'dezessete', 'dezoito', 'dezenove');
  cnDezena :array[1..9] of string= ('dez', 'vinte', 'trinta', 'quarenta', 'cinqüenta', 'sessenta', 'setanta', 'oitenta', 'noventa');

function DecimalExtenso(Num :integer; Masculino :Boolean) :string;
var
  Unidade,
  Dezena :integer;
begin
  if Num > 0 then
  begin
    Unidade := Num mod 10;
    Dezena := Num div 10;
    if Dezena = 0 then
    begin
      if Unidade <= 2 then
        Result := cnUnidadeGenero[Unidade +(Byte(Masculino)*2)]
      else
        Result := cnUnidade[Unidade]
    end else
      if Unidade = 0 then
        Result := cnDezena[Dezena]
      else
        if Dezena = 1 then
          Result := cnDezena10[Num]
        else
          if Dezena <= 9 then
            Result := cnDezena[Dezena] + ' e ' +cnUnidade[Unidade];
  end else
    Result := 'zero';
end;

function HoraPorExtenso(Horario :TTime) :string;
var
  Hora,
  Minuto :integer;
begin
  Hora := Trunc(Frac(Horario) *24);  // Obtém Horas
  Minuto := Round(Frac(Frac(Horario) *24) *60);  // Obtém Minutos - sem arredondamento
  if Minuto = 60 then
  begin
    Inc(Hora);
    Minuto := 0;
  end;
  Result := DecimalExtenso(Hora, False) + ' hora';
  if Hora > 1 then
    Result := Result +'s';
  if Minuto > 0 then
  begin
    Result := Result +' e ' +DecimalExtenso(Minuto, True) +' minuto';
    if Minuto > 1 then
      Result := Result +'s'
  end;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Gente, muito obrigada.

Eu já tava quebrando a cabeça aqui tentanto transformar uma função que passar valor (real) por extenso, em uma que passa horas por extenso... Tava dando tudo errado...

muito obrigada mesmo...

vou testar aqui no meu programa e depois eu aviso como ficou...

Bjão...

Link para o comentário
Compartilhar em outros sites

  • 0

Deu certinho aqui no meu relatório. muito obrigada...

Agr podia colocar essa função pras pessoas baixarem né?!

Acho que seria uma boa...

bjusss

É o Micheus poderia postar isso em Dicas e Tutoriais, By Micheus :D

Abs. Progr'amador.

Progr'amador está lá - link. Não tenho experiência neste negócio, então, por gentileza, dê uma verificada se está bom. Se ficar alguma pendência mande-me uma mensagem. ;)

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

Agora ficou 10!!!

bem redondinho!

vai ver agora, seria a mesma coisa que o Thales iria fazer. :D

P.S. só uma coisinha...

se digitar 24:00 da erro de hora inválida, não aceita cima disso, mas ai é o compilador que não reconhece esse horário, que na verdade seria 00:00.

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

  • 0

Opa

achei mais um "errinho"

22:00 = vinte e dois horas

corrigindo somente a function DecimalExtenso (com sua permissão sem pedir :) ) ficaria assim:

function DecimalExtenso(Num :integer; Masculino :Boolean) :string;
var
  Unidade,
  Dezena :integer;
begin
  if Num > 0 then
  begin
    Unidade := Num mod 10;
    Dezena := Num div 10;
    if Dezena = 0 then
    begin
      if Unidade <= 2 then  // Os números 1 e 2 podem variar em gênero
        Result := cnUnidadeGenero[Unidade +(Byte(Masculino)*2)]
      else
        Result := cnUnidade[Unidade]
    end else
      if Unidade = 0 then
        Result := cnDezena[Dezena]
      else
        if Dezena = 1 then
          Result := cnDezena10[Num]
        else
          if Dezena <= 9 then
            if Unidade <= 2 then  // Os números 1 e 2 podem variar em gênero
              Result := cnDezena[Dezena] + ' e ' +cnUnidadeGenero[Unidade +(Byte(Masculino)*2)]
            else
              Result := cnDezena[Dezena] + ' e ' +cnUnidade[Unidade];
  end else
    Result := 'zero';
end;

Abs. Progr'amador.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...