GroupBoxのCaption表示を中央にするには


しんじ  2011-06-15 13:54:06  No: 40669  IP: 192.*.*.*

GroupBoxのCaption表示を中央にする方法等ありますでしょうか?
検索してみましたが、良く方法がみつからなかったので、お願いします。

編集 削除
deldel  2011-06-17 09:20:34  No: 40670  IP: 192.*.*.*

Panelを2つ使えばそれなりに似たものができますが、どうでしょうか(^^;
Caption用のPanelは枠なしにすれば・・・

編集 削除
au  2011-06-17 10:30:53  No: 40671  IP: 192.*.*.*

そのFormのGroupBoxは全て変わります。
Formの宣言の前に下記を追加、usesにthemesを追加
  TGroupBox = class(StdCtrls.TGroupBox)
  protected
    procedure Paint; override;
  end;

実装部分は、まずStdCtrlsのTCustomGroupBox.Paintをコピー。
テーマ有効時のテキスト描画位置のCaptionRectを修正する。
    if ThemeControl(Self) then
    begin
      if Text <> '' then
      begin
ブロックの一番下に

        OffsetRect(CaptionRect, Width div 2 - 8 - CaptionRect.Right div 2, 0);
を追加。

ThemeServices.DrawText(Handle, Details, Text, CaptionRect, DT_LEFT, 0);

のDT_LEFTをDT_CENTERに変更。
テーマ無効時のRを修正する。

Flags := DrawTextBiDiModeFlags(DT_SINGLELINE);
の行の前に
R := Rect(Width div 2 - Canvas.TextWidth(Text) div 2 - 8, 0, 0, H);
を追加、またDT_SINGLELINEをDT_SINGLELINE OR DT_CENTERに変更。

一応こんな感じで中央表示になりました。

編集 削除