Wie mache ich die Thumbtrack Resize der Scrollbar
-
05-07-2019 - |
Frage
Wenn Sie Notepad öffnet, zehn Zeilen hinzufügen und den Editor der Größe nur neun zu zeigen, der Daumen Spur (der ziehbar Block auf einer Bildlaufleiste) ist fast die gesamte Länge der vertikalen Bildlaufleiste. Wenn Sie ein paar tausend Zeilen hinzufügen, die Daumen Spur ist nur ein paar Pixel hoch.
Ich mag diese bahaviour in einem TCustomControl Nachkommen duplizieren, wo ich eine horizontale Bildlaufleiste realisiert. So habe ich WS_HSCROLL meinen Fensterstil (in CreateParams) und implementiert einen Handler für WM_HSCROLL. Auf dem Weg dorthin, verwende ich Setscrollrange und SetScrollPos die Reichweite und die Position des Daumens Spur zu verwalten - aber der kleine Scheißer bleibt ein nahezu perfektes Quadrat
.Was bin ich fehlt?
Lösung
Die Dokumentation mit SetScrollInfo
statt SetScrollRange
und SetScrollPos
.
Wie Wouter Antwort weist darauf hin, Sie müssen auch die Seitengröße einzustellen. Die Position und die Reichweite des O sagen, wo das Zentrum des Daumens gehört, aber die Seitengröße erzählt sie, wie viel des Bereichs sichtbar ist, und das ist , was die Größe des Daumens bestimmt. Sie müssen SetScrollInfo
dafür verwenden; als Bonus, können Sie damit die Position, Reichweite und Seitengröße auf einmal eingestellt.
TCustomControl
unterscheidet sich von TWinControl
in nur einer Art und Weise: Es hat eine Leinwand hat. TScrollingWinControl
unterscheidet sich in nur einer Art und Weise, auch: Es Scrollbalken hat. eine Leinwand zu einem TScrollingWinControl
Nachkommen Hinzufügen soll viel einfacher sein, als Bildlaufleiste zu einem TCustomControl
Nachkommen Zugabe - es weniger Code ist von dem VCL-Quellcode kopieren und einfügen. Ändern Sie Ihre Steuerung der Basisklasse und dann sehen, wo Sie sind.
Auch wenn das nicht möglich ist, werden Sie immer noch gut daran tun, zu betrachten, wie TScrollingWinControl
und TControlScrollBar
zusammenarbeiten.
Andere Tipps
Sie können die PageSize
Eigenschaft verwenden, um die Daumengröße zu beeinflussen.
Beispiel:
ScrollBar1.Min := 0;
ScrollBar1.Max := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;
Wird wie folgt aussehen: