首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 2009 TCategoryPanelGroup 顏色自訂完全指南:Gradient/Chevron/HeaderFont 全方位控制

     編輯:Delphi

豐富的顏色自訂屬性體系

TCategoryPanelGroup 提供完整的顏色自訂屬性,涵蓋群組層級與面板層級,支援漸層、摺疊箭號、背景色、字型色等多維度視覺控制。

執行效果動畫

完整顏色屬性對照表

屬性所屬元件影響範圍預設行為
GradientBaseColorGroup標題列漸層起始色 (hsGradient 模式)clBtnFace
GradientColorGroup標題列漸層結束色clBtnShadow
ChevronColorGroup摺疊箭號 (Chevron) 正常狀態顏色clWindowText
ChevronHotColorGroup滑鼠懸停時箭號顏色clHighlight
ColorGroup群組背景色 (含邊框、捲軸區)clBtnFace
ColorPanel單一面板內容區背景色clWindow
HeaderFont.ColorGroup標題文字顏色clWindowText

完整互動式顏色選擇器實作


uses ExtCtrls, StdCtrls, ColorGrd;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // 初始化面板
  CategoryPanel1.Height := ClientHeight div 2;
  CategoryPanel2.Height := CategoryPanel1.Height;
  CategoryPanel3.Height := CategoryPanel1.Height;
  CategoryPanel1.Caption := 'CPanel1';
  CategoryPanel2.Caption := 'CPanel2';
  CategoryPanel3.Caption := 'CPanel3';

  // RadioGroup 列出所有可調整顏色屬性
  RadioGroup1.Caption := 'Color';
  with RadioGroup1.Items do
  begin
    Add('CategoryPanelGroup1.ChevronColor');
    Add('CategoryPanelGroup1.ChevronHotColor');
    Add('CategoryPanelGroup1.GradientBaseColor');
    Add('CategoryPanelGroup1.GradientColor');
    Add('CategoryPanelGroup1.Color');
    Add('CategoryPanel1.Color');
    Add('CategoryPanel2.Color');
    Add('CategoryPanel3.Color');
    Add('CategoryPanelGroup1.HeaderFont.Color');
  end;
  RadioGroup1.ItemIndex := 0;

  // ColorGrid 設定
  ColorGrid1.Align := alRight;
  ColorGrid1.Width := 48;
  ColorGrid1.GridOrdering := go2x8; // 2欄 x 8列 顯示 16 色
end;

procedure TForm1.ColorGrid1Change(Sender: TObject);
begin
  case RadioGroup1.ItemIndex of
    0: CategoryPanelGroup1.ChevronColor := ColorGrid1.ForegroundColor;
    1: CategoryPanelGroup1.ChevronHotColor := ColorGrid1.ForegroundColor;
    2: CategoryPanelGroup1.GradientBaseColor := ColorGrid1.ForegroundColor;
    3: CategoryPanelGroup1.GradientColor := ColorGrid1.ForegroundColor;
    4: CategoryPanelGroup1.Color := ColorGrid1.ForegroundColor;
    5: begin
         CategoryPanel1.Color := ColorGrid1.ForegroundColor;
         CategoryPanelGroup1.Realign; // 面板顏色變更需強制重繪
       end;
    6: begin
         CategoryPanel2.Color := ColorGrid1.ForegroundColor;
         CategoryPanelGroup1.Realign;
       end;
    7: begin
         CategoryPanel3.Color := ColorGrid1.ForegroundColor;
         CategoryPanelGroup1.Realign;
       end;
    8: begin
         CategoryPanelGroup1.HeaderFont.Color := ColorGrid1.ForegroundColor;
         CategoryPanelGroup1.HeaderFont := CategoryPanelGroup1.HeaderFont; // 觸發字型重繪
       end;
  end;
end;

視覺層級關係圖解

TCategoryPanelGroup (群組容器)
├── Color (群組背景)
├── HeaderStyle = hsGradient
│   ├── GradientBaseColor (標題漸層起始)
│   └── GradientColor (標題漸層結束)
├── ChevronColor (箭號正常色)
├── ChevronHotColor (箭號懸停色)
├── HeaderFont.Color (標題文字色)
└── TCategoryPanel (面板項目)
    ├── Caption (標題文字)
    ├── Collapsed (摺疊狀態)
    ├── Color (面板內容區背景)
    └── 子控制項...

進階顏色套用技巧

1. 專業漸層配色方案


procedure ApplyProfessionalGradient(Group: TCategoryPanelGroup; Scheme: Integer);
begin
  Group.HeaderStyle := hsGradient;
  case Scheme of
    0: begin // 深藍專業風
      Group.GradientBaseColor := $004A2E1A; // 深棕藍
      Group.GradientColor := $002D1A0D;     // 更深
      Group.HeaderFont.Color := clWhite;
      Group.ChevronColor := clWhite;
      Group.ChevronHotColor := clYellow;
    end;
    1: begin // 綠色生態風
      Group.GradientBaseColor := $002E6B2E;
      Group.GradientColor := $001A451A;
      Group.HeaderFont.Color := clWhite;
      Group.ChevronColor := clLime;
      Group.ChevronHotColor := clYellow;
    end;
    2: begin // 紅色警示風
      Group.GradientBaseColor := $001A1ACC;
      Group.GradientColor := $000D0D8B;
      Group.HeaderFont.Color := clWhite;
      Group.ChevronColor := clYellow;
      Group.ChevronHotColor := clRed;
    end;
  end;
  Group.GradientDirection := gdVertical;
end;

2. 主題感應自動適應 (hsThemed 模式下)


procedure TForm1.ApplyThemeAwareColors;
begin
  CategoryPanelGroup1.HeaderStyle := hsThemed;
  // hsThemed 模式下 GradientColor/BaseColor/ChevronColor 會被忽略
  // 僅 HeaderFont.Color 和 Panel.Color 生效
  CategoryPanelGroup1.HeaderFont.Color := clWindowText; // 跟隨系統
  CategoryPanel1.Color := clWindow;
  CategoryPanel2.Color := clWindow;
  CategoryPanel3.Color := clWindow;
end;

3. 動態高對比度模式切換


procedure TForm1.ToggleHighContrast(Enabled: Boolean);
var
  panels: array of TCategoryPanel;
  i: Integer;
begin
  if Enabled then
  begin
    CategoryPanelGroup1.HeaderStyle := hsGradient;
    CategoryPanelGroup1.GradientBaseColor := clBlack;
    CategoryPanelGroup1.GradientColor := clBlack;
    CategoryPanelGroup1.HeaderFont.Color := clYellow;
    CategoryPanelGroup1.ChevronColor := clYellow;
    CategoryPanelGroup1.ChevronHotColor := clWhite;
    CategoryPanelGroup1.Color := clBlack;
    for i := 0 to CategoryPanelGroup1.Panels.Count - 1 do
      CategoryPanelGroup1.Panels[i].Color := clBlack;
  end
  else
    ApplyProfessionalGradient(CategoryPanelGroup1, 0); // 恢復預設
end;

常見問題與解決方案

問題原因解決
設定 Panel.Color 後不生效未觸發重繪呼叫 CategoryPanelGroup1.Realign 或 Panel.Invalidate
HeaderFont.Color 設定無效字型物件未重新指派HeaderFont := HeaderFont 強制更新
hsThemed 模式下漸層色不生效主題模式忽略漸層屬性改用 hsGradient 或接受系統主題渲染
ChevronHotColor 不顯示滑鼠未進入標題區或主題模式確認 HeaderStyle=hsGradient 且滑鼠正確懸停

部署建議:持久化使用者偏好


uses IniFiles;

procedure SaveColorPreferences(Group: TCategoryPanelGroup; Ini: TIniFile);
begin
  Ini.WriteInteger('Colors', 'GradientBase', Group.GradientBaseColor);
  Ini.WriteInteger('Colors', 'GradientEnd', Group.GradientColor);
  Ini.WriteInteger('Colors', 'Chevron', Group.ChevronColor);
  Ini.WriteInteger('Colors', 'ChevronHot', Group.ChevronHotColor);
  Ini.WriteInteger('Colors', 'GroupBG', Group.Color);
  Ini.WriteInteger('Colors', 'HeaderFont', Group.HeaderFont.Color);
  // 面板顏色可逐一儲存
end;

procedure LoadColorPreferences(Group: TCategoryPanelGroup; Ini: TIniFile);
begin
  Group.GradientBaseColor := Ini.ReadInteger('Colors', 'GradientBase', clBtnFace);
  Group.GradientColor := Ini.ReadInteger('Colors', 'GradientEnd', clBtnShadow);
  Group.ChevronColor := Ini.ReadInteger('Colors', 'Chevron', clWindowText);
  Group.ChevronHotColor := Ini.ReadInteger('Colors', 'ChevronHot', clHighlight);
  Group.Color := Ini.ReadInteger('Colors', 'GroupBG', clBtnFace);
  Group.HeaderFont.Color := Ini.ReadInteger('Colors', 'HeaderFont', clWindowText);
  Group.HeaderFont := Group.HeaderFont; // 觸發套用
end;

總結

TCategoryPanelGroup 的顏色層級架構清晰:群組層級控制標題列漸層、箭號、字型、整體背景;面板層級控制各自內容區背景。善用 ColorGrid 互動選色、Realign 強制重繪、主題感應切換、偏好持久化,即能打造專業、可個性化的摺疊面板視覺體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved