標準スクロールバーが表示されているかどうかを調べる
61 ScrollBarVisible 動作確認 Delphi2007 更新日 2008/01/30(水)

Windowsの様々なコントロールでは
スクロールバーを付属させることが出来ます。
それを標準スクロールバーと呼ぶそうです。

VCLではその標準Scrollbarをほとんど意識せずに
各種のプロパティでScrollbarのOn/Offを自動制御できますが

実際、その標準スクロールバーが表示されているかどうかを
知るためのプロパティが用意されていませんので
それを調べる関数を作ってみました。

────────────────────
//縦スクロールバーの表示/非表示を返す関数
function VerticalScrollbarVisible(Control: TControl): Boolean;
begin
  with Control do
  if (Width - ClientWidth) >= GetSystemMetrics(SM_CXVSCROLL) then
    Result := True
  else
    Result := False;
end;

//横スクロールバーの表示/非表示を返す関数
function HorizontalScrollbarVisible(Control: TControl): Boolean;
begin
  with Control do
  if (Height - ClientHeight) >= GetSystemMetrics(SM_CXHSCROLL) then
    Result := True
  else
    Result := False;
end;

//使い方
procedure TForm1.RichEdit1Change(Sender: TObject);
begin
  if VerticalScrollbarVisible(RichEdit1) then
    Label1.Caption := '垂直スクロールバー有り'
  else
    Label1.Caption := '垂直スクロールバー無し';

  if HorizontalScrollbarVisible(RichEdit1) then
    Label2.Caption := '水平スクロールバー有り'
  else
    Label2.Caption := '水平スクロールバー無し'
end;
────────────────────
HeightやWidthはBoundRectの値から
ClientHeightやClientWidthはClientRectの値から
取得するのと同じなので

BoundRectとClientRectを比較してその差が
標準スクロールバーの幅(Windowsの設定で決まる)よりも
大きいときはスクロールバーが表示されている、という判断をしています。

動作確認画面です。






参考────────────────────
[Delphi-ML:19326] Re: TListViewのScrollBar
http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=19326