¿Como puedo hacer para que en el fondo de un control de un formulario,
mientras este vacio, ponga (en atenuado) "Introduzca aqui la fecha"?
Es decir seria como una ayuda para saber que hay que poner en cada campo
JUAN M AFAN DE RIBERA
=====================
1- crea un control etiqueta para cada control cuadro de texto en el que
quieras mostrar ese tipo de ayuda
2- esas etiquetas deberían llamarse: "lbl" y el nombre del cuadro de texto
al que "pertenecerán"
3- pon esa etiqueta exactamente en la misma posición que el cuadro de texto
del cual quieres mostrar el texto de ayuda, escribe el texto de ayuda y
ponle una fuente, color y grosor que creas adecuado.
4- después pon este código en el formulario:
'******* CODIGO **************
Dim textoEtiquetas() As String
Dim numEtiquetas As Integer
Private Sub Form_Load()
Dim ctl As Control
'grabamos en una matriz los nombres y los
'títulos de las etiquetas con el texto de ayuda
For Each ctl In Me.Controls
If ctl.ControlType = acLabel Then
ReDim Preserve textoEtiquetas(1, numEtiquetas) As String
textoEtiquetas(0, numEtiquetas) = ctl.Name
textoEtiquetas(1, numEtiquetas) = ctl.Caption
numEtiquetas = numEtiquetas + 1
End If
Next
End Sub
'Al cambiar de registro comprobamos los valores
'de los campos del registro
Private Sub Form_Current()
Dim ctl As Control
For Each ctl In Me.Controls
'si es un cuadro de texto...
If ctl.ControlType = acTextBox Then
'si el campo contiene datos
If Not IsNull(ctl.Value) Or ctl.Value <> "" Then
'borramos el título de la etiqueta
Me.Controls("lbl" & ctl.Name).Caption = ""
Else 'si no contiene datos
'volvemos a poner el título de la etiqueta
Call escribeCaption(ctl.Name)
End If
End If
Next
End Sub
'rutina para controlar el contenido del control actual
Sub controlEtiquetas()
'si contiene datos
If Screen.ActiveControl <> "" Then
'borramos el titulo de la etiqueta
Me.Controls("lbl" & Screen.ActiveControl.Name).Caption = ""
Else
'si no, escribimos de nuevo el titulo de la etiqueta
Call escribeCaption(Screen.ActiveControl.Name)
End If
End Sub
'rutina para recuperar el titulo de las etiquetas
Sub escribeCaption(ctlName As String)
Dim i As Integer
For i = 0 To numEtiquetas
'si es la etiqueta correspondiente al control
If textoEtiquetas(0, i) = "lbl" & ctlName Then
'escribimos el titulo de nuevo
Me.Controls(textoEtiquetas(0, i)).Caption = _
textoEtiquetas(1, i)
Exit For
End If
Next
End Sub
'********* FIN CODIGO ************
RESPUESTA DE EDUARDO OLAZ
=========================
Otra solución parecida:
Por cada control TextBox se pone un control Etiqueta, del mismo tamaño y en
la misma posición que el textBox.
Esta etiqueta tendrá el color de fondo blanco y el texto, por ejemplo gris
oscuro.
Ponemos cada etiqueta detrás de su textBox correspondiente mediante
Formato>Enviar al fondo
Este ejemplo de código sería para un formulario con 2 textBox, txtDato y
txtFecha
Lo que hago es jugar con la transparencia del textBox en los eventos
Al activar registro (del formulario)
Al perder el enfoque (de cada textBox)
___________________________________
Const conEstiloFondoNormal As Long = 0
Const conEstiloFondoTransparente As Long = 1
Private Sub Form_Current()
AjustarControl txtDato
AjustarControl txtFecha
End Sub
Private Sub txtDato_LostFocus()
AjustarControl txtDato
End Sub
Private Sub txtFecha_LostFocus()
AjustarControl txtFecha
End Sub
Sub AjustarControl(CuadroDeTexto As TextBox)
If Nz(CuadroDeTexto, "") = "" Then
CuadroDeTexto.BackStyle = conEstiloFondoNormal
Else
CuadroDeTexto.BackStyle = conEstiloFondoTransparente
End If
End Sub
___________________________________
RESPONDE CHEA
=============
Una alternativa sería utilizar la sección correspondiente a null de la
propiedad formato:
formato = dd/mm/aa;;;"Introduzca una fecha "
Pero, como el resultado resulta incómodo para meter datos, debemos cambiarlo
en los eventos Gotfocus y Losfocus:
Private Sub CampoFecha_GotFocus()
Me.CampoFecha.Format = "dd/mm/yy"
End Sub
Private Sub CampoFecha_LostFocus()
Me.CampoFecha.Format = "dd/mm/yy;;;" & Chr(34) & "Introduzca una fecha " & Chr(34)
End Sub
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)