Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Suma de horas II (https://www.clubdelphi.com/foros/showthread.php?t=5172)

YolandaM 10-11-2003 17:14:20

de nuevo con las horas
 
Hola al foro.

Mirar, de vuelta con las horas: Tengo un tope de horas concretamente 64 y tengo la necesidad de restarle horas y minutos.

ejemplo:

si le resto a 64 horas 0:15 = 63:45

¿ sabeis como seria la formula ?

Gracias anticipadas.
YOLANDAM

CFPA86 10-11-2003 21:53:20

Mira, pasas todo lo que vas a restar a minutos, lo restas y luego el resultado que es en minutos lo pasas a horas, echale cabeza asi, creo que te pueda funcionar o si no me escribes si tienes algun problema.

YolandaM 10-11-2003 21:58:11

Gracias en molestarte en contestar.

YolandaM 11-11-2003 11:03:26

nada:

sigo sin saber como hacer la formula.

YolandaM 11-11-2003 12:37:48

tengo el siguiente codigo y lo hace bien.
implementation
var totalh,totalm:double;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Hour, Min, Sec, MSec: Word;
begin
totalh:=totalh+SpinEdit1.Value/24;
totalm:=totalm+SpinEdit2.Value/1440;
DecodeTime(totalh+totalm, Hour, Min, Sec, MSec);
edit1.Text:=IntToStr(hour+trunc(totalh+totalm)*24)+':'+IntToStr(min);
end;

initialization
totalh:=0;
totalm:=0;
end.
------------------------------------------------------
hasta aqui todo bien...
ahora tengo un tope de horas ( concretamete 64) en la cual tengo que restarle el contenido de edit1.text
por ejemplo, si en el contenido de edit1.text es 0:15 en otro text tendria qie poner 53:45, ¿ como se restaria esto y presentaria en otro control text ?

Saludos al foro.

YolandaM 11-11-2003 20:22:15

una ayuda por favor¡¡¡
 
tengo el siguiente codigo y lo hace bien.
implementation
var totalh,totalm:double;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Hour, Min, Sec, MSec: Word;
begin
totalh:=totalh+SpinEdit1.Value/24;
totalm:=totalm+SpinEdit2.Value/1440;
DecodeTime(totalh+totalm, Hour, Min, Sec, MSec);
edit1.Text:=IntToStr(hour+trunc(totalh+totalm)*24)+':'+IntToStr(min);
end;

initialization
totalh:=0;
totalm:=0;
end.
------------------------------------------------------
hasta aqui todo bien...
ahora tengo un tope de horas ( concretamete 64) en la cual tengo que restarle el contenido de edit1.text
por ejemplo, si en el contenido de edit1.text es 0:15 en otro text tendria qie poner 53:45, ¿ como se restaria esto y presentaria en otro control text ?

Saludos al foro.

marcoszorrilla 12-11-2003 07:59:12

Este último mensaje, se había publicado como un nuevo hilo siendo continuación del ya abierto sobre el tema de Suma de horas, por lo que ha sido anexado.

Cuando se abre un hilo para un tema concreto, se debe de seguir siempre en el mismo hasta que se de por terminado el tema, si la persona que pregunta, necesita que se le amplie la información debe de seguir añadiendo mensajes al mismo y hilo y no abrir un nuevo.

En cuanto a la posible solución hay varias y ya se ha apuntado una de ellas, pasar todo a minutos por ejemplo hacer las operaciones y luego reconvertirlo a horas minutos, segundos.

Un Saludo.

CFPA86 12-11-2003 16:37:11

Hola, nuevamente mira estudia y aplica este codigo, me funciona.

procedure TFctrltpo.DifTpoCtr(HorIni1, HorFin1 : String);
var
HoraInicial, HoraFinal : TDateTime;
HorIni, MinIni, HorFin, MinFin, Sec, MSec, MinAuxRes : Word;
Lsw, HorIniAux, HorFinAux : string;
Li : byte;
begin
LSumMin := 0;
HorIniAux := HorIni1;
HorFinAux := HorFin1;
if (HorIniAux <> '') and (HorFinAux <> '') then
begin
HoraInicial := StrToTime(HorIniAux);
DecodeTime(HoraInicial, HorIni, MinIni, Sec, MSec);
HoraFinal := StrToTime(HorFinAux);
DecodeTime(HoraFinal, HorFin, MinFin, Sec, MSec);
if (HoraFinal > HoraInicial ) then
// Hora de entrada (inicial) es menor que //
// la hora de salida (final), lo mas segu-//
// ro es que el usuario digito la hora de //
// salida bajo el horario de 12 horas //
begin
Lsw := 'Incorrecto';
MinAuxRes := 0;
if (HorIni = HorFin) then
begin
MinRes := MinFin - MinIni;
end
else
begin
MinRes := 60 - MinIni;
HorIni := HorIni + 1;
while (Lsw <> 'Correcto') do
begin
MinAuxRes := MinAuxRes + 1;
if (HorIni = HorFin) then
begin
MinRes := MinRes + MinFin;
Lsw := 'Correcto';
end;
if (MinAuxRes = 60) then
begin
MinRes := MinRes + MinAuxRes;
MinAuxRes := 0;
HorIni := HorIni + 1;
end;
end;
end;
LSumMin := LSumMin + MinRes;
MinAuxRes := 0;
HorIniAux := '';
HorFinAux := '';
Lsw := 'Incorrecto';
MinRes := 0;
LSumHor := 0;
while Lsw <> 'Correcto' do
begin
LSumHor := LSumHor + 1;
MinRes := MinRes + 60;
if (MinRes > LsumMin) then
begin
MinRes := MinRes - 60;
LSumHor := LSumHor - 1;
Lsw := 'Correcto';
end
else
begin
if (MinRes = LsumMin) then
Lsw := 'Correcto';
end;
end;
end
else
begin
Gcoderror := 1; // Es mayor la hora final que hora de entrada //
// Siempre y cuando sea horario de 12 horas //
end;
Label12.Caption := IntToStr(LSumHor) + ',' + IntToStr(LSumMin - MinRes) +
' Min. /' +
end;
end;
end;

Me dices como te fue, por este mismo hilo.
chauuuuuuuuuuu

YolandaM 12-11-2003 19:56:10

hOLA CFP86, QUE TAL?

Mira, te digo dónde me da error OK?

procedure TFctrltpo.DifTpoCtr(HorIni1, HorFin1 : String); --- ERROR
var
HoraInicial, HoraFinal : TDateTime;
HorIni, MinIni, HorFin, MinFin, Sec, MSec, MinAuxRes : Word;
Lsw, HorIniAux, HorFinAux : string;
Li : byte;
begin
LSumMin := 0; ------------ERROR
HorIniAux := HorIni1;
HorFinAux := HorFin1;
if (HorIniAux <> '') and (HorFinAux <> '') then
begin
HoraInicial := StrToTime(HorIniAux);
DecodeTime(HoraInicial, HorIni, MinIni, Sec, MSec);
HoraFinal := StrToTime(HorFinAux);
DecodeTime(HoraFinal, HorFin, MinFin, Sec, MSec);
if (HoraFinal > HoraInicial ) then
// Hora de entrada (inicial) es menor que //
// la hora de salida (final), lo mas segu-//
// ro es que el usuario digito la hora de //
// salida bajo el horario de 12 horas //
begin
Lsw := 'Incorrecto';
MinAuxRes := 0;
if (HorIni = HorFin) then
begin
MinRes := MinFin - MinIni;
end
else
begin
MinRes := 60 - MinIni;
HorIni := HorIni + 1;
while (Lsw <> 'Correcto') do
begin
MinAuxRes := MinAuxRes + 1;
if (HorIni = HorFin) then
begin
MinRes := MinRes + MinFin;
Lsw := 'Correcto';
end;
if (MinAuxRes = 60) then
begin
MinRes := MinRes + MinAuxRes;
MinAuxRes := 0;
HorIni := HorIni + 1;
end;
end;
end;
LSumMin := LSumMin + MinRes;
MinAuxRes := 0;
HorIniAux := '';
HorFinAux := '';
Lsw := 'Incorrecto';
MinRes := 0;
LSumHor := 0;
while Lsw <> 'Correcto' do
begin
LSumHor := LSumHor + 1;
MinRes := MinRes + 60;
if (MinRes > LsumMin) then
begin
MinRes := MinRes - 60;
LSumHor := LSumHor - 1;
Lsw := 'Correcto';
end
else
begin
if (MinRes = LsumMin) then
Lsw := 'Correcto';
end;
end;
end
else
begin
Gcoderror := 1; // Es mayor la hora final que hora de entrada //
// Siempre y cuando sea horario de 12 horas //
end;
Label12.Caption := IntToStr(LSumHor) + ',' + IntToStr(LSumMin - MinRes) +
' Min. /' +
end;
end;
end;

YolandaM 12-11-2003 20:04:27

hola otra vez CFPA86.
Mira este código me funciona bien.

//------------------------------------------------------------------//

unit sumahoras;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Mask, RzEdit, RzSpnEdt,dateutils;

type
TForm3 = class(TForm)
edit1: TRzSpinEdit;
edit2: TRzSpinEdit;
sumar: TBitBtn;
restar: TBitBtn;
Label3: TLabel;
Label4: TLabel;
Edit3: TEdit;
BitBtn1: TBitBtn;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure sumarClick(Sender: TObject);
procedure restarClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Edit4Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation
var totalh,TotalM,total,resta,totalm2: Ttime;


{$R *.dfm}

procedure TForm3.BitBtn1Click(Sender: TObject);
begin
close;
end;

procedure TForm3.sumarClick(Sender: TObject);
var Hour, Min, Sec, MSec: Word;
var hour2, min2,sec2,msec2: word;
begin
{ ---------------------------------------------------------------------}

Totalh:=totalh+Edit1.Value/24 ;
Totalm:=totalm+Edit2.Value/1440 ;
{ --------------------------------------}
total:=total + edit1.Value/24;
totalm2:=totalm2 + edit2.Value/1440;

decodetime(resta - total-totalm2, hour2,min2,sec2,msec2);
edit4.Text:=inttostr(hour2 + trunc(resta - total )* 24 ) +':'+IntToStr(min2);
{ -----------------------------------------}
DecodeTime(totalh+totalm, Hour, Min, Sec, MSec);
Edit3.Text:=IntToStr(hour + trunc(totalh+totalm) * 24) +':'+IntToStr(min);
Edit1.Value:=0;
Edit2.Value:=0;


{ -------------------------------------------------------------------}
end;
procedure TForm3.restarClick(Sender: TObject);
var Hour, Min, Sec, MSec: Word;
var hour2, min2,sec2,msec2: word;
begin
totalh:=totalh-Edit1.Value/24;
totalm:=totalm-Edit2.Value/1440;
total:=total - edit1.Value/24;
totalm2:=totalm2 -edit2.Value/1440;

decodetime(resta - total-totalm2, hour2,min2,sec2,msec2);
edit4.Text:=inttostr(hour2 + trunc(resta - total )* 24 ) +':'+IntToStr(min2) ;
DecodeTime(totalh+totalm, Hour, Min, Sec, MSec);


edit3.Text:=IntToStr(hour+trunc(totalh+totalm)*24)+':'+IntToStr(min);
edit1.Value:=0;
edit2.Value:=0;
End;

procedure TForm3.FormActivate(Sender: TObject);
begin
edit4.Text:='';
EDIT3.Text:='';
totalh:= 0;
totalm:= 0;
resta:= 64 / 24;
total:=0;
totalm2:=0;
end;

procedure TForm3.Edit4Change(Sender: TObject);
begin
if edit4.Text= '64:0' then restar.Enabled:=false else restar.enabled:=true;
if edit4.Text='0:0' then sumar.Enabled:=false else sumar.enabled:=true;
end;

initialization
totalh:= 0;
totalm:= 0;
resta:= 64 / 24;

end.

Gracias a tu interes y al foro en general.
YOLANDAM

buitrago 19-11-2003 22:05:39

Bueno, la respuesta a esto está en una seria de Units que encontré en Internet, donde suma Horas, minutos, meses, de todo, voy a tratar de colocarla en un site en miarroba.com, si es que alguien la solicita, pues llegue tarde a la pregunta y vi que habian muchas ideas.

Estas units lo que tienen son procedimientos y funciones al cual uno le pasa parametros y zasssssss!!!!!, Eureca!"!""""""


La franja horaria es GMT +2. Ahora son las 01:48:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi