Pregunta

En VB6, tengo un control DTPicker en un formulario. (El DTPicker es el selector de fecha / hora del calendario, incluido en Microsoft Windows Common Controls-2 6.0, disponible en el cuadro de diálogo Componentes).

Si bien hay muchas propiedades que afectan los colores del calendario cuando se despliega, no hay ninguna propiedad que permita cambiar el color de la fecha que se muestra en el cuadro de texto. Estoy buscando algo como la propiedad ForeColor estándar de TextBox.

¿Alguien tiene un poco de magia API para permitirme simular esa propiedad?

¿Fue útil?

Solución

Odio publicar algo que no es realmente útil, pero parece ser algo que está más allá del alcance de lo que Microsoft pretendía que los desarrolladores hicieran con el control. Si bien debe haber una llamada API para establecer el color (Windows sabe pintarlo de negro cuando está habilitado y gris cuando está deshabilitado), el método para hacerlo se me escapa.

Mi recomendación, en caso de que nadie más responda con cómo hacer lo que necesita, es obtener un nuevo control del Selector de fecha y hora con las propiedades necesarias (parecería que hay algunas opciones de terceros), o "roll" tu propio " control.

FWIW, este mismo problema existe en VB.NET con la excepción de que Microsoft anula específicamente (y luego oculta) las propiedades de ForeColor (y BackColor) heredadas del objeto Control genérico para no hacer nada.

Otros consejos

Voy a abordar dos problemas con el objeto DatePicker y una solución para ellos.

  1. No puede poner un valor en blanco en el Selector de fechas, lo que me lleva al segundo problema.
  2. No puede cambiar el color de la fuente para que al menos aparezca en blanco.

Para mantener la funcionalidad de DatePicker Y obtener la capacidad de tener un valor en blanco y sus opciones de formato de fuente regular (colores, etc.), utilicé dos objetos. Primero haga un objeto DTP y establezca el ancho para que solo pueda ver realmente la flecha desplegable. Para mí, este fue el 15. Luego haga un TextBox regular que sea lo suficientemente ancho como para mantener su fecha. Coloque la flecha DTP directamente a la derecha (o izquierda) del cuadro de texto. Luego, simplemente agregue código al evento Change del DTP para copiar su .Value en el .Text del TextBox de la siguiente manera:

Private Sub MyDTP_Change()    
    MyUserForm.MyDateTextBox.Text = MyUserForm.MyDTP.Value
End Sub

Entonces tenga cualquier referencia de datos que necesite para acceder a MyDateTextBox.Text en lugar de MyDTP.Value y ¡listo! Obtiene la funcionalidad del DTP con el control de formato de un TextBox regular.

EDITAR: Lo siento, JeffK, no estaba trabajando con VB en un entorno de producción hace 9 años. :) Me gustaría agregar el otro lado de la funcionalidad a esto también. Esto permite la sincronización bidireccional entre el TextBox y el DTP. IE: ingrese manualmente una fecha en el cuadro de texto y el calendario DTP sigue. Si el TextBox está en blanco o tiene una fecha no válida, el DTP se establece de forma predeterminada en la fecha de hoy.

Private Sub MyDateTextBox_Change()    
    If MyUserForm.MyDateTextBox.Text <> "" And 
    IsDate(MyUserForm.MyDateTextBox.Text) = True Then
        If CDate(MyUserForm.MyDateTextBox.Text) <= MyUserForm.MyDPT.MaxDate And _
        CDate(MyUserForm.MyDateTextBox.Text) >= MyUserForm.MyDPT.MinDate Then
            MyUserForm.MyDTP.Value = MyUserForm.MyDateTextBox.Text
        Else
            MyUserForm.MyDTP.Value = Date
        End If
    Else
        MyUserForm.MyDTP.Value = Date
    End If
End Sub
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top