Fórum Somando Horas em uma Variável #152447

06/04/2003

0

Estou tendo dificuldades para acular horas em uma variável.

Ex:
var Hora1: TDateTime; Hora2: TDateTime; Total: TDateTime; begin Hora1 := StrToTime(Edit1.Text); Hora2 := StrToTime(Edit2.Text); Total := Hora2 - Hora1; Label1.Caption := FormatDateTime(´hh:nn:ss´,total); end;


Digamos que eu tenho 07:20, se somar até 3 vezes esse valor da 22:00 Certo. O Problema é q seu somar a essas 22:00 h + 7:20 o Valor Fica 5:20.


Anonymous

Anonymous

Responder

Posts

07/04/2003

Ageualves

Up ! :D


Responder

Gostei + 0

07/04/2003

Anonymous

acumule os minutos em uma variável integer e depois converta em horas no final

a variável do tipo time só armazena até 24 horas


Responder

Gostei + 0

07/04/2003

Aroldo Zanela

Colega,

Você deve converter as horas e minutos para a mesma base, no caso, em minutos;
Pegar as horas já acumuladas e somar com a nova quantidade de horas seguindo a regra acima;
Fiz um exemplo que suporta até 99h e 99min, basta você seguir o raciocínio para implementar uma rotina completa e adequada:

procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption:= IncHoras(Label1.Caption,MaskEdit1.Text);
end;

function TForm1.IncHoras(Acumulada, Adicionar: String): String;
var hAcumulado: Integer;
    mAcumulado: Integer;
    hAdicionar: Integer;
    mAdicionar: Integer;
    QtdMinutos: Integer;
    nHoras, nMinutos: Integer;
begin

  hAcumulado:= StrToInt(Copy(Acumulada,1,2));
  mAcumulado  := StrToInt(Copy(Acumulada,4,2));
  hAdicionar  := StrToInt(Copy(Adicionar,1,2));
  mAdicionar  := StrToInt(Copy(Adicionar,4,2));
  // Converter tudo para a mesma base
  QtdMinutos := ((hAcumulado + hAdicionar)*60)+mAcumulado+mAdicionar;
  nHoras      := Trunc(QtdMinutos/60);// Acha as horas acumuladas
  nMinutos:= QtdMinutos - (nHoras*60);
  Result:= StrZero(nHoras,2)+´:´+StrZero(nMinutos,2);
end;

function TForm1.StrZero(iNumero, iComp: Integer): String;
begin
  Result := StringOfChar(´0´,iComp-Length(IntToStr(iNumero)))+IntToStr(iNumero);
end;



Responder

Gostei + 0

07/04/2003

Aroldo Zanela

Segue o DFM para facilitar o teste:

  object Label1: TLabel
    Left = 240
    Top = 150
    Width = 27
    Height = 13
    Caption = ´00:00´
  end
  object Button1: TButton
    Left = 94
    Top = 78
    Width = 75
    Height = 25
    Caption = ´Button1´
    TabOrder = 0
    OnClick = Button1Click
  end
  object MaskEdit1: TMaskEdit
    Left = 248
    Top = 64
    Width = 121
    Height = 21
    EditMask = ´00:00;1;_´
    MaxLength = 5
    TabOrder = 1
    Text = ´  :  ´
  end



Responder

Gostei + 0

08/04/2003

Ageualves

Obrigado Pelas Respostas, principalmente ao Aroldo Zanela.
Vou Pegar Esse seu Ex. e estudar com calma. :wink:

[]s


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar