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?

È stato utile?

Soluzione

La documentazione consiglia di utilizzare SetScrollInfo anziché SetScrollRange e SetScrollPos .

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:

Dimensione pagina

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top