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?

War es hilfreich?

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:

Seitengröße

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top