obtendo o total de horas

Delphi

18/05/2004

Sou novo no forum, mas ouvi boas coisas sobre ele

bom gostaria que alguem pudesse solucionar minha duvida,
preciso somar um monte de horas que estao em um StringGrid
e preciso desse total, mas toda vez que a soma ultrapassa o limite de 23:59, o soma volta para 0:00, alguem sabe se existe alguma funcao para que eu possa somar as horas para obter um total por exemplo de 36:00 horas??


Felippe

Felippe

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

18/05/2004

Colega,

O ideal é utilizar variáveis contendo data e hora, pois como você já percebeu, a unidade de medida para horas começa em 00:00 à 23:59 e ao ultrapassar o limite final o contador de dias é incrementado.
Portanto, basta pegar a data e hora final, subtrair da data e hora inicial, converter tudo para a mesma base para saber o tempo decorrido na base selecionada.


GOSTEI 0
Felippe

Felippe

18/05/2004

Muito obrigado pela dica,
mas usei alguns ´artificios técnicos´ e consegui fazer uma somatória das horas
precisa somar varias horas para ter um total de horas em 6 semanas
por exemplo 236:50 minutos
bom vou colocar o codigo aki caso alguem precise
apesar que como disse isso é uma gambiarra naum respeitando a orientação a objetos ou qualquer outra coisa soh me contactar

//Codigo criar um botao no form
procedure TFormCadHorario.Button1Click(Sender: TObject);
var
 d1 : TTime;
 d2 : TTime;
 total :TTime;
 Totalhoras : Integer;
 VerificaMin :Integer;
 //variaveis para usar na funcao decodetime
 Hour :word;
 Min  :word;
 Sec  :word;
 Msec :Word;
 Hour2 :word;
 Min2  :word;
 Sec2  :word;
 Msec2 :Word;
 Hourt :word;
 Mint  :word;
 Sect  :word;
 Msect :Word;
begin
  d1 := StrToTime(Edit1.Text);
  d2 := StrToTime(Edit2.Text);
  //soma as horas
  total := d1+d2;
  //funcao que da horas minutos, segundos e milisegungos
  DecodeTime(d1, Hour, Min, Sec, MSec);
  DecodeTime(d2, Hour2, Min2, Sec2, MSec2);
  DecodeTime(total, Hourt, Mint, Sect, MSect);
  //Exibe a quantidade de horas em integer :o) yeah
  Totalhoras:=hour + hour2;
  VerificaMin:=0;
  if(Totalhoras >= 24) then
  begin
     if(Min + min2 > 59) then
        VerificaMin:= VerificaMin+1;
     TotalHoras :=  TotalHoras + VerificaMin;
     Edit3.Text := IntToStr(TotalHoras) + ´:´ +inttostr(Mint);
  end
  else
     Edit3.Text := inttostr(Hourt) + ´:´ +inttostr(Mint) ;
end;
//



GOSTEI 0
Carlosmielke

Carlosmielke

18/05/2004

transforme as horas em minutos e some e daí faça a conversão de minutos para horas ou seja, inteiro para string

carlos mielke


GOSTEI 0
Spider

Spider

18/05/2004

1º tem-se duas funções:

//*********** transforma hora em minutos *************//
function HoraMinuto(valor : String):Integer;
var minuto : integer;
begin
minuto:=strtoint(copy(valor,1,pos(´:´,valor)-1))*60;
minuto:=minuto+strtoint(copy(valor,pos(´:´,valor)+1,2));
result := minuto;
end;

//*********** transforma minutos em horas *************//
function MinutoHora(valor : integer):String;
var hora,minuto : integer;
begin
hora:=valor div 60;
minuto:=valor mod 60;
result := formatfloat(´00´,hora)+´:´+formatfloat(´00´,minuto);
end;

2º StringGrid + Button + Label;

no OnClick do Button
var i,total:integer;
begin
total:=0;
for i:=1 to StringGrid1.RowCount-1 do
total:=total+HoraMinuto(StringGrid.Cells[3,1]); //3 coluna das horas
label1.caption:=MinutoHora(Total);
end;


GOSTEI 0
POSTAR