GetDate
Capturar fechas de un calendario
Fecha: 03/Feb/99 (03/Dic/98)
Autor: Emilio Gordo Lima < [email protected] >
Te envio un ZIP con un modulillo que me parece interesante,
para capturar fechas con un calendario, en vez de tener que teclearlas.
La explicacion de que hace y como, esta en un fichero de Word dentro del ZIP
Gracias ;)
Taluegop
Salu2
Emilio Gordo Lima
Systra Development S.L. - Dpto. Desarrollo
[email protected]
La explicaci�n:
Se trata de un formulario que actua como calendario para introducir fechas. Necesita el control MSCAL.OCX que viene con Access 97.
Incluye el formulario propiamente dicho, y un modulo con el codigo necesario. Una vez incluidos ambos en el proyecto, el funcionamiento es simple. En cualquier caja de texto se coloca este codigo, en por ejemplo KeyDown:
Private Sub TxtFecha_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyF5 Then
TxtFecha.Text = GetDate.GetDate(TxtFecha, 4, 2)
End If
End Sub
Y ya ta! ;)
Te incluyo un peque�o proyecto de prueba para demostra el furrule ;)
Por cierto, dentro del modulo BAS hay una funcion basante interesante (creo) para transformar coordenadas de ventana cliente a coordenadas de pantalla ;)
Un saludo, y gracias por tu pagina, y por ponernoslo facil a los demas ;)
Taluegop
El c�digo: (s�lo el modulo BAS GetDate, el resto lo tienes en el Zip con el c�digo)
'
Option Explicit
' Modulo de GetDate
' *****************************************************************
' * Puedes utilizar este m�dulo, y su formulario correspondiente *
' * como mas te plazca. Solo te pido que mantengas estas lineas *
' * y que si cambias algo, lo pongas aqui. Asi mismo, si haces *
' * alguna modificaci�n interesante y que creas que puede mejorar *
' * el funcionamineto, te agradeceria me lo comunicaras y me *
' * mandaras el c�digo *
' *****************************************************************
' * Last Revision : Oct 10 , 1998 *
' * @ Emilio Gordo Lima *
' *****************************************************************
' La funcion eglClientToScreen se utiliza para obtener coordenadas
' x/y correspondientes al objeto Screen a partir de coordenadas X/Y
' de cliente.
' De todas formas no es necesario, si no necesitas que el calendario
' aparezca pegado al control que lo llama
Type POINTAPI ' 8 Bytes
X As Long
Y As Long
End Type
Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Public Function GetDate(Optional ctl As Control, Optional Position As Integer, Optional Align As Integer) As String
' Ctl : El control al que hay que pegar el calendario
' Position: Si se pasa CTL, la esquina del control:
' 1 - Arriba izquierda
' 2 - Arriba derecha
' 3 - Abajo izquierda
' 4 - Abajo derecha
' Align: Si se pasa CTL, la esquina del calendario que hay que usar para alinear
' 1 - Esquina superior izquierda
' 2 - esquina superior derecha
' 3 - esquina inferior izquierda
' 4 - esquina inferior derecha
' Esta funci�n presupone que el formulario FRMCALENDARIO existe en el proyecto
Dim X As Long
Dim Y As Long
Load frmCalendario
If IsMissing(ctl) Then
' se centra en la pantalla
X = (Screen.TwipsPerPixelX * Screen.Width) / 2
Y = (Screen.TwipsPerPixelY * Screen.Height) / 2
frmCalendario.Left = X - (frmCalendario.Width / 2)
frmCalendario.Top = Y - (frmCalendario.Height / 2)
Else
If Not (IsMissing(Position)) Then
Select Case Position
Case 1 ' Arriba izquierda
X = 0: Y = 0
Case 2 ' arriba derecha
X = ctl.Width: Y = 0
Case 3 ' abajo izquierda
X = 0: Y = ctl.Height
Case 4
X = ctl.Width: Y = ctl.Height
End Select
End If
eglClientToScreen ctl, X, Y
If Not (IsMissing(Align)) Then
Select Case Align
' Case 1 se trata como case else
Case 2 ' superior derecha
frmCalendario.Left = X - frmCalendario.Width
frmCalendario.Top = Y
Case 3 ' inferior izquierda
frmCalendario.Left = X
frmCalendario.Top = Y - frmCalendario.Height
Case 4 ' inferior derecha
frmCalendario.Left = X - frmCalendario.Width
frmCalendario.Top = Y - frmCalendario.Height
Case Else
frmCalendario.Left = X
frmCalendario.Top = Y
End Select
Else ' si no se especifica, se cuadra con la esquina superior izquierda
frmCalendario.Left = X
frmCalendario.Top = Y
End If
End If
frmCalendario.Show 1
GetDate = frmCalendario.Value
Unload frmCalendario
End Function
Public Sub eglClientToScreen(ctl As Control, X As Long, Y As Long)
Dim lpPointApi As POINTAPI
Dim RetVal As Long
' X en twips
' y en twips
' Se transforman las coordenadas en pixels
lpPointApi.X = X / Screen.TwipsPerPixelX
lpPointApi.Y = Y / Screen.TwipsPerPixelY
RetVal = ClientToScreen(ctl.hWnd, lpPointApi)
If RetVal <> 0 Then
' se pasan las coordenadas devueltas a twips
X = Screen.TwipsPerPixelX * lpPointApi.X
Y = Screen.TwipsPerPixelY * lpPointApi.Y
End If
End Sub
Fichero con el c�digo de ejemplo (getdate_emilio.zip 6.78 KB)