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


しんじ  2011-06-15 22:54:06  No: 40669

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


deldel  2011-06-17 18:20:34  No: 40670

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


au  2011-06-17 19:30:53  No: 40671

その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に変更。

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加