Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/07/2010, 08:24
Avatar de erbuson
erbuson
 
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años
Puntos: 53
Respuesta: DTPicker1 marque fechas

Hola Carnero, esto podría ser una idea (mejorable por supuesto) si te convence.

Necesitas tan sólo un MsFlexGrid llamado Grid o cambia el nombre donde te convenga, por lo demás creo que el código es suficientemente explicativo con los comentarios que le pongo.

Código vb:
Ver original
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.   ' Dimensionamos el Grid/Calendario
  5.  Dim Dia As Integer
  6.   Grid.Cols = 32             ' Porque el mayor día del mes es 31
  7.  Grid.Rows = 1              ' Dejamos sólo la linea de Cabeceras
  8.  Grid.ColWidth(0) = 800     ' Ancho de la Columna 0 yyyy/mm
  9.  For Dia = 1 To 31          ' Ponemos número de día como título
  10.    Grid.TextMatrix(0, Dia) = Dia
  11.     Grid.ColWidth(Dia) = Grid.RowHeight(0)
  12.   Next
  13. End Sub
  14.  
  15. Private Sub CargarCalendario()
  16.   ' Funcion que carga las fechas en el Grid/Calendario
  17.  ' Evidentemente esta función debes codificarla según tus ficheros
  18.  Dim Registro As Single
  19.   Grid.Redraw = False           ' Evitamos el parpadeo del Grid
  20.  Do
  21.     ' Las siguientes lineas están como comentarios porque dependen del aplicativo
  22.    ' Registro = Registro + 1
  23.    ' FicheroDIARIO Registro
  24.    ' If Registro = -1 Then Exit Do
  25.    ' If Not RegistroSuprimido("DIARIO") Then GridAdd CDate(FechaGMD4(RegistroDiario.Fecha))
  26.  Loop
  27.   Grid.Col = 0                  ' Columna 0 yyyy/mm
  28.  Grid.Sort = 1                 ' Ordenamos por Año/Mes
  29.  Grid.Redraw = True            ' Redibujamos el Grid
  30. End Sub
  31.  
  32. Private Sub GridAdd(Fecha As Date)
  33.   ' Marcamos el Grid/Calendario segñun la fecha recibida
  34.  Dim Fila As Single, AñoMes As String, Dia As Integer
  35.   AñoMes = Format(Fecha, " yyyy/mm")    ' Ponemos un espacio en blanco delante centrar y forzar alfanumérico
  36.  Dia = Day(Fecha)
  37.   For Fila = 1 To Grid.Rows - 1
  38.     ' Si Año/Mes está ya creado, salimos a PonerDia
  39.    If Grid.TextMatrix(Fila, 0) = AñoMes Then GoTo PonerDia
  40.   Next
  41.   ' Si Año/Mes no es´aba, añadimos una Fila y lo ponemos ahí
  42.  Grid.Rows = Fila + 1
  43.   Grid.TextMatrix(Fila, 0) = AñoMes
  44. PonerDia:
  45.   ' Si la casilla del día no está marcada, la marcamos
  46.  If Grid.TextMatrix(Fila, Dia) = "" Then
  47.     Grid.Col = Dia
  48.     Grid.Row = Fila
  49.     Grid.CellFontName = "Wingdings 2"
  50.     Grid.CellFontSize = 12
  51.     Grid.Text = "P"
  52.   End If
  53. End Sub

De todos modos, si te convence, cualquier duda comentas.

Posibles mejoras, que en vez de la marca de Visto, indique cuantos registros hay en cada fecha, colores segun número de registros, etc.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...