Question

Dans VB6, j'ai un contrôle DTPicker sur un formulaire. (DTPicker est le sélecteur de date / heure du calendrier, inclus dans Microsoft Windows Common Controls-2 6.0, disponible dans la boîte de dialogue Composants.)

Bien que de nombreuses propriétés affectent les couleurs du calendrier lorsqu'il est déroulé, aucune propriété ne permet de modifier la couleur de la date affichée dans la zone de texte. Je recherche quelque chose comme la propriété ForeColor standard de TextBox.

Quelqu'un at-il un peu de magie API pour me permettre de simuler cette propriété?

Était-ce utile?

La solution

Je n'aime pas publier quelque chose qui n'est pas vraiment utile, mais cela semble aller au-delà de ce que Microsoft a prévu que les développeurs fassent avec le contrôle. Bien que l'appel de la couleur soit certainement nécessaire (Windows sait certainement le peindre en noir lorsqu'il est activé et en gris lorsqu'il est désactivé), la méthode pour ce faire m'échappe.

Ma recommandation, si personne d'autre ne vous explique comment faire ce dont vous avez besoin, est soit d'obtenir un nouveau contrôle Sélecteur DateTime avec les propriétés nécessaires (il semblerait qu'il existe quelques options tierces), ou votre propre " contrôle.

FWIW, ce même problème existe dans VB.NET à la différence près que Microsoft substitue (puis masque) les propriétés ForeColor (et BackColor) héritées de l'objet de contrôle générique à ne rien faire.

Autres conseils

Je vais aborder deux problèmes liés à l'objet DatePicker et une solution de contournement.

  1. Vous ne pouvez pas mettre une valeur vide dans DatePicker, ce qui m'amène au deuxième problème.
  2. Vous ne pouvez pas changer la couleur de la police pour au moins la rendre vierge.

Pour conserver les fonctionnalités de DatePicker ET permettre d’avoir une valeur vide et vos options de formatage de police habituelles (couleurs, etc.), j’ai utilisé deux objets. Commencez par créer un objet DTP et définissez la largeur de manière à ne voir que la flèche déroulante. Pour moi, c'était 15. Puis, créez une zone de texte régulière suffisamment large pour contenir votre date. Placez la flèche DTP directement à la droite (ou à la gauche) de la zone de texte. Ensuite, vous ajoutez simplement du code à l’événement Change du DTP pour copier sa .Value dans le .Text de la zone de texte, comme suit:

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

Ensuite, toutes les références de données dont vous avez besoin doivent accéder au MyDateTextBox.Text au lieu du MyDTP.Value et hop! Vous obtenez les fonctionnalités du DTP avec le contrôle de formatage d’une zone de texte normale.

EDIT: Désolé JeffK, je ne travaillais pas avec VB dans un environnement de production il y a 9 ans. :) J'aimerais aussi ajouter l'autre côté de la fonctionnalité. Cela permet une synchronisation bidirectionnelle entre la zone de texte et le DTP. IE: entrez manuellement une date dans la zone de texte et le calendrier DTP suit. Si la zone de texte est vide ou a une date non valide, le DTP utilise par défaut la date du jour.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top