3

メモ帳を開いて 10 行を追加し、エディターのサイズを変更して 9 行のみを表示すると、サム トラック (スクロール バー上のドラッグ可能なブロック) は垂直スクロール バーのほぼ全長になります。数千行を追加すると、サム トラックの高さはわずか数ピクセルになります。

水平スクロール バーを実装した TCustomControl の子孫でこの動作を複製したいと思います。そこで、ウィンドウ スタイル (CreateParams 内) に WS_HSCROLL を追加し、WM_HSCROLL のハンドラーを実装しました。途中で、SetScrollRange と SetScrollPos を使用してサム トラックの範囲と位置を管理しますが、小さなバグはほぼ完全な正方形のままです。

私は何が欠けていますか?

4

2 に答える 2

7

プロパティを使用してPageSize、つまみのサイズに影響を与えることができます。

例:

ScrollBar1.Min      := 0;
ScrollBar1.Max      := 100;
ScrollBar1.Position := 70;
ScrollBar1.PageSize := 50;

次のようになります。

ページサイズ

于 2009-09-11T01:44:51.083 に答える
4

ドキュメントでは、 andSetScrollInfoではなく使用を推奨しています。SetScrollRangeSetScrollPos

Wouter の回答が指摘しているように、ページ サイズも設定する必要があります。位置と範囲は、サムの中心がどこに属するかを OS に伝えますが、ページ サイズは範囲のどれだけが表示されるかを OS に伝え、それがサムのサイズを決定します。そのために使用するSetScrollInfo必要があります。おまけとして、位置、範囲、およびページ サイズを一度に設定できます。


TCustomControlとは 1 つの点で異なりTWinControlます: キャンバスがあります。TScrollingWinControl1 つの点でも異なります。スクロール バーがあります。キャンバスをTScrollingWinControl子孫に追加するのは、スクロール バーを子孫に追加するよりもはるかに簡単ですTCustomControl。VCL ソース コードからコピーして貼り付けるコードは少なくて済みます。コントロールの基本クラスを変更して、現在の場所を確認してください。

それができない場合でも、方法を検討して協力することをお勧めしTScrollingWinControlますTControlScrollBar

于 2009-09-11T01:52:47.150 に答える