calcular hora*R$??

Delphi

21/10/2003

e ae galera, blz??!!

procurei aqui no forum, mas n conssigui fazer o meu (sou novo em programacao( e to comecando a achar q sou burro em matematica(rsrs))).

tenho no meu form, tres edits

edit1 = hora entrada (q ele coloca o valor da hora q o form foi criado usando ´now´ )

edit2 = hora saida (coloca automatico quando eu clico no botao ´calcular´)

edit3 = onde eu quero digitar o valor/hora.

eu n conssigo fazer no label, aparecer o valor q custara p o cliente, n consigo fazer o calculo de (horaEntrada - horaSaida) * valor/hora

como eu faco, oq tem q ser string, oq n tem q ser?!!?

pra fazer horaEntrada - hora Saida to usando um exemplo do arq de dicas do delphi q e esse aqui:

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;

ate ai blz...pra fazer o calculo d entrada e saida, mas n sei como faco pra q seja multiplicado o valor q eu digito no edit* a quantidade de horas

obrigado desde ja

aquele abraco

viper0!!! :evil:


Viper0

Viper0

Curtidas 0

Respostas

Marconi

Marconi

21/10/2003

viper0

Eu tenho uma rotina que faz a somatória de horas trabalhadas durante varios dias em uma Ordem de Serviço.

Quando ela é acionada, a tabela tabela Trabalhos já está filtrada para conter dados somente de determinada Ordem de Serviço.

Nos campos da tabela ´fim´ e ´inicio´ as horas entram no formato ´hh:mm:ss´.

Como voce vai ver eu utilizo a função DecodeTime para separar horas,
minutos e segundos em valores tipo Word (inteiros) para ficar mais fácil de calcular. Após o cálculo, o resultado é reconvertido para Time e é passado o total para um campo da tabela OS.

Para o seu caso voce vai precisar são dos valores:
resultado:= (hour+(min/60))*StrToFloat(edit3.text);


procedure TfControle.TotalizaHoras;
var Hour, Min, Sec, MSec :word; totH,totM: Integer;
begin
totH:=0; totM:=0;
Trabalhos.first;
while not Trabalhos.eof do begin
if (Trabalhos[´fim´]<>null) and (Trabalhos[´inicio´]<>null) then begin
DecodeTime(Trabalhos[´fim´],Hour,Min,Sec,Msec);
totH:=totH+Hour;
totM:=totM+Min;
DecodeTime(Trabalhos[´inicio´],Hour,Min,Sec,Msec);
totH:=totH-Hour;
totM:=totM-Min;
end;
Trabalhos.next;
end;
while totM>=60 do begin
inc(totH);
totM:=totM-60;
end;
while totM<0 do begin
dec(totH);
totM:=totM+60;
end;
os.edit;
os[´TotalHoras´]:=IntToStr(totH)+´:´+Tcam.Strzero(totM,2);
os.post;
end;

Espero ter ajudado

Marconi


GOSTEI 0
Marconi

Marconi

21/10/2003

Completando

substitua a linha

os[´TotalHoras´]:=IntToStr(totH)+´:´+Tcam.Strzero(totM,2);

por

os[´TotalHoras´]:=IntToStr(totH)+´:´+Strzero(totM,2);

abaixo a função recriada do Clipper StrZero, que coloca zeros a esquerda, se necessário, para completar o número como string;


Function StrZero(valor,tam:Int64):string;
begin
result:=IntToStr(valor);
if length(result)> tam then result:=StringOfChar(´*´,tam);
while length(result)<tam do result:=´0´+result;
end;

Marconi


GOSTEI 0
POSTAR