30 de julio de 2003

Obtiene la diferencia entre 2 horas

Toma en cuenta cuando la hora inicial es antes de medianoche y la final es después
* Funcion .......: DifHMS
* Creada ........: Julio 16, 2003 By Sukos
* Uso ...........: Obtiene la diferencia en Horas, Minutos y Segundos entre dos Horas
* Llamada .......: DifHMS(,)
* Donde .........:    = Expresion de Hora Inicial, en formato "HH:MM:SS"
*        = Expresion de Hora Final, en formato "HH:MM:SS"
* Observaciones .: Si la Hora Inicial es mayor que la Hora Final esta funcion supone que el proceso inicio
*     antes de la medianoche y concluyo despues de las 0 horas, en este caso realiza la
*     operacion tomando en cuenta desde la Hora inicial hasta la medianoche mas lo que resulte
*     de la medianoche hasta la hora final.
* Ejemplo .......: DifHMS("00:00:05","00:00:05") -----> Devuelve "00:00:00"
*     DifHMS("16:00:10","17:00:15") -----> Devuelve "01:00:05"
*     DifHMS("23:59:58","00:00:05") -----> Devuelve "00:00:07"
* Notas .........: Si se usa en un metodo de formularios, solamente convierte a comentario
*     la primera linea agregandole un "*" al inicio y la llamas con "Objeto.DifHMS(,)"
* --------------------------------------------------------------------------------------------------------------------------
Func DifHMS(Vl_Hora1, Vl_Hora2)
Local Vl_Resp, Vl_Hh1, Vl_Mm1, Vl_Ss1, Vl_Hh2, Vl_Mm2, Vl_Ss2
Local Vl_HoraCompl1, Vl_HoraCompl2, Vl_DifTiempo, Vl_DifHh, Vl_DifMm, Vl_DifSs

Vl_Hh1=Int(Val(SubStr(Vl_Hora1,1,2)))
Vl_Mm1=Int(Val(SubStr(Vl_Hora1,4,2)))
Vl_Ss1=Int(Val(SubStr(Vl_Hora1,7,2)))

Vl_Hh2=Int(Val(SubStr(Vl_Hora2,1,2)))
Vl_Mm2=Int(Val(SubStr(Vl_Hora2,4,2)))
Vl_Ss2=Int(Val(SubStr(Vl_Hora2,7,2)))

Vl_HoraCompl1=DateTime(100,1,1,Vl_Hh1,Vl_Mm1,Vl_Ss1)
Vl_HoraCompl2=DateTime(100,1,1,Vl_Hh2,Vl_Mm2,Vl_Ss2)
Vl_HoraCero1=DateTime(100,1,1,23,59,59)
Vl_HoraCero2=DateTime(100,1,1,0,0,0)

If Vl_HoraCompl1=Vl_HoraCompl2
 Store 0 To Vl_DifHh, Vl_DifMm, Vl_DifSs
Else
 If Vl_HoraCompl1 < Vl_HoraCompl2
  Vl_DifTiempo=Vl_HoraCompl2-Vl_HoraCompl1
 Else
  Vl_DifTiempo=(Vl_HoraCero1-Vl_HoraCompl1)+(Vl_HoraCompl2-Vl_HoraCero2)+1
 EndIf
 Vl_DifHh=Int(Vl_DifTiempo/3600)    && Calcula las Horas
 Vl_DifTiempo=Int(Vl_DifTiempo%3600)   && Quita las horas obtenidas
 Vl_DifMm=Int(Vl_DifTiempo/60)    && Calcula los minutos
 Vl_DifSs=Int(Vl_DifTiempo%60)    && Calcula los Segundos
EndIf
Vl_Resp=PadL(Vl_DifHh,2,"0")+":"+PadL(Vl_DifMm,2,"0")+":"+PadL(Vl_DifSs,2,"0")
Retu Vl_Resp

Eduardo Espejel Angeles

23 de julio de 2003

Saber si una tabla esta ordenada descente o ascendentemente

Este truco es bastante útil para evitar volver a ordenar una tabla si ya esta ordenada de la forma que la necesitamos....
IF "DESCENDING" $ SET("ORDER")  
       ?'Descendente'
ELSE &&ASCENDENTE
      ?'Ascendente'
ENDIF
Esta es otra forma .... devolverá .T. si esta ordenado Descendentemente y .F. si esta ordenado Ascendentemente
?"DESCENDING" $ SET("INDEX")
Este truco me fascina :-)

David Amador (Davphantom)

21 de julio de 2003

Mover formulario agarrandolo por cualuier parte

Este código nos permite nos mover formulario agarrándolo por cualquier parte.

#define WM_LBUTTONUP 514
#define WM_SYSCOMMAND  274
#define SC_MOVE 61456
#define MOUSE_MOVE 61458
Declare integer SendMessage in "User32";
  Long  hwnd, Long wMsg, Long wParam, Long lParam 
* Este código se pondrá en el control_MouseDown ...
PUBLIC lngRet As Long
* Envía un MouseUp al Control
=SendMessage(thisform.hWnd, WM_LBUTTONUP, 0, 0)
* Envía la orden de mover el form
=SendMessage(thisform.hWnd, WM_SYSCOMMAND, MOUSE_MOVE, 0)
David Amador