スクロールバーのサムトラックのサイズを変更するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/1408434

質問

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

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

不足しているものは何ですか?

役に立ちましたか?

解決

ドキュメントでは、 SetScrollRange および SetScrollInfo > SetScrollPos 。

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


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

それがオプションではない場合でも、 TScrollingWinControl TControlScrollBar がどのように連携するかを確認することをお勧めします。

他のヒント

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

例:

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

次のようになります:

ページサイズ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top