ウィンドウタイトルバーやメインメニューの高さ、スクロールバーの幅を求める
17 SystemMetrics 動作確認 Delphi2007 更新日 2008/01/07(月)

OSの設定でウィンドウタイトルバー(キャプションバーって言うかな?)や
メインメニューの高さ(メインメニューを独自実装してない場合ね)や
スクロールバーの幅を求めたいときは次のようにします。


タイトルバーの高さ
    GetSystemMetrics (SM_CYCAPTION)

ウィンドウの枠幅
    GetSystemMetrics(SM_CYFRAME)

1行分のメニューバーの高さ
    GetSystemMetrics (SM_CYMENU)
    
縦スクロールバーの幅
    GetSystemMetrics(SM_CXVSCROLL)

横スクロールバーの高さ
    GetSystemMetrics(SM_CXHSCROLL)

Vistaで試しました。
XPのLunaインターフェースやVistaのウィンドウタイトルバーの高さは
結構太くなっています。

この幅は
SM_CYCAPTIONだけでは足りずに枠幅SM_CYFRAMEを含んでいて
GetSystemMetrics (SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME)
このように求める事ができるようです。

メニューが折り返されて何行になっているかは求める方法はわかりません。
Self.BoundRect.Topと
Self.ClientToScreen(Self.ClientRect.TopLeft).Top
との差分から、さらにWindowsのタイトルバー高さを引いて

1行分のメニューバーの高さで割れば求まりそうです。
必要なら試してください。