Come faccio a fare un rotolo TCheckListBox in verticale?
-
21-09-2019 - |
Domanda
Ho una TCheckListBox in un modulo. La sua proprietà Columns è impostato su 2, e se ci sono più elementi che possono stare su schermo in due colonne, mette una barra di scorrimento orizzontale nella parte inferiore del controllo.
La cosa è, il modo in cui questa forma disposto, sarebbe molto più conveniente per scorrere verticalmente. Ma io non riesco a capire come rendere la casella farlo. Ho pensato che l'impostazione Colonne a 1 dovrebbe funzionare, ma non è così.
Qualcuno sa come fare un rotolo TCheckListBox verticale anziché in orizzontale?
Soluzione
È necessario impostare Columns
a 0.
Per tutti i valori positivi della VCL invia un messaggio LB_SETCOLUMNWIDTH
alla sottostante controllo casella di riepilogo nativa, con il parametro di larghezza impostato la larghezza cliente casella di riepilogo diviso per il numero di colonne. Gli elementi che non rientrano inizieranno una nuova colonna con la stessa larghezza della colonna, in modo che la barra di scorrimento orizzontale diventa visibile.
Se Columns
è 0 allora c'è una sola colonna che si estende per l'intera larghezza del client della casella di riepilogo, e gli elementi che non si adattano farà la barra di scorrimento verticale visibile, e nascondono la barra di scorrimento orizzontale.
Modifica
Sembra che ci sia interesse genuino cosa succede quando un valore negativo viene utilizzato per la proprietà Columns
.
Il metodo TCustomListBox.CreateParams()
imposta la lista LBS_MULTICOLUMN
scatola di stile a seconda della proprietà Columns
essere diverso da 0. Per valori negativi è impostato il flag stile, ma la VCL non invia il messaggio LB_SETCOLUMNWIDTH
, in modo che il controllo nativo utilizza la colonna di default larghezza. E ' documentato di essere:
15 volte la larghezza media dei caratteri per il tipo di carattere utilizzato dalla casella di riepilogo.
(Ricerca per "Lo stile LBS_MULTICOLUMN specifica" per trovare il relativo passaggio di testo.)