Come posso ridimensionare la levetta della barra di scorrimento
-
05-07-2019 - |
Domanda
Se apri Blocco note, aggiungi dieci righe e ridimensiona l'editor per mostrarne solo nove, la traccia del pollice (il blocco trascinabile su una barra di scorrimento) è quasi l'intera lunghezza della barra di scorrimento verticale. Se aggiungi un paio di migliaia di righe, la traccia del pollice è alta solo pochi pixel.
Vorrei duplicare questo comportamento in un discendente TCustomControl dove ho implementato una barra di scorrimento orizzontale. Quindi ho aggiunto WS_HSCROLL al mio stile di finestra (in CreateParams) e ho implementato un gestore per WM_HSCROLL. Lungo la strada, uso SetScrollRange e SetScrollPos per gestire la distanza e la posizione della traccia del pollice, ma il piccolo bugger rimane un quadrato quasi perfetto.
Cosa mi sto perdendo?
Soluzione
La documentazione consiglia di utilizzare SetScrollInfo
anziché SetScrollRange
e
Come La risposta di Wouter sottolinea , devi anche impostare le dimensioni della pagina. La posizione e l'intervallo indicano al sistema operativo dove appartiene il centro del pollice, ma le dimensioni della pagina indicano quanto dell'intervallo è visibile e è ciò che determina la dimensione del pollice. Per questo devi usare SetScrollInfo
; come bonus, ti consente di impostare la posizione, l'intervallo e le dimensioni della pagina in una sola volta.
TCustomControl
differisce da TWinControl
in un solo modo: ha una tela. TScrollingWinControl
differisce anche in un solo modo: ha barre di scorrimento. L'aggiunta di un'area di disegno a un discendente TScrollingWinControl
dovrebbe essere molto più semplice dell'aggiunta di barre di scorrimento a un discendente TCustomControl
& # 8212; è meno codice da copiare e incollare dal codice sorgente VCL. Cambia la classe base del tuo controllo e poi vedi dove sei.
Anche se questa non è un'opzione, faresti comunque bene a vedere come TScrollingWinControl
e TControlScrollBar
lavorano insieme.
Altri suggerimenti
Puoi usare la proprietà PageSize
per influenzare la dimensione del pollice.
Esempio:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;
Apparirà come: