再次感谢研究的无私分享,很实用的功能吧,老司机带路少走弯路!
上码。
procedure CustomDrawColumnHeader(Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); const MultiLines: array [Boolean] of Integer = (cxSingleLine, cxWordBreak); ShowEndEllipsises: array [Boolean] of Integer = (0, cxShowEndEllipsis); var ATextRect, ABounds: TRect; AFontTextColor, ABkColor, AColor: TColor; ABorders: TcxBorders; AText: string; AFont: TFont; AState: TcxButtonState; begin ABounds := AViewInfo.Bounds; ABorders := [bBottom, bLeft, bRight]; AFont := ACanvas.Font; ATextRect := AViewInfo.ContentBounds; AFontTextColor := ACanvas.Font.Color; InflateRect(ATextRect, -1, -1); //设置颜色及鼠标移上、按下效果 case AViewInfo.ButtonState of cxbsDefault, cxbsNormal, cxbsDisabled: ABkColor := clInactiveCaption; cxbsHot: ABkColor := $00CFBDAB; cxbsPressed: ABkColor := $00A78665; end; AText := AViewInfo.Column.Caption;//列标题 with ACanvas do begin //填充标题颜色 if (ABkColor <> clNone) then begin SetBrushColor(ABkColor); FillRect(ABounds); end; //绘制文字 if AText <> '' then begin Brush.Style := bsClear; Font := AFont; Font.Color := AFontTextColor; DrawText(AText, ATextRect, cxAlignmentsHorz[taCenter] or cxAlignmentsVert[vaCenter] or MultiLines[False] or ShowEndEllipsises[False]); Brush.Style := bsSolid; end; end; with ABounds do begin // 这里是加边框 ACanvas.Brush.Color := $00A78665; if bLeft in ABorders then // 左边框 ACanvas.FillRect(Rect(Left, Top, Left + 1, Bottom)); if bTop in ABorders then //上边框 ACanvas.FillRect(Rect(Left, Top, Right, Top + 1)); if bRight in ABorders then //右边框 ACanvas.FillRect(Rect(Right - 1, Top, Right, Bottom)); if bBottom in ABorders then //下边框 ACanvas.FillRect(Rect(Left, Bottom - 1, Right, Bottom)); end; ADone := True; end; //使用示例 procedure TForm15.cxGrid1DBTableView1CustomDrawColumnHeader(Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean); begin CustomDrawColumnHeader(Sender, ACanvas, AViewInfo, ADone); end;