Domanda

In VB6, ho un controllo DTPicker su un modulo. (DTPicker è il selettore di data / ora del calendario, incluso in Microsoft Windows Common Controls-2 6.0, disponibile dalla finestra di dialogo Componenti.)

Sebbene ci siano molte proprietà che influiscono sui colori del calendario quando viene rilasciato, non esiste alcuna proprietà che consenta di modificare il colore della data visualizzata nella casella di testo. Sto cercando qualcosa come la proprietà ForeColor di TextBox standard.

Qualcuno ha un po 'di magia API per permettermi di simulare quella proprietà?

È stato utile?

Soluzione

Odio pubblicare qualcosa che non è davvero utile, ma questo sembra essere qualcosa che va oltre lo scopo di ciò che Microsoft intendeva fare con il controllo da parte degli sviluppatori. Mentre ci deve essere sicuramente una chiamata API per impostare il colore (Windows sicuramente sa dipingere di nero quando abilitato e grigio quando disabilitato), il metodo per farlo mi sfugge.

La mia raccomandazione, se nessun altro dovesse rispondere su come fare ciò di cui hai bisogno, è di ottenere un nuovo controllo PickTime DateTime con le proprietà necessarie (sembrerebbe che ci siano alcune opzioni di terze parti), oppure " roll il tuo " controllo.

FWIW, questo stesso problema esiste in VB.NET con l'eccezione che Microsoft sostituisce (e quindi nasconde) in modo specifico le proprietà ForeColor (e BackColor) ereditate dall'oggetto Control generico per non fare nulla.

Altri suggerimenti

Risolverò due problemi con l'oggetto DatePicker e una soluzione alternativa per loro.

  1. Non puoi inserire un valore vuoto in DatePicker, il che mi porta al secondo problema.
  2. Non è possibile modificare il colore del carattere per renderlo almeno vuoto.

Per mantenere la funzionalità di DatePicker E ottenere la possibilità di avere un valore vuoto e le normali opzioni di formattazione del carattere (colori, ecc.), ho usato due oggetti. Per prima cosa crea un oggetto DTP e imposta la larghezza in modo da poter vedere davvero solo la freccia a discesa. Per me questo era 15. Quindi crea un normale TextBox abbastanza largo da contenere la tua data. Posiziona la freccia DTP direttamente a destra (o a sinistra) della casella di testo. Quindi aggiungi semplicemente il codice all'evento Change del DTP per copiare il suo .Value nel .Text del TextBox in questo modo:

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

Quindi hai tutti i riferimenti ai dati che ti servono per accedere a MyDateTextBox.Text invece che a MyDTP.Value e presto! Ottieni la funzionalità del DTP con il controllo di formattazione di un normale TextBox.

EDIT: Scusa JeffK, non lavoravo con VB in un ambiente di produzione 9 anni fa. :) Vorrei aggiungere anche l'altro lato della funzionalità a questo. Ciò consente la sincronizzazione bidirezionale tra TextBox e DTP. IE: immettere manualmente una data nella casella di testo e il calendario DTP segue. Se la casella di testo è vuota o ha una data non valida, il DTP viene impostato automaticamente sulla data odierna.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top