標準スクロールバーが表示されているかどうかを調べる
|
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
|